システム開発ブログ

VBA

.NET

システム開発

VBAからメール送信

みなさん、こんにちは。

プログラムからメール送信を行う方法について、いくつか上げてみたいと思います。

・BASP21
古くからずっと使ってきたのは、フリーのBASP21を利用する方法です。
通常はこの方法でほとんど問題がありません。
但し、フリー版だと64ビット版は提供されないため、有償のPro版を利用すると良いでしょう。

今回は、32ビット64ビットに関係なく使えて、さらに587ポートでの送信が必要でした。

Basp21では、SendMailの第一パラメタのサーバー名を「サーバー名:587」と指定するだけで送信が可能なようです。
ですが、今回は有償版も使えず、別の方法を模索しました。


・CDO
CDOを使った場合、VBAでは以下のようなコードになりますが、ポート25はうまく行っても587では送信できませんでした。
    Dim oCdo As Object
    Set oCdo = Server.CreateObject("CDO.Message")
    oCdo.From = "Fromメールアドレス"
    oCdo.To = "Toアドレス"
    oCdo.Subject = "件名"
    oCdo.TextBody = "本文"
    oCdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    oCdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "メールサーバー"
    oCdo.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = ポート番号
    oCdo.Configuration.Fields.Update
    oCdo.Send


・System.Net.Mail.SmtpClient
結局、.NETでメール送信部品を作成し、VBAからパラメタを渡して実行する方法にしました。
    Dim oMail As New System.Net.Mail.MailMessage("Fromメールアドレス", "Toアドレス", "件名", "本文")
    Dim oSmtp As New System.Net.Mail.SmtpClient()
    oSmtp.Host = "メールサーバー"
    oSmtp.Port = ポート番号
    oSmtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
    oSmtp.Credentials = New System.Net.NetworkCredential("Fromメールアドレス", "パスワード")
    oSmtp.Send(oMail)
    oMail.Dispose()
    oSmtp.Dispose()


昨今はほんとに様々な方法が用意されていますから、安全な送信方法を模索していきたいものです。

この記事に関連する記事の一覧


システム開発ブログ

Twitterでilovex_officialをフォローしてください

カテゴリー

以前の部署別ブログ

ページのトップ