使用MailKit将电子邮件发送到SpecifiedPickupDirectory

时间:2016-10-08 07:58:06

标签: c# email smtp asp.net-core mailkit

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

现在,我想在ASP.NET Core中做同样的事情,直到现在还没有实现SmtpClient类。所有搜索结果都以MailKit结束。我使用了他们的发送邮件代码,这对gmail工作正常。

我不希望每次都发送测试电子邮件,在我的项目中可能会有很多我需要发送电子邮件的方案。如何使用MailKit的本地电子邮件发送功能。任何链接或小源代码都会有所帮助。感谢

1 个答案:

答案 0 :(得分:14)

我不确定SmtpDeliveryMethod.SpecifiedPickupDirectory如何工作以及它的确切功能的详细信息,但我怀疑它可能只是将邮件保存在本地Exchange服务器定期检查邮件的目录中发出去。

假设情况如此,您可以这样做:

void SaveToPickupDirectory (MimeMessage message, string pickupDirectory)
{
    do {
        // Note: this will require that you know where the specified pickup directory is.
        var path = Path.Combine (pickupDirectory, Guid.NewGuid ().ToString () + ".eml");

        if (File.Exists (path))
            continue;

        try {
            using (var stream = new FileStream (path, FileMode.CreateNew)) {
                message.WriteTo (stream);
                return;
            }
        } catch (IOException) {
            // The file may have been created between our File.Exists() check and
            // our attempt to create the stream.
        }
    } while (true);
}

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

基于Microsoft的referencesource,当使用SpecifiedPickupDirectory时,他们实际上也会使用Guid.NewGuid ().ToString () + ".eml",因此这可能是最佳选择。