SSブログ

[.NET]メールの送信(.NET2.0以降) [Programming .NET Tips]

[ポイント]
メールを送信するサンプルプログラムです。(最も簡単な例)
クラスライブラリ
 .NETFramework2.0から新たに追加されたクラスを使用しています。
 (1.1以前では『System.Web.Mail』名前空間のクラスが使用されていましたが、
  2.0以降は『System.Net.Mail』名前空間のクラスが推奨されています。)
クラス名/列挙体名概要
System.Net.Mail.SmtpClientクラスSMTPサーバを表すクラスです。
System.Net.Mail.MailMessageクラスメールを表すクラスです。
System.Net.Mail.MailAddressクラスメールアドレスを表すクラスです。
System.Net.Mail.Attachmentクラス添付ファイルを表すクラスです。
System.Net.NetworkCredential認証情報を表すクラスです。
System.Net.Mail.MailPriority列挙体メールの優先度を表す列挙体です。

CDO(Microsoft Collaboration Data Objects)
 Windowsでは、メールの送信機能として『CDO』を用意しています。
 CDOは、VB6やEXCEL VBA等からも利用することができますが、
 インタフェースがわかりにくいものでした。
 .NETでは、CDOの呼び出しをカプセル化することで、
 よりわかりやすいインタフェースを提供しています。
・参考文献
 『MSDN Library for VisualStudio2008日本語版』
 
