我有一个使用内置邮件框架的asp.net发送电子邮件的功能。我把它包括在下面。
public void SendMessage()
{
var message = new MailMessage();
var client = new SmtpClient();
// Get the Message Envelope Details
this.LoadMessageDetailsFromFile();
// Process rules (if any): Rules engine not implemented yet!
this.SetConfiguration(message);
// Formats the message body template using XSLT
this.FormatMessageBody(message);
// Adds the attachments
this.AddAttachments(message);
// Send the mail
client.Timeout = 999999999;
client.Send(message);
//Clean up attachments
foreach (var attachment in message.Attachments)
{
attachment.Dispose();
}
}
现在,总消息大小不超过10MB,但是交换产生的错误是20MB是每个会话的最大大小。 .net以某种方式批量发送邮件到SMTP?为什么会产生这个错误,即使每次发送电子邮件时,我都会创建一个新的SMtpClient对象?
确切的Exchange错误:会话大小超过固定的最大会话大小
即使您创建SMTPClient的新实例,似乎也会重用下划线连接。
任何人都知道一种解决方法,以下方法无效:
Smtp client = new SmtpClient("hostname");
client.ServicePoint.MaxIdleTime = 0;
client.ServicePoint.ConnectionLimit = 1;
提前致谢
答案 0 :(得分:1)
电子邮件的附件使用base64编码,这可能会使它们相当大,具体取决于文件的内容。来自the Wikipedia article on base64:
因此,实际的长度 符合MIME的base64编码二进制文件 数据通常约为137% 原始数据长度,但非常 短消息的开销可以是一个 因为开销很大,所以要高得多 标题。非常粗略,最终 base64编码的二进制数据的大小是 等于原始数据的1.37倍 大小+ 814字节(标题)。在 换句话说,你可以近似了 用这个解码数据的大小 公式:bytes = (string_length(encoded_string) - 814) / 1.37。请注意这些 公式不应该用于 计算确切的内存大小 保持编码数据,因为它们非常 粗糙并且两者都产生错误 方向
答案 1 :(得分:1)
v4 Beta 2下面的.net框架提供的任何SMTPClient都是错误的,并且永远不会向SMTP服务器发送QUIT命令。没有解决方法。解决方案是使用第三方应用程序发送电子邮件。 .net无法在SMTP服务器上批量发送电子邮件,将其会话大小限制为20MB。