・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 Nothing) Then
For Each addr As String In argTo
mail.To.Add(addr)
Next
End If
'メールアドレス(Cc)
If Not (argCc Is Nothing) Then
For Each addr As String In argCc
mail.CC.Add(addr)
Next
End If
'メールアドレス(Bcc)
If Not (argBcc Is Nothing) Then
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 Nothing) Then
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