我正在使用System.Net.Mail库在C#中发送电子邮件。我想以某种方式检查没有发送消息的情况,因为它太大了。这是我编写的示例代码,用于说明问题:
internal class Program
{
private static void Main()
{
var client = new SmtpClient();
try
{
var mail = new MailMessage();
mail.From = new MailAddress("sender@mail.com");
mail.To.Add(new MailAddress("recipient@mail.com"));
mail.Subject = "Mail Subject";
mail.Body = "Mail Body";
mail.Attachments.Add(CreateAttachment());
var smtpClient = new SmtpClient("SomeHost", 25)
{
EnableSsl = false,
Credentials = new NetworkCredential("username", "password"),
};
smtpClient.Send(mail);
}
catch (SmtpException e)
{
// somehow verify that this exception happened because exceeding message size
Console.WriteLine("Message was not sent because it was to big"); ;
}
}
// This method generates an attachment that exceed maximum size allowed by the server
private static Attachment CreateAttachment()
{
var str = "Some message\n";
var superBigMessage = new System.Text.StringBuilder();
for (int i = 0; i < 10000000; i++)
{
superBigMessage.Append(str);
}
return Attachment.CreateAttachmentFromString(superBigMessage.ToString(), "Attachment.txt");
}
}
我想提一下,SmtpException
上有一个名为StatusCode
的属性,但如果邮件太大StatusCode = TransactionFailed
并且它没有提供必要的见解异常消息显示Transaction failed. The server response was: Rejected - Message size exceeds fixed maximum message size. Size: 147442 KB, Max size: 20480 KB
答案 0 :(得分:2)
您的MTA如何处理“太大”以及它如何报告它取决于该MTA。不同的MTA可能会有完全不同的消息。 SMTP
中没有任何内容标准化“太大”。
因此,您需要解析消息,并准备好在MTA更改(包括软件升级和配置更改)时进行更新。