.net Core Mailkit从阵列发送附件

hnc*_*ncl 1 c# asp.net-mvc memorystream email-attachments mailkit

我正在测试不支持System.Net.Mail的.Net Core MVC,我发现的唯一选择是Mailkit,它工作正常,但无法弄清楚如何以二进制形式发送已存储在数据库中的附件。我在MVC 5中使用了以下内容:

     var mail = new MailMessage();
     mail.Attachments.Add(new Attachment(new MemoryStream(attachment), 
     attachmentName, attachmentType));
Run Code Online (Sandbox Code Playgroud)

如何在MailKit中做到这一点。

Dro*_*rya 6

您需要创建一个构建器,然后向其添加附件,附件可以是IFromFile或二进制字符串。希望这可以帮助。

public async void SendEmail(string mailTo, string mailFrom, string cc, string subject, string message)
{
    var emailMessage = new MimeMessage();
    if (cc != null)
    {
        emailMessage.Cc.Add(new MailboxAddress(cc)); 
    }

    emailMessage.From.Add(new MailboxAddress("SenderName", "UserName"));
    emailMessage.To.Add(new MailboxAddress("mailTo"));
    emailMessage.Subject = subject;
    var builder = new BodyBuilder { TextBody = message };

    //Fetch the attachments from db
    //considering one or more attachments
    if (attachments != null)
    {
        foreach (var attachment in attachments.ToList())
        {
            builder.Attachments.Add(attachmentName, attachment, ContentType.Parse(attachmentType));
        }
    }
    emailMessage.Body = builder.ToMessageBody();
    using (var client = new SmtpClient())
    {
        var credentials = new NetworkCredential
        {
            UserName = "USERNAME",
            Password = "PASSWORD"
        };
        await client.AuthenticateAsync(credentials);
        await client.ConnectAsync("smtp.gmail.com", 587).ConfigureAwait(false);
        await client.SendAsync(emailMessage).ConfigureAwait(false);
        await client.DisconnectAsync(true).ConfigureAwait(false);              
    }   }      
Run Code Online (Sandbox Code Playgroud)