1

添付ファイルが utf8 エンコーディングとして保存されている添付ファイル付きの電子メールを送信できる例はありますか。試してみましたが、メモ帳で開くと、エンコードがASCIIであると表示されます。注:最初にファイルを保存したくないことに注意してください。

// Init the smtp client and set the network credentials
            SmtpClient smtpClient = new SmtpClient();
            smtpClient.Host = getParameters("MailBoxHost");

            // Create MailMessage
            MailMessage message = new MailMessage("team@ccccc.co.nz",toAddress,subject, body);

            using (MemoryStream memoryStream = new MemoryStream())
            {
                byte[] contentAsBytes = Encoding.UTF8.GetBytes(attachment);
                memoryStream.Write(contentAsBytes, 0, contentAsBytes.Length);

                // Set the position to the beginning of the stream.
                memoryStream.Seek(0, SeekOrigin.Begin);

                // Create attachment
                ContentType contentType = new ContentType();
                contentType.Name = attachementname;
                contentType.CharSet = "UTF-8";

                System.Text.Encoding inputEnc = System.Text.Encoding.UTF8;

               Attachment attFile = new Attachment(memoryStream, contentType);

                // Add the attachment
                message.Attachments.Add(attFile);

                // Send Mail via SmtpClient
                smtpClient.Send(message);


            }
4

2 に答える 2

1

ストリームの先頭にUTF-8のBOM(バイト順マーク)を追加します。

0xEF,0xBB,0xBF

コード:

byte[] bom = { 0xEF, 0xBB, 0xBF };
memoryStream.Write(bom, 0, bom.Length);

byte[] contentAsBytes = Encoding.UTF8.GetBytes(attachment);
memoryStream.Write(contentAsBytes, 0, contentAsBytes.Length);
于 2012-07-02T23:29:24.537 に答える
1

添付ファイルがテキストであると仮定すると、ContentTypeクラスのデフォルト コンストラクターは添付ファイルのContent-Typeヘッダーをに設定しますが、代わりにapplication/octet-streamに設定する必要があります。text/plain

ContentType contentType = new ContentType(MediaTypeNames.Text.Plain); 

または:

ContentType contentType = new ContentType(); 
contentType.MediaType = MediaTypeNames.Text.Plain;

また、TransferEncoding添付ファイルには a を指定する必要があります。UTF-8 は 7 ビット クリーンではないためです (多くの電子メール システムではまだ必要です)。

attFile.TransferEncoding = TransferEncoding.QuotedPrintable;  

または:

attFile.TransferEncoding = TransferEncoding.Base64;  
于 2012-07-02T23:33:07.483 に答える