以下にサンプルソースを示します
''' <summary>
''' メールを送信する
''' </summary>
''' <param name="argSmtpServer">SMTPサーバ名</param>
''' <param name="argPortNo">ポート番号</param>
''' <param name="argSmtpAuth">SMTP認証の有無</param>
''' <param name="argUserName">認証ユーザ</param>
''' <param name="argPassword">認証パスワード</param>
''' <param name="argEnableSsl">SSLの使用有無</param>
''' <param name="argTimeout">タイムアウト(ミリ秒)(Nothingで100000)</param>
''' <param name="argFrom">メールアドレス(From)</param>
''' <param name="argTo">メールアドレス(To)</param>
''' <param name="argCc">メールアドレス(Cc)</param>
''' <param name="argBcc">メールアドレス(Bcc)</param>
''' <param name="argPriority">優先度</param>
''' <param name="argSubject">件名</param>
''' <param name="argBody">本文</param>
''' <param name="argIsHtml">HTMLかどうか</param>
''' <param name="argFile">添付ファイル</param>
''' <param name="argSubEnc">エンコード(件名)</param>
''' <param name="argBodyEnc">エンコード(本文)</param>
''' <remarks></remarks>
Private Sub SendMail( _
    ByVal argSmtpServer As String, _
    ByVal argPortNo As Integer, _
    ByVal argSmtpAuth As Boolean, _
    ByVal argUserName As String, _
    ByVal argPassword As String, _
    ByVal argEnableSsl As Boolean, _
    ByVal argTimeout As Integer?, _
    ByVal argFrom As String, _
    ByVal argTo() As String, _
    ByVal argCc() As String, _
    ByVal argBcc() As String, _
    ByVal argPriority As System.Net.Mail.MailPriority, _
    ByVal argSubject As String, _
    ByVal argBody As String, _
    ByVal argIsHtml As Boolean, _
    ByVal argFile() As System.IO.FileInfo, _
    ByVal argSubEnc As String, _
    ByVal argBodyEnc As String _
    )
    'SMTPサーバを設定
    '※サーバ名、ポート番号を設定
    Dim sClient As New System.Net.Mail.SmtpClient( _
        argSmtpServer, argPortNo _
    )

    'SMTP認証の設定
    If argSmtpAuth Then
        '認証が必要な場合は、ユーザ名とパスワードを設定
        sClient.Credentials = New System.Net.NetworkCredential( _
            argUserName, argPassword _
        )
    End If

    'SSLの使用有無を設定
    sClient.EnableSsl = argEnableSsl

    'タイムアウトを設定
    If argTimeout.HasValue Then
        sClient.Timeout = argTimeout
    End If

    'メールの設定
    Dim mail As New System.Net.Mail.MailMessage
    Try
        'メールアドレス(From)
        mail.From = New System.Net.Mail.MailAddress(argFrom)
        '※メールアドレス(To)を設定
        If Not (argTo Is NothingThen
            For Each addr As String In argTo
                mail.To.Add(addr)
            Next
        End If
        'メールアドレス(Cc)
        If Not (argCc Is NothingThen
            For Each addr As String In argCc
                mail.CC.Add(addr)
            Next
        End If
        'メールアドレス(Bcc)
        If Not (argBcc Is NothingThen
            For Each addr As String In argBcc
                mail.Bcc.Add(addr)
            Next
        End If

        '優先度
        '   高い:System.Net.Mail.MailPriority.High
        '   普通:System.Net.Mail.MailPriority.Normal
        '   低い:System.Net.Mail.MailPriority.Low
        mail.Priority = argPriority
        '件名を設定
        mail.Subject = argSubject
        '本文を設定
        mail.Body = argBody
        '本文をHTML形式にするかどうか
        mail.IsBodyHtml = argIsHtml
        '添付ファイル
        If Not (argFile Is NothingThen
            For Each f As FileInfo In argFile
                mail.Attachments.Add( _
                    New System.Net.Mail.Attachment(f.FullName))
            Next
        End If
        'エンコード(件名)
        '例:shift_jis、iso-2022-jp
        mail.SubjectEncoding = Encoding.GetEncoding(argSubEnc)
        'エンコード(本文)
        mail.BodyEncoding = Encoding.GetEncoding(argBodyEnc)

        'メールを送信
        sClient.Send(mail)
    Finally
        mail.Dispose()
    End Try
End Sub
[VB.NET]メールを送信するサンプル

/// <summary>
/// メールを送信する
/// </summary>
/// <param name="argSmtpServer">SMTPサーバ名</param>
/// <param name="argPortNo">ポート番号</param>
/// <param name="argSmtpAuth">SMTP認証の有無</param>
/// <param name="argUserName">認証ユーザ</param>
/// <param name="argPassword">認証パスワード</param>
/// <param name="argEnableSsl">SSLの使用有無</param>
/// <param name="argTimeout">タイムアウト(ミリ秒)(nullで100000)</param>
/// <param name="argFrom">メールアドレス(From)</param>
/// <param name="argTo">メールアドレス(To)</param>
/// <param name="argCc">メールアドレス(Cc)</param>
/// <param name="argBcc">メールアドレス(Bcc)</param>
/// <param name="argPriority">優先度</param>
/// <param name="argSubject">件名</param>
/// <param name="argBody">本文</param>
/// <param name="argIsHtml">HTMLかどうか</param>
/// <param name="argFile">添付ファイル</param>
/// <param name="argSubEnc">エンコード(件名)</param>
/// <param name="argBodyEnc">エンコード(本文)</param>
/// <remarks></remarks>
private void SendMail(
    string argSmtpServer, int argPortNo, bool argSmtpAuth, 
    string argUserName, string argPassword, bool argEnableSsl, 
    int? argTimeout, string argFrom, 
    string[] argTo, string[] argCc, string[] argBcc, 
    System.Net.Mail.MailPriority argPriority, 
    string argSubject, string argBody, bool argIsHtml, 
    System.IO.FileInfo[] argFile, 
    string argSubEnc, string argBodyEnc)
{
    //SMTPサーバを設定
    //※サーバ名、ポート番号を設定
    System.Net.Mail.SmtpClient sClient = 
        new System.Net.Mail.SmtpClient(argSmtpServer, argPortNo);
    
    //SMTP認証の設定
    if (argSmtpAuth) {
        //認証が必要な場合は、ユーザ名とパスワードを設定
        sClient.Credentials = 
            new System.Net.NetworkCredential(
                argUserName, argPassword);
    }
    
    //SSLの使用有無を設定
    sClient.EnableSsl = argEnableSsl;
    
    //タイムアウトを設定
    if (argTimeout.HasValue) {
        sClient.Timeout = argTimeout;
    }
    
    //メールの設定
    System.Net.Mail.MailMessage mail = 
        new System.Net.Mail.MailMessage();
    try {
        //メールアドレス(From)
        mail.From = new System.Net.Mail.MailAddress(argFrom);
        //※メールアドレス(To)を設定
        if (argTo != null) {
            foreach (string addr in argTo) {
                mail.To.Add(addr);
            }
        }
        //メールアドレス(Cc)
        if (argCc != null) {
            foreach (string addr in argCc) {
                mail.CC.Add(addr);
            }
        }
        //メールアドレス(Bcc)
        if (argBcc != null) {
            foreach (string addr in argBcc) {
                mail.Bcc.Add(addr);
            }
        }
        
        //優先度
        // 高い:System.Net.Mail.MailPriority.High
        // 普通:System.Net.Mail.MailPriority.Normal
        // 低い:System.Net.Mail.MailPriority.Low
        mail.Priority = argPriority;
        //件名を設定
        mail.Subject = argSubject;
        //本文を設定
        mail.Body = argBody;
        //本文をHTML形式にするかどうか
        mail.IsBodyHtml = argIsHtml;
        //添付ファイル
        if (argFile != null) {
            foreach (FileInfo f in argFile) {
                mail.Attachments.Add(
                    new System.Net.Mail.Attachment(f.FullName));
            }
        }
        //エンコード(件名)
        //例:shift_jis、iso-2022-jp
        mail.SubjectEncoding = Encoding.GetEncoding(argSubEnc);
        //エンコード(本文)
        mail.BodyEncoding = Encoding.GetEncoding(argBodyEnc);
        
        //メールを送信
        sClient.Send(mail);
    }
    finally {
        mail.Dispose();
    }
}
[C#]メールを送信するサンプル
補足
本サンプルは、送信元メールアドレスをYahooメールで確認しています。(2008.12.29現在)
Yahooメールで確認するには、
『Yahooメールを他のメーラーで送受信できるようにする』必要があります。
Yahooメールの『POPアクセスとメール転送』で、『ブラウザアクセスとPOPアクセス』に設定して下さい。
あとは、
ユーザ名:YahooID
パスワード:YahooIDのパスワード
SMTPサーバ:『smtp.mail.yahoo.co.jp』
SMTPのポート番号:『587』
でメールを送信できます。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。