DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

SMTPでメールを送信する

注意:以下のサンプルコードの送信者と送信先は必ず変更するようにしてください。

.NET Framework 2.0以降で、SmtpClientクラスを使用する方法

.NET Framework 2.0以降では、System.Net.Mail名前空間のSmtpClientクラスをして、簡単にSMTPメールを送信することができます。

以下に、最も簡単であろう例を示します。

VB.NET
コードを隠すコードを選択
'送信者
Dim senderMail As String = "sender@xxx.xxx"
'宛先
Dim recipientMail As String = "recipient@xxx.xxx"
'件名
Dim subject As String = "こんにちは"
'本文
Dim body As String = "こんにちは。" + vbCrLf + vbCrLf + "それではまた。"

Dim sc As New System.Net.Mail.SmtpClient()
'SMTPサーバーを指定する
sc.Host = "localhost"
'メールを送信する
sc.Send(senderMail, recipientMail, subject, body)
C#
コードを隠すコードを選択
//送信者
string senderMail = "sender@xxx.xxx";
//宛先
string recipientMail = "recipient@xxx.xxx";
//件名
string subject = "こんにちは";
//本文
string body = "こんにちは。\r\n\r\nそれではまた。";

System.Net.Mail.SmtpClient sc = new System.Net.Mail.SmtpClient();
//SMTPサーバーを指定する
sc.Host = "localhost";
//メールを送信する
sc.Send(senderMail, recipientMail, subject, body);

上記のような方法で送信されたメールは、件名、本文ともに、文字コードUTF-8のBase64でエンコードされて送信されます(ただしアルファベットのみの場合は、件名はそのままで、本文はUS-ASCIIのQuoted-Printable)。具体的には、上記のコードでは、以下のように送信されます。

UTF-8以外の文字コードでメールを送る方法も用意されていますが、この方法も色々と問題があります。詳しくは、「SmtpClientクラスを使ってメールを送信する」で説明します。

SmtpMailクラスを使用する方法

.NET Framework 1.1以前では、System.Web.Mail名前空間のSmtpMailクラスを使うと、非常に簡単にSMTPメールを送信することができます。SmtpMailクラを使うには、「参照設定」に「System.Web.dll」を追加する必要があります。

SmtpMailクラスはCDOSYS(Collaboration Data Objects for Windows 2000)メッセージコンポーネントを使用するため、Windows 2000以上でしか使用できません。

以下に、最も簡単であろう例を示します。

VB.NET
コードを隠すコードを選択
'SMTPサーバーを指定する
System.Web.Mail.SmtpMail.SmtpServer = "(SMTPサーバーを指定する)"
'送信者が"sender@xxx.xx.com"、送信先が"recipient1@xxx.xx.com"、
'題名が"TEST"、メッセージが"This is a test mail."
System.Web.Mail.SmtpMail.Send( _
    "sender@xxx.xx.com", _
    "recipient1@xxx.xx.com", _
    "TEST", _
    "This is a test mail.")
C#
コードを隠すコードを選択
//SMTPサーバーを指定する
System.Web.Mail.SmtpMail.SmtpServer = "(SMTPサーバーを指定する)";
//送信者が"sender@xxx.xx.com"、送信先が"recipient1@xxx.xx.com"、
//題名が"TEST"、メッセージが"This is a test mail."
System.Web.Mail.SmtpMail.Send(
    "sender@xxx.xx.com", 
    "recipient1@xxx.xx.com", 
    "TEST", 
    "This is a test mail.");

上の例では日本語は文字化けしてしまいます。日本語のメールを送るためには、次のようにJISコードに変換して送信する必要があります。文字コードを指定している箇所について詳しくは、「文字コードを指定してテキストファイルを読み込む」をご覧ください。

VB.NET
コードを隠すコードを選択
Dim mm As New System.Web.Mail.MailMessage()
'送信者
mm.From = "sender@xxx.xx.com"
'送信先
mm.To = "recipient1@xxx.xx.com"
'題名
mm.Subject = "テスト"
'本文
mm.Body = "こんにちは。これはテストです。"
'JISコードに変換する
mm.BodyEncoding = System.Text.Encoding.GetEncoding(50220)
'SMTPサーバーを指定する
System.Web.Mail.SmtpMail.SmtpServer = "(SMTPサーバーを指定する)"
'送信する
System.Web.Mail.SmtpMail.Send(mm)
C#
コードを隠すコードを選択
System.Web.Mail.MailMessage mm = new System.Web.Mail.MailMessage();
//送信者
mm.From = "sender@xxx.xx.com";
//送信先
mm.To = "recipient1@xxx.xx.com";
//題名
mm.Subject = "テスト";
//本文
mm.Body = "こんにちは。これはテストです。";
//JISコードに変換する
mm.BodyEncoding = System.Text.Encoding.GetEncoding(50220);
//SMTPサーバーを指定する
System.Web.Mail.SmtpMail.SmtpServer = "(SMTPサーバーを指定する)";
//送信する
System.Web.Mail.SmtpMail.Send(mm);
  • 履歴:
  • 2007/1/21 「.NET Framework 2.0以降で、SmtpClientクラスを使用する方法」を追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • 「???を参照に追加します」の意味が分からないという方は、こちらをご覧ください。