Asp.Net Core MailKit 完美附件(中文名、长文件名)
时间: 2024-05-07 11:21:35 浏览: 16
Asp.Net Core MailKit 是一个非常强大的邮件发送库,可以用来发送邮件、添加附件等操作。当我们需要发送包含中文名或者长文件名的附件时,可能会遇到一些问题,比如附件名称乱码或者无法添加附件等情况。下面是一个完美支持中文名和长文件名的 MailKit 添加附件的示例代码:
```csharp
using MailKit.Net.Smtp;
using MailKit.Security;
using MimeKit;
using System.IO;
using System.Net;
namespace MailKitDemo
{
public class MailKitHelper
{
public void SendMailWithAttachment()
{
var message = new MimeMessage();
message.From.Add(new MailboxAddress("发件人名称", "发件人邮箱"));
message.To.Add(new MailboxAddress("收件人名称", "收件人邮箱"));
message.Subject = "邮件主题";
var builder = new BodyBuilder();
builder.HtmlBody = "<h1>邮件正文</h1>";
// 附件1:中文名
var attachment1 = new MimePart("application", "pdf")
{
FileName = MimeKit.Utils.MimeUtils.Encode("中文名.pdf"),
Content = new MimeContent(File.OpenRead("附件1.pdf")),
ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
ContentTransferEncoding = ContentEncoding.Base64
};
builder.Attachments.Add(attachment1);
// 附件2:长文件名
var attachment2 = new MimePart("application", "pdf")
{
FileName = MimeKit.Utils.MimeUtils.Encode("这是一个非常非常长的文件名.pdf"),
Content = new MimeContent(File.OpenRead("附件2.pdf")),
ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
ContentTransferEncoding = ContentEncoding.Base64
};
builder.Attachments.Add(attachment2);
message.Body = builder.ToMessageBody();
using (var client = new SmtpClient())
{
client.Connect("smtp.qq.com", 587, SecureSocketOptions.StartTls);
client.Authenticate("发件人邮箱", "邮箱授权码");
client.Send(message);
client.Disconnect(true);
}
}
}
}
```
在添加附件时,我们需要设置 MimePart 的 FileName 属性,这里使用了 MimeUtils.Encode 方法来对附件名称进行编码,确保其可以被正确地解析和显示。
需要注意的是,由于邮件发送服务器的限制,可能需要对附件进行压缩或者拆分,以确保邮件能够被正常发送。