C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: SmtpClientでのメール送信について


(過去ログ 112 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■66581 / inTopicNo.1)  SmtpClientでのメール送信について
  
□投稿者/ せんぺい (1回)-(2013/05/09(Thu) 16:14:15)

分類:[C#] 

初めて投稿・質問します。

社内システムの一機能として、アプリからメールを送信(SmtpClientクラス使用)しています。
これまではXP、Vista、7に対応、今回8に対応することになったのですが、そのまま8で実行すると、送信されたメールの件名が文字化けしてしまいました。

ビルド環境:Windows 7、Framework 4.0
問題なく運用できている環境:Windows XP Vista 7、Framework 4.0
送信メールの件名が文字化けした環境:Windows 8、Framework 4.5(8にプリインストール済)

具体的なコードは以下のようになります。

//JISコード
Encoding enc = Encoding.GetEncoding(50220);
//MailMessageの作成
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
//送信者
msg.From = new System.Net.Mail.MailAddress(FromAdd, EncodeMailHeader(FromNm, enc));
//宛先1
msg.To.Add(new System.Net.Mail.MailAddress(ToAdd1, EncodeMailHeader(ToNm1 + "様", enc)));
//宛先2
msg.To.Add(new System.Net.Mail.MailAddress(ToAdd2, EncodeMailHeader(ToNm2 + "様", enc)));
//CC
msg.CC.Add(new System.Net.Mail.MailAddress(FromAdd, EncodeMailHeader(FromNm, enc)));
//件名
msg.Subject = EncodeMailHeader(Subject, enc);
//本文
msg.Body = Body;
//SmtpClientの作成
System.Net.Mail.SmtpClient sc = new System.Net.Mail.SmtpClient();
//SMTPサーバー
sc.Host = SmtpServer;
//SMTPポート番号
sc.Port = SmtpPort;
//メッセージ送信
sc.Send(msg);
//後始末
msg.Dispose();

private static string EncodeMailHeader(string str, Encoding enc)
{
    string ret = System.Convert.ToBase64String(enc.GetBytes(str));
    ret = string.Format("=?{0}?B?{1}?=", enc.BodyName, ret);
    return ret;
}

下記サイトを参考にして文字化け対応を行ったのですが、やはり件名だけが文字化けします。
http://blogs.gine.jp/taka/archives/1423

原因と対処法おわかりの方がいらっしゃったら教えていただけないでしょうか。

宜しくお願いいたします。

引用返信 編集キー/
■66582 / inTopicNo.2)  Re[1]: SmtpClientでのメール送信について
□投稿者/ ニーベル (1回)-(2013/05/09(Thu) 16:39:25)
Subjectが文字化けするメールを受信した際、そのメールのヘッダ情報のContent-Typeはどうなっていますか?
以下のようになっていなければ、エンコードが適切に設定されていないかもしれません。

Content-Type: text/plain; charset=iso-2022-jp

あと、これは本来はBodyに関するものなのですが、

http://blogs.gine.jp/taka/archives/1423

のコードに記載のAlternateViewの設定はしていますか?

引用返信 編集キー/
■66583 / inTopicNo.3)  Re[2]: SmtpClientでのメール送信について
□投稿者/ せんぺい (2回)-(2013/05/09(Thu) 18:09:13)
ニーベルさん ありがとうございます。

> Subjectが文字化けするメールを受信した際、そのメールのヘッダ情報のContent-Typeはどうなっていますか?
> 以下のようになっていなければ、エンコードが適切に設定されていないかもしれません。
>
> Content-Type: text/plain; charset=iso-2022-jp

はい、こうなっています。

> あと、これは本来はBodyに関するものなのですが、
>
> http://blogs.gine.jp/taka/archives/1423
>
> のコードに記載のAlternateViewの設定はしていますか?

Bodyには設定していますが、SubjectにもAlternateViewの設定をするということでしょうか?
調べてみましたが、どういうコードになるのかわかりませんでした。

引用返信 編集キー/
■66590 / inTopicNo.4)  Re[3]: SmtpClientでのメール送信について
□投稿者/ もりお (6回)-(2013/05/10(Fri) 04:42:21)
No66583 (せんぺい さん) に返信

.NET Framework 4.5のMailMessageはヘッダーがデコードされる親切設計になったので、
Bエンコードを使用するときは二重にエンコードした文字列をプロパティにセットする面倒実装を
しなければいけないという話を聞いたことがあります。

.NET Framework 4.5 の System.Net.Mail で日本語の件名を ISO-2022-JP の Base64 でエンコードして送信する方法 - Exchange ブログ JAPAN - Site Home - TechNet Blogs
http://blogs.technet.com/b/exchangeteamjp/archive/2012/10/05/3524293.aspx
引用返信 編集キー/
■66596 / inTopicNo.5)  Re[4]: SmtpClientでのメール送信について
□投稿者/ せんぺい (3回)-(2013/05/10(Fri) 11:45:23)
もりおさん ありがとうございます。

> .NET Framework 4.5のMailMessageはヘッダーがデコードされる親切設計になったので、
> Bエンコードを使用するときは二重にエンコードした文字列をプロパティにセットする面倒実装を
> しなければいけないという話を聞いたことがあります。
>
> .NET Framework 4.5 の System.Net.Mail で日本語の件名を ISO-2022-JP の Base64 でエンコードして送信する方法 - Exchange ブログ JAPAN - Site Home - TechNet Blogs
> http://blogs.technet.com/b/exchangeteamjp/archive/2012/10/05/3524293.aspx

まさにこれですね。
要はFramework 4.5 で一部実装が変更されたことと、受信側のメーラーが対応するエンコード方式が違うということが原因だと理解しました。
二重エンコードの動作確認は明日になりそうですが、必ず結果を報告します。

引用返信 編集キー/
■66665 / inTopicNo.6)  Re[4]: SmtpClientでのメール送信について
□投稿者/ せんぺい (4回)-(2013/05/14(Tue) 09:29:35)
遅くなりましたが、Framework 4.5で二重エンコードしたところ、文字化け解消しました。
あとは、Frameworkのバージョンを取得し分岐するだけで解決かと思ったのですが、System.Environment.Versionが4.0を返してくるので、バージョン取得を他の方法で検討しているところです。

とは言え、このスレの質問に関しては解決しましたので、解決済みとしておきます。

みなさん、ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -