0

我们使用 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 文件)。如果我将其更改为二进制,则仅附加一个损坏的 excel 文件。我在这里想念什么?

4

1 回答 1

1

如果 SMTP 服务器支持 BINARYMIME 扩展,您可以使用MailKit发送电子邮件并将附件的 Content-Transfer-Encoding 设置为ContentEncoding.Binary.

我不认为 System.Net.Mail 支持 BINARYMIMNE SMTP 扩展(至少当我在 GitHub 上查看参考源时它看起来不像),因此 System.Net.Mail.SmtpClient 将始终 base64 或引用-可打印的编码附件。

BINARYMIME SMTP 扩展允许客户端发送消息,而无需对它们进行 abse64 或quoted-printable 编码。

于 2015-03-29T14:16:03.537 回答