Windows には、Collaborative Data Objects (CDO) と呼ばれるオブジェクトが含まれています。このオブジェクトを使用すると、他の前提条件 (ファイアウォールが開いている、ISP がポートをブロックしていない、SMTP サーバーでアカウントが構成されている、SMTP サーバーがリレーを許可しているなど) が満たされていると仮定して、任意の SMTP サーバーを使用して電子メールを送信できます。
私が見つけたほとんどの例では、推奨される遅延バインディングを使用しています。XP でのテストでは、事前バインディングを使用する場合の正しいライブラリ参照は、"Microsoft CDO for Windows 2000 Library" であることがわかりました。
電子メールを送信するときはいつでも、ある種の電子メール サーバーを介して (または外部から) 送信する必要があることを知っておくことが重要です。これは、その電子メール サーバーで認証する必要があることを意味し、通常は、まさにその電子メール サーバーに存在する「From」電子メール アドレスを使用して電子メールを送信する必要があることも意味します。
遅延バインディングを使用したコードを次に示します。
Const cdoSendUsingPickup = 1
Const cdoSendUsingPort = 2
Const cdoAnonymous = 0
' Use basic (clear-text) authentication.
Const cdoBasic = 1
' Use NTLM authentication
Const cdoNTLM = 2 'NTLM
Public Sub SendEmail()
Dim imsg As Object
Dim iconf As Object
Dim flds As Object
Dim schema As String
Set imsg = CreateObject("CDO.Message")
Set iconf = CreateObject("CDO.Configuration")
Set flds = iconf.Fields
' send one copy with SMTP server (with autentication)
schema = "http://schemas.microsoft.com/cdo/configuration/"
flds.Item(schema & "sendusing") = cdoSendUsingPort
flds.Item(schema & "smtpserver") = "mail.myserver.com"
flds.Item(schema & "smtpserverport") = 25
flds.Item(schema & "smtpauthenticate") = cdoBasic
flds.Item(schema & "sendusername") = "email@email.com"
flds.Item(schema & "sendpassword") = "password"
flds.Item(schema & "smtpusessl") = False
flds.Update
With imsg
.To = "email@email.com"
.From = "email@email.com"
.Subject = "Test Send"
.HTMLBody = "Test"
'.Sender = "Sender"
'.Organization = "My Company"
'.ReplyTo = "address@mycompany.com"
Set .Configuration = iconf
.Send
End With
Set iconf = Nothing
Set imsg = Nothing
Set flds = Nothing
End Sub