【问题标题】:.net Core Mailkit send attachement from array.net Core Mailkit 从数组发送附件
【发布时间】:2017-05-15 19:01:09
【问题描述】:

我正在测试不支持 System.Net.Mail 的 .Net Core MVC,我发现的唯一替代方案是 Mailkit,它运行良好,但无法弄清楚如何将我存储在数据库中的附件作为二进制文件发送.我在 MVC 5 中使用了以下内容:

     var mail = new MailMessage();
     mail.Attachments.Add(new Attachment(new MemoryStream(attachment), 
     attachmentName, attachmentType));

如何在 MailKit 中做到这一点。

【问题讨论】:

  • 那么,问题出在哪里?它有效还是您有问题?
  • 它适用于 MVC 5 和 System.Net.Mail。我想使用 Mailkit。
  • 显示您当前使用 Mailkit 的代码

标签: c# asp.net-mvc email-attachments memorystream mailkit


【解决方案1】:

您需要创建一个构建器,然后将附件添加到其中,附件可以是 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);              
    }   }      

【讨论】:

  • 附件构造函数只接受一个参数。基于 jstedfast 的回答 github.com/jstedfast/MailKit/issues/445。我使用了 builder.Attachments.Add(attachmentName, attachment, ContentType.Parse(attachmentType));
猜你喜欢
  • 1970-01-01
  • 2018-03-04
  • 2021-01-30
  • 2017-05-23
  • 2017-12-23
  • 2020-11-20
  • 1970-01-01
  • 2021-01-03
  • 2019-03-06
相关资源
最近更新 更多