ActionMailer? の使い方ってどうなんでしょうね - お だ のスペース のコメントで書いた
=?iso-2022-jp?B?PT91dGYtOD9RPz1lMz04MT05Mz1lMz04Mj04Yz1lMz04MT0=?=
=?iso-2022-jp?B?YWY9ZTM9ODE9YjI9ZTM9ODE9YTk9ZTM9ODE9ODQ/PQ==?=
を実際に検証するために、.NET の SmtpClient でメールを送信してみた。
using System; using System.Text; using System.Net.Mail; class Program { static void Main(string[] args) { var enc = Encoding.GetEncoding("iso-2022-jp"); var buf = new StringBuilder(); buf.AppendFormat("=?iso-2022-jp?B?{0}?=", Convert.ToBase64String(enc.GetBytes("=?utf-8?Q?=e3=81=93=e3=82=8c=e3=81="))); buf.AppendLine(); buf.AppendFormat("=?iso-2022-jp?B?{0}?=", Convert.ToBase64String(enc.GetBytes("af=e3=81=b2=e3=81=a9=e3=81=84?="))); var client = new SmtpClient("SMTPサーバー", 25); var msg = new MailMessage("Fromアドレス", "Toアドレス"); msg.Subject = buf.ToString(); client.Send(msg); } }
このコードだと、MailMessage.Subject に設定する際に例外が発生します。改行コード込の文字列は、Subject に設定出来ないようです。
これはどうすればよいのかというと、改行コードでは無くスペースを入れてあげる事によって実際のメールでは改行が入るようになっているみたいです。
※公式のソースは知りません。あくまでも体験談です。
なので、以下の様に書きかえると MailMessage.Subject に設定出来て、メールも飛ばせます。
using System; using System.Text; using System.Net.Mail; class Program { static void Main(string[] args) { var enc = Encoding.GetEncoding("iso-2022-jp"); var buf = new StringBuilder(); buf.AppendFormat("=?iso-2022-jp?B?{0}?=", Convert.ToBase64String(enc.GetBytes("=?utf-8?Q?=e3=81=93=e3=82=8c=e3=81="))); buf.Append(" "); buf.AppendFormat("=?iso-2022-jp?B?{0}?=", Convert.ToBase64String(enc.GetBytes("af=e3=81=b2=e3=81=a9=e3=81=84?="))); var client = new SmtpClient("SMTPサーバー", 25); var msg = new MailMessage("Fromアドレス", "Toアドレス"); msg.Subject = buf.ToString(); client.Send(msg); } }実際に受信したメールのヘッダはこちら(一部抜粋)
Subject: =?iso-2022-jp?B?PT91dGYtOD9RPz1lMz04MT05Mz1lMz04Mj04Yz1lMz04MT0=?= =?iso-2022-jp?B?YWY9ZTM9ODE9YjI9ZTM9ODE9YTk9ZTM9ODE9ODQ/PQ==?=
ちゃんと改行されてますね。