.netのMail送信はサブジェクトが文字化けする!



.netでサイトを構築していてどうしても必要になるのが、
WEB上からのフォーム送信です。

フォーム自体は

With objMail
ここにメール内容
End With

Dim Smtp As New Net.Mail.SmtpClient()
Smtp.Send(objMail)

web.config内には以下の指定を忘れずに
<system.net>
<mailSettings>
<smtp from="送信者のメールアドレス(例えばサーバーのメアド)">
<network host="SMTPサーバー名"
password="" userName="" />
</smtp>
</mailSettings>
</system.net>

たったこれだけでいとも簡単に送信できてしまいますが、
問題はサブジェクトが文字化けすることです。

この問題を解決するには以下の方法を使います。
'.SubjectEncoding = Encoding.GetEncoding("ISO-2022-JP")
’通常はこのように指定するが、サブジェクトはエンコードを指定しないほうがいい
.BodyEncoding = Encoding.GetEncoding("ISO-2022-JP")
’ボディは通常通りエンコードを指定
.To.Add(ToMail)
’ToMailの変数に送り先が設定されている
.Subject = LocalBEncode(Sbjtext, Encoding.GetEncoding("ISO-2022-JP"))
’ここで改めてローカルエンコードを指定
.Body = BodyTxt
’ボディはBodyTxtに格納されている

Function LocalBEncode(ByVal Substring As String, ByVal Encoding As Encoding)
Return "=?iso-2022-jp?B?" + Convert.ToBase64String
(Encoding.GetBytes(Substring)) + "?="
End Function
このファンクションでBエンコードします。
※AgileTech corp.さんでBEncodeの方法が公開されていますので利用させていただきました。

以上の要領で送信すればサブジェクトは正常に表示されるようになります。

記事id:59 / 6645PV

関連記事