PopBefore認証
PopBefore認証が設定されている場合はSystem.Net.Sockets.TcpClientを使用して、メール送信前にPop認証を行います
'PopBefore認証が設定されている場合、Pop認証を行います。
'認証に失敗した場合はSystem.Net.Sockets.SocketExceptionが発生します。
Using tcp As New System.Net.Sockets.TcpClient
Dim sPopServer As String = "POPサーバー"
Dim iPopPortNo As Integer = 110 'POPポート番号
Dim sPopUserName As String = "POPユーザーID"
Dim sPopPassword As String = "POPパスワード"
tcp.Connect(sPopServer, iPopPortNo)
Try
Using sw As New System.IO.StreamWriter(tcp.GetStream)
sw.Write("USER " + sPopUserName + "\nPASS " + sPopPassword + "\nQUIT\n")
End Using
Finally
tcp.Close()
End Try
End Using
メールの文字化け対策
以下のページが丁寧に説明されており、大変参考になりました。
株式会社アジルテック:開発者の談話室:System.Net.MailでTo,Fromフィールドをiso-2022-jp Bエンコード
参考ページによるとメールの文字化けは以下の対策が必要だそうです。
・差出人(To)やタイトル(Subject)のエンコードは自前で行う。
・本文(Body)はAlternateViewを利用し、7bitエンコーディングにする。AlternateViewを利用するためにはNet Framework 2.0 SP1以降であること。
サンプルコード
'エンコード
Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("iso-2022-jp")
Using mailMsg As New System.Net.Mail.MailMessage
'あて先
mailMsg.To.Add("あて先アドレス")
'差出人
mailMsg.From = New System.Net.Mail.MailAddress("差出人アドレス")
'※displayNameを指定する場合は、displayNameは自前でエンコードする。
'Dim sDisplayName As String = String.Format("=?{0}?B?{1}?=", enc.HeaderName, Convert.ToBase64String(enc.GetBytes("表示名"), Base64FormattingOptions.None))
'mailMsg.From = New System.Net.Mail.MailAddress("差出人アドレス", sDisplayName)
'CC
mailMsg.CC.Add("CCアドレス")
'タイトル
'※iso-2022-jpに指定しても、Qエンコードされてしまうため未設定にする。
'mailMsg.SubjectEncoding = enc
'mailMsg.Subject = "メールタイトル"
'※タイトルは自前でエンコードする。
mailMsg.Subject = String.Format("=?{0}?B?{1}?=", enc.HeaderName, Convert.ToBase64String(enc.GetBytes("メールタイトル"), Base64FormattingOptions.None))
'本文
'※iso-2022-jpに指定しても、8bitエンコーディングされてしまうため未設定にする。
'mailMsg.BodyEncoding = enc
'mailMsg.Body = "メール本文"
'※本文を7bitエンコーディングにするには、mailMsg.HeadersにAddしても追加されないため、AlternateViewを利用する。
'※AlternateViewを利用するためにはNet Framework 2.0 SP1以降であること。
'--追加されない
'mailMsg.Headers.Add("Content-Transfer-Encoding", "7bit")
'--AlternateViewを利用する
Dim altmsg As New System.Net.Mail.AlternateView(New System.IO.MemoryStream(enc.GetBytes("メール本文")), New System.Net.Mime.ContentType("text/plain; charset=" + enc.BodyName))
altmsg.TransferEncoding = Net.Mime.TransferEncoding.SevenBit
mailMsg.AlternateViews.Add(altmsg)
mailMsg.IsBodyHtml = False
'添付ファイル
Dim sbAttachmentBuf As New System.Text.StringBuilder
sbAttachmentBuf.AppendLine("添付ファイル本文")
Dim bytes() As Byte = System.Text.Encoding.GetEncoding("Shift_Jis").GetBytes(sbAttachmentBuf.ToString)
mailMsg.Attachments.Add(New System.Net.Mail.Attachment(New System.IO.MemoryStream(bytes), "添付ファイル.txt"))
'PopBefore認証が設定されている場合、Pop認証を行います。
'認証に失敗した場合はSystem.Net.Sockets.SocketExceptionが発生します。
Using tcp As New System.Net.Sockets.TcpClient
Dim sPopServer As String = "POPサーバー"
Dim iPopPortNo As Integer = 110 'POPポート番号
Dim sPopUserName As String = "POPユーザーID"
Dim sPopPassword As String = "POPパスワード"
tcp.Connect(sPopServer, iPopPortNo)
Try
Using sw As New System.IO.StreamWriter(tcp.GetStream)
sw.Write("USER " + sPopUserName + "\nPASS " + sPopPassword + "\nQUIT\n")
End Using
Finally
tcp.Close()
End Try
End Using
'SMTPクライアントを作成します。
Dim sSmtpServer As String = "SMTPサーバー"
Dim iSmtpPortNo As Integer = 25 'SMTPポート番号
Dim smtp As New System.Net.Mail.SmtpClient(sSmtpServer, iSmtpPortNo)
smtp.DeliveryMethod = Net.Mail.SmtpDeliveryMethod.Network
'SMTP認証が設定されている場合は資格情報を設定します。
Dim sSmtpUserName As String = "SMTPユーザーID"
Dim sSmtpPassword As String = "SMTPパスワード"
smtp.Credentials = New System.Net.NetworkCredential(sSmtpUserName, sSmtpPassword)
'Mailを送信します。
smtp.Send(mailMsg)
End Using
0 件のコメント:
コメントを投稿