我们正在使用System.Net.Mail将电子邮件作为带有附件的文本发送。附件是 Excel和Powerpoint 文件。在发送电子邮件之前,内容类型设置为MIME类型。
使用三封电子邮件进行的测试证明,Exchange服务器的每个案例都增加了26%。
有没有办法阻止邮件大小的增加?
如果没有,是否还有另一种.NET或开源替代方案?
SMTP Drop会解决这个问题吗?
更新:
var mimeMessage = new MimeMessage();
mimeMessage.From.Add(new MailboxAddress(string.Empty, fromEmailAddress));
mimeMessage.To.Add(new MailboxAddress(string.Empty, toEmailAddress));
mimeMessage.Cc.Add(new MailboxAddress(string.Empty, copyEmailAddress));
mimeMessage.Subject = subject;
var builder = new BodyBuilder { HtmlBody = bodyText };
MvcApplication.Logger.Info("SendEmail:attachmentFiles:Count=" + attachmentFiles.Count);
foreach (var attachmentFile in attachmentFiles)
{
var attachment = new MimePart()
{
ContentObject = new ContentObject(File.OpenRead(attachmentFile)),
ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
ContentTransferEncoding = ContentEncoding.Binary,
FileName = Path.GetFileName(attachmentFile)
};
builder.Attachments.Add(attachment);
}
MvcApplication.Logger.Info("SendEmail:attachmentFiles:Added Count=" + builder.Attachments.Count);
mimeMessage.Body = builder.ToMessageBody();
using (var client = new SmtpClient())
{
client.Connect("smtp.domain.com", 25, false);
client.Send(mimeMessage);
MvcApplication.Logger.Info(
client.Capabilities.HasFlag(SmtpCapabilities.BinaryMime)
? "SMTP Server supports BinaryMime"
: "SMTP Server does NOT support BinaryMime");
client.Disconnect(true);
}
上述代码成功发送了一条HTML消息。
BinaryMime的SMTP服务器功能标志返回true。
如果ContentTransferEncoding是Base64,它可以工作(附加9个excel和powerpoint文件)。如果我更改它Binary然后只附加一个损坏的Excel文件。我在这里错过了什么?
答案 0 :(得分:1)
如果SMTP服务器支持BINARYMIME扩展,您可以使用MailKit发送电子邮件,并将附件的内容传输编码设置为ContentEncoding.Binary
。
我不认为System.Net.Mail支持BINARYMIMNE SMTP扩展(至少它在我查看GitHub上的referencesource时看起来不像),因此系统。 Net.Mail.SmtpClient将始终为base64或quoted-printable编码附件。
BINARYMIME SMTP扩展允许客户端发送消息而无需abse64或quoted-printable编码。