当ブログ始まって以来の、.NETネタでございます m(_ _)m
.NETでは、次のようなコードで、メールを送信することができます。
//*******************************************************
// メールオブジェクトの作成
//*******************************************************
MailMessage mail = new MailMessage();
mail.From = "送信元メールアドレス";
mail.To = "あて先メールアドレス";
mail.Subject = "メール件名";
mail.Body = "メール本文";
//*******************************************************
// メール送信実行
//*******************************************************
SmtpMail.SmtpServer = "メール送信サーバー名またはIPアドレス";
SmtpMail.Send(mail);
このコードでメール送信を実行できるのですが、セキュリティにうるさくなった現在においては、次の2つの問題にぶつかることがあります。
★問題1
SMTPサーバがPOPbeforeSMTPに対応していると、このコードではメールを送れない
★問題2
サーバが25番ポートを受け付けず、別のポート番号(587のことが多いかな)で受け付けている場合、メールを送れない
これらに該当する場合、次のようなコードを付け足せば、無事にメールを送ることができます。
//*******************************************************
// メールオブジェクトの作成
//*******************************************************
MailMessage mail = new MailMessage();
mail.From = "送信元メールアドレス";
mail.To = "あて先メールアドレス";
mail.Subject = "メール件名";
mail.Body = "メール本文";
//*******************************************************
// SMTPの前にPOP(問題1の回避策)
//*******************************************************
string popUserName = "POPユーザ名";
string popPassword = "POPパスワード";
string popServerName = "POPサーバ名";
int popPort = 110; // 110でない場合は要変更
TcpClient tcp = new TcpClient();
tcp.Connect(popServerName, popPort);
using (StreamWriter sw = new StreamWriter(tcp.GetStream())) {
sw.Write("USER " + popUserName + "\nPASS " + popPassword + "\nQUIT\n");
}
tcp.Close();
//*******************************************************
// 別のポート番号を指定(問題2の回避策)
//*******************************************************
int anotherPort = 587; // 25じゃない別のポート番号を指定
mail.Fields["http://schemas.microsoft.com/cdo/configuration/smtpserverport"] = anotherPort;
//*******************************************************
// メール送信実行
//*******************************************************
SmtpMail.SmtpServer = "メール送信サーバー名またはIPアドレス";
SmtpMail.Send(mail);
これまで、この問題をどうすれば解決できるんだろう?
と1年以上も悩んでいたのですが、ちゃんと解決する方法がありました(笑)
同じことで悩んでる方がいらっしゃいましたら、ご参考にどうぞ。
p.s.
MailMessageクラスとSmtpMailクラスは、.NET 2.0では非推奨になっております。
くわしくはヘルプを。
なぜこちらのクラスを使わないのかというと、いまだに文字化け問題から抜け出せないでいるからです(笑)
近日中には、なんとかしたい・・・!