C# 为什么实际电子邮件的大小高于我的附件和文本大小?

C# 为什么实际电子邮件的大小高于我的附件和文本大小?,c#,smtp,gmail,size,email-attachments,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")

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

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);
                }
            }
我的附件大小为24MB+某些文本=最大25MB

我通过gmail收件箱中的“显示原始邮件”选项测量了邮件的实际大小,然后将此邮件下载到硬盘上

另外,当我测量我的应用程序发送电子邮件时发送的比特数时,它显示了33MB


所以,我的问题是,当我的附件+文本=最大25MB:D时,为什么这封电子邮件的实际大小是33MB?

电子邮件附件使用base64编码从二进制格式(8位)编码为ASCII字符(7位)。因此,您不会在一个字节中使用所有8位,只使用7位,电子邮件大小会变大。

因为您的电子邮件是-二进制数据会从8位数据更改为(通常)7位数据,以便在服务器之间可靠传输。有几种不同的编码方案,但它们通常会给电子邮件的大小增加33%的开销,因此25Mb的电子邮件实际上是32.5Mb的数据

编辑:对Base64编码有很好的解释,通常在发送电子邮件时使用:

每个输入字节的输出字节数约为4/3(33%的开销),对于大量字节,会收敛到该值。更具体地说,给定n个字节的输入,输出将为4[n/3]字节长,包括填充字符