为什么真正的电子邮件大小高于我的附件和文本大小?

时间:2013-04-20 12:47:28

标签: c# smtp gmail size email-attachments

我有简单的代码来发送带有附件的电子邮件:

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?

2 个答案:

答案 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位,电子邮件大小也会变大。