2011-11-11 18 views
1

メール処理プログラムを作成しました。これは基本的に受信メールのテンプレートを叩いて転送します。受信メールはPOPを使用してダウンロードしたGmailアカウントに行き、メール(HTMLと平文のマルチパート-MIMEの両方)を読んで、テンプレートに必要な変更を行い、適切なプレーン+ htmlで新しいメールを作成しますテキストを送信して別のアドレスに送信します。メールに奇妙な文字があります

メールが相手側に届くと、ÃÂのような奇妙な文字が魔法のように入り込んでメールの一部が壊れてしまいます。彼らは元のメールにはなく、テンプレートにはありません。これらの文字がいつ登場するかについては、予測可能なパターンを見つけることができません。私はそれがメールのエンコーディングプロパティと関係があると確信していますが、私は、送信メールの文字セットと転送エンコーディングの両方を受信メールと同じに設定するようにしています。それでは私は何をする必要がありますか?

EDIT:ここでは受信メールの切り取らサンプルです:

Content-Type: text/plain; charset=ISO-8859-1 
Content-Transfer-Encoding: quoted-printable 

=0D=0A=0D=0ASafari Special:=0D=0A=0D=0A=C2=A0=0D=0A=0D=0A= 
Safari in Thornybush Private Game Reserve 9-12=0D=0AJanuary= 
2012 (3nights) 

脇お知らせ=0D=C2文字の挿入(:処理後

Content-Type: text/plain; charset=iso-8859-1 
Content-Transfer-Encoding: quoted-printable 

=0A=0ASafari Special:=0A=0A=A0=0A=0ASafari in Thornybush Priv= 
ate Game Reserve 9-12=0AJanuary 2012 (3nights) 

が、これはとして出てきますいくつかから元のものではなかった=0Aの)。

ここで何が起こっていると思いますか?

ANOTHER CLUE:ここで別のビューを作成私のコードです:提案@mjwills何の線に沿って

var htmlView = AlternateView.CreateAlternateViewFromString(htmlBody, null, "text/html"); 
htmlView.ContentType.CharSet = charSet; 
htmlView.TransferEncoding = transferEncoding; 
m.AlternateViews.Add(htmlView); 

は、おそらくCreateAlternativeViewFromString()方法は、既にUTF-8を想定して、後でISOにそれを変更します-8859-1は違いはありませんか?

+2

これはエンコードの問題のようです。送信したメッセージの例とその結果として生じる文字化けしたメッセージを投稿してください。プロセスの各段階でメールのバイナリ形式を調べる必要があります。 – Mankarse

+0

@Mankarse - 私の編集を参照 –

答えて

2

したがって、すべて= 0Aは= 0D = 0Aになります。 そして、すべてのA0は= C2 = A0になっています。

前者はCarriage Return/Line Feedsと関連しているようです。 What is "=C2=A0" in MIME encoded, quoted-printable text?に関連している可能性があります。

私の推測では、文字セットを指定しても、行だけでUTF8として扱われます。

ContentType.CharSetが適切に設定されているCreateAlternateViewFromStringのthis formを試してみてください。

+0

私の編集を参照してください - "もう一つの手がかり" –

+0

CreateAlternateViewFromStringのもう一つの署名はそれをさらに悪化させます。テキストをマングリングするのではなく、マルチパートのMIME構造全体が壊れてしまい、電子メール全体が添付ファイルとして表示されるようになりました。 –

+0

あなたが試した代替コードを教えてください。 – mjwills

関連する問題