System.Net.Mail替代方案没有消息大小增加

时间:2015-03-27 13:09:56

标签: email smtp mailkit mimekit

我们正在使用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文件。我在这里错过了什么?

1 个答案:

答案 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编码。