C#
System.Net.Mail.SmtpClient.EnableSsl
EnableSslをtrueにするとメールヘッダがエラーになりSMTPサーバと通信するところまで行かない。おかしいなと思い、あれこれ試してみたところ、どうやら順番がまずかったようだ。
using (System.Net.Mail.MailMessage MailMessage = new System.Net.Mail.MailMessage())
{
MailMessage.From = new System.Net.Mail.MailAddress("sender-mail-address");
MailMessage.To.Add("receiver-mail-address");
MailMessage.Subject = "TEST MAIL";
MailMessage.Body = "This is a test mail.";
System.Net.Mail.SmtpClient SmtpClient = new System.Net.Mail.SmtpClient();
SmtpClient.Host = "smtp-server";
SmtpClient.Port = 587;
SmtpClient.Credentials = new System.Net.NetworkCredential("user-name", "password");
SmtpClient.EnableSsl = true;
SmtpClient.Send(MailMessage); // <--- Error
}
CredentialsはEnableSslのあとにしないとだめらしい。
using (System.Net.Mail.MailMessage MailMessage = new System.Net.Mail.MailMessage())
{
MailMessage.From = new System.Net.Mail.MailAddress("sender-mail-address");
MailMessage.To.Add("receiver-mail-address");
MailMessage.Subject = "TEST MAIL";
MailMessage.Body = "This is a test mail.";
System.Net.Mail.SmtpClient SmtpClient = new System.Net.Mail.SmtpClient();
SmtpClient.Host = "smtp-server";
SmtpClient.Port = 587;
SmtpClient.EnableSsl = true;
SmtpClient.Credentials = new System.Net.NetworkCredential("user-name", "password");
SmtpClient.Send(MailMessage); // <-- OK
}
SMTPサーバの設定がWeb.configに保存してあるなら、奇妙なコードを書くこともできる。
using (System.Net.Mail.MailMessage MailMessage = new System.Net.Mail.MailMessage())
{
MailMessage.To.Add("receiver-mail-address");
MailMessage.Subject = "TEST MAIL";
MailMessage.Body = "This is a test mail.";
System.Net.Mail.SmtpClient SmtpClient = new System.Net.Mail.SmtpClient();
SmtpClient.EnableSsl = true;
SmtpClient.Credentials = SmtpClient.Credentials; // <--- ???
SmtpClient.Send(MailMessage); // <-- OK
}
残念なことにWeb.configのSMTPサーバの設定にはEnableSslを保存できない。できるようにしてくれると嬉しいのだけど。
※2016/03/05現在、このエラーが発生しなくなったことを確認しました。「SmtpClient.EnableSsl = true;」のあとに、「SmtpClient.Credentials = SmtpClient.Credentials;」のような奇妙なコードを書く必要はなくなっています。
(2016/03/05 更新)