2

添付ファイル付きの電子メールを送信する簡単なコードがあります。

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 であるのに、なぜこの電子メールの実際のサイズが 33MB なのかということです:D?

4

2 に答える 2

2

メールはMIME でエンコードされているため、サーバー間で確実に送信されるように、バイナリ データは 8 ビット データから (通常は) 7 ビット データに変更されます。いくつかの異なるエンコーディング スキームがありますが、通常、メールのサイズに 33% のオーバーヘッドが追加されます。したがって、25Mb のメールは実際には 32.5Mb のデータになります。

編集:このページには、メールを送信するときに通常使用される Base64 エンコーディングの適切な説明があります。

入力バイトあたりの出力バイト数は約 4/3 (オーバーヘッドの 33%) であり、バイト数が多い場合はその値に収束します。より具体的には、入力が n バイトの場合、出力はパディング文字を含めて 4[n/3] バイトの長さになります。

于 2013-04-20T12:57:01.390 に答える