これからもずっと .NET

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

目次

Blog 利用状況

記事カテゴリ

書庫

日記カテゴリ

2007年3月12日 #

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では非推奨になっております。
くわしくはヘルプを。

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

posted @ 21:04 | Feedback (2)

Expression Web の基本的な操作概要についてのサイトをご紹介

Microsoft Expression Web製品レビュー(前編)
Webデザイン・ツール「Expression Web」を試してみた
http://www.atmarkit.co.jp/fdotnet/special/expressionweb01/expressionweb01_01.html


Expression Webは、VisualStudioでWebフォームを作った経験があれば、比較的容易に操作できそうですね。
Webページ制作に関しては、VisualStudioより操作性が向上されたところも多いようです。
C#やVBのコードの記述は、やはりVisualStudioを使う必要がありますが。

個人的には、まだExpression Webを使用したことはないのですが(DreamWeaverに慣れてしまってるので・・・)、初めてExpression Webを使う時には、このページがとても参考になりそうです。

posted @ 9:53 | Feedback (0)