gpt4 book ai didi

c# - 使用 MailKit 发送邮件到 SpecifiedPickupDirectory

转载 作者:可可西里 更新时间:2023-11-01 09:02:41 24 4
gpt4 key购买 nike

到目前为止,我一直在使用 SmtpClient 和 ASP.NET MVC 5。为了在本地系统上测试电子邮件发送功能,我使用的是 client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;

现在,我想在 ASP.NET Core 中做同样的事情,直到现在还没有实现 SmtpClient 类。所有对此的搜索都在 MailKit 上结束.我已经使用了他们的发送邮件代码,它在 gmail 上运行良好。

我不想每次都发送测试邮件,我的项目中可能有很多场景需要发送邮件。如何使用 MailKit 的本地电子邮件发送功能。任何链接或少量源代码都会有所帮助。谢谢

最佳答案

我不确定 SmtpDeliveryMethod.SpecifiedPickupDirectory 的工作原理及其具体作用的更详细信息,但我怀疑它可能只是将邮件保存在本地 Exchange 服务器定期检查的目录中用于发送邮件。

假设是这种情况,您可以这样做:

public static void SaveToPickupDirectory (MimeMessage message, string pickupDirectory)
{
do {
// Generate a random file name to save the message to.
var path = Path.Combine (pickupDirectory, Guid.NewGuid ().ToString () + ".eml");
Stream stream;

try {
// Attempt to create the new file.
stream = File.Open (path, FileMode.CreateNew);
} catch (IOException) {
// If the file already exists, try again with a new Guid.
if (File.Exists (path))
continue;

// Otherwise, fail immediately since it probably means that there is
// no graceful way to recover from this error.
throw;
}

try {
using (stream) {
// IIS pickup directories expect the message to be "byte-stuffed"
// which means that lines beginning with "." need to be escaped
// by adding an extra "." to the beginning of the line.
//
// Use an SmtpDataFilter "byte-stuff" the message as it is written
// to the file stream. This is the same process that an SmtpClient
// would use when sending the message in a `DATA` command.
using (var filtered = new FilteredStream (stream)) {
filtered.Add (new SmtpDataFilter ());

// Make sure to write the message in DOS (<CR><LF>) format.
var options = FormatOptions.Default.Clone ();
options.NewLineFormat = NewLineFormat.Dos;

message.WriteTo (options, filtered);
filtered.Flush ();
return;
}
}
} catch {
// An exception here probably means that the disk is full.
//
// Delete the file that was created above so that incomplete files are not
// left behind for IIS to send accidentally.
File.Delete (path);
throw;
}
} while (true);
}

上面的代码片段使用 Guid.NewGuid () 作为生成临时文件名的方式,但您可以使用任何您想要的方法(例如,您也可以选择使用 message. MessageId + ".eml").

基于微软的referencesource ,当使用 SpecifiedPickupDirectory 时,他们实际上也使用 Guid.NewGuid ().ToString () + ".eml",所以这可能是要走的路。

关于c# - 使用 MailKit 发送邮件到 SpecifiedPickupDirectory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39930103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com