これからもずっと .NET

~ .NETを中心に、いろんな技術&その他ネタをご提供 ~  執筆:キヨ

目次

Blog 利用状況

記事カテゴリ

書庫

日記カテゴリ

POPbeforeSMTPを採用&25番ポートをふさいでるメールサーバからメールを送る

当ブログ始まって以来の、.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では非推奨になっております。
くわしくはヘルプを。

なぜこちらのクラスを使わないのかというと、いまだに文字化け問題から抜け出せないでいるからです(笑)
近日中には、なんとかしたい・・・!

投稿日時 : 2007年3月12日 21:04

コメントを追加

No comments posted yet.
タイトル  
名前  
URL
コメント