VBでメール送信 System.Net.Mail.SmtpClientで簡単実装。

Windowsサーバーを使ったメール配信を実装したのでその時のメモ。
System.Net.Mail.SmtpClient を使えば超かんたんに実装できます。

    Sub send_mail()

        Dim from_address As String = "xxxx@xxx.xx.xx"
        Dim to_address As String = "yyy@yyyy.yyy.yy"

        'SMTPサーバーなどを設定する
        Dim smtp_cliant As New System.Net.Mail.SmtpClient("localhost", 25)

        'メールがすぐに配送されない場合1にするという説もあるようですが、1000でいいと思います。
        smtp_cliant.ServicePoint.MaxIdleTime = 1000
        smtp_cliant.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network

        'ユーザー認証が必要な場合(認証不要な場合はいらない)
        smtp_cliant.Credentials = New System.Net.NetworkCredential("user_id", "password")

        Dim myEnc As System.Text.Encoding = System.Text.Encoding.GetEncoding("iso-2022-jp")

        'Messageを作成する
        Dim my_massage As New System.Net.Mail.MailMessage
        my_massage.Subject = myEncode("これは件名です。", myEnc)


        Dim body_str As String = "これは本文です。"
        Dim altView As Net.Mail.AlternateView = Net.Mail.AlternateView.CreateAlternateViewFromString(body_str, myEnc, System.Net.Mime.MediaTypeNames.Text.Plain)
        altView.TransferEncoding = System.Net.Mime.TransferEncoding.SevenBit
        my_massage.AlternateViews.Add(altView)

        'メッセージを送信する
        smtp_cliant.Send(my_massage)

        '解放
        my_massage.Dispose()
        '.NETFramwork4.0以上の場合(3.5まではDisposeメソッドはない)
        smtp_cliant.Dispose()


    End Sub

ウィルス対策ソフト等がインストールされていると、その影響でメールがすぐに配送されないといいたトラブルが発生するようで、その時にsmtp_cliant.ServicePoint.MaxIdleTime に1を設定するという記述がよくみられますが、CPUの占有率が上がってしまう等々の話もあり、1000を設定するといところに落ち着きました。特に問題なく動きます。
自分は、メールの配送が数分遅れる症状にずいぶんはまってしまい、
ServicePoint.MaxIdleTimeもいろいろやってみましたが、原因は全くちがうところにありました。Mailサーバーの問題で、無償版を使用していたため、配信に意図的に遅延が発生していただけでした。

メールの送受信のプログラムは、文字コード回りなど、いろんな書き方がありますが、以下のソースで文字化け等の問題もなく、いまのところうまくいっています。

つなげるマット・やさしいジョイントマット通販

カテゴリー: VB パーマリンク