我有简单的代码来发送带有附件的电子邮件:
using (MailMessage mail = new MailMessage())
{
using (SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com"))
{
mail.From = new MailAddress("my_mail@gmail.com");
mail.Sender = new MailAddress("my_mail@gmail.com");
mail.To.Add("my_mail@gmail.com");
mail.Subject = "TEST";
mail.Body = "Test body message";
//Add attachment
System.Net.Mail.Attachment attachment;
attachment = new System.Net.Mail.Attachment("1568817207ComputationC.part1.rar"); //Size 24MB
mail.Attachments.Add(attachment);
SmtpServer.Port = 587;
SmtpServer.Credentials = new System.Net.NetworkCredential("my_mail@gmail.com", "password");
SmtpServer.EnableSsl = true;
SmtpServer.Timeout = 0;
SmtpServer.Send(mail);
}
}
我的attachament大小为24MB +一些文本=最大25MB
我通过gmail收件箱中的“显示原始”选项测量了邮件的实际大小,然后我将此邮件下载到我的硬盘中。
此外,当我测量我的应用程序发送电子邮件时发送了多少次,它显示我33MB。
所以,我的问题是为什么当我的attachament + text =最大25MB时,这封电子邮件的实际大小是33MB?D?
答案 0 :(得分:2)
因为您的电子邮件是MIME encoded - 二进制数据从8位数据更改为(通常)7位数据,以便在服务器之间可靠地传输。有一些不同的编码方案,但它们通常会增加33%的电子邮件开销 - 所以25Mb的电子邮件实际上是32.5Mb的数据。
编辑:This page对Base64编码有很好的解释,通常在发送电子邮件时使用:
每个输入字节的输出字节数约为4/3(33%开销),并收敛到大量字节的值。更具体地说,给定n个字节的输入,输出将是4 [n / 3]字节长,包括填充字符。
答案 1 :(得分:0)
使用base64编码将电子邮件附件从二进制格式(8位)编码为仅ASCII字符(7位)。因此,您不会在一个字节中使用全部8位,只需7位,电子邮件大小也会变大。