由于.net中有发送邮件类SmtpClient和邮件内容类MailMessage,因此发送邮件基本上比较简单。但是需要注意的是,
如果是给手机发送邮件的话,需要一些额外的邮件头和编码的设置。本文以日本的手机为例子说明,国内的手机发送邮件
功能我没有尝试过。
不是所有的手机都支持UNICODE,基本上Web页以shift-jis为主,邮件以iso-2022-jp为主。因此对于手机邮件,为了
保证没有乱码,编码格式只能选择 iso-2022-jp。
另外,对于邮件标题,按照iso-2022-jp编码后,必须进行Base64的编码。当然了,正文也要进行iso-2022-jp编码。
完整的VB.net例子如下(邮件不带附件):
Imports System.Net.Mail
Public Const MAIL_EncodeName As String = "iso-2022-jp"Public Const MAIL_LanguageName As String = "ja-JP"
Public Sub SendMail(ByVal strTo As String, ByVal strSubject As String, ByVal strBody As String) Try '编码定义 Dim targetEncode As System.Text.Encoding = System.Text.Encoding.GetEncoding(MAIL_EncodeName)
'MailMessage作成 Dim msg As New MailMessage()
msg.Headers.Add("Accept-Language", MAIL_LanguageName) msg.Headers.Add("Content-Language", MAIL_LanguageName) msg.Headers.Add("acceptlanguage", MAIL_LanguageName) msg.Headers.Add("Content-Type", String.Format("text/plain; charset=""{0}""", MAIL_EncodeName)) msg.Headers.Add("Content-Transfer-Encoding", "quoted-printable")
'收信人地址
msg.To.Add(New MailAddress(strTo))
'邮件标题
msg.Subject = String.Format("=?{0}?B?{1}?=", _ MAIL_EncodeName, _ Convert.ToBase64String(targetEncode.GetBytes(strSubject)))
'邮件正文
Dim byteBody As Byte() = targetEncode.GetBytes(strBody) msg.BodyEncoding = targetEncode msg.Body = targetEncode.GetString(byteBody)
Dim mail As New SmtpClient() '邮件发送 mail.Send(msg)
'结束 msg.Dispose()
Catch ex As Exception '错误处理 End TryEnd Sub
为了方便管理,邮件服务器地址和送信人信息记录在Config文件中,app.config例子如下:
<system.net> <mailSettings> <smtp from="info@abc.jp"> <network host="mail.abc.jp" port="25" userName="info@abc.jp" password="xxxxx"/> </smtp> </mailSettings> </system.net>
这样发送的邮件,普通的电脑能正确解析,手机也能正确解析。