一段VB.NET代码,生成邮件,发送邮件,支持SMTP验证用户名密码.

可以生成邮件,可以发送邮件,稍做修改就可以写成一个com组件,在ASP里调用.
以后我会整理成一个完整的.


'-------------------------------------------------
'生成基本邮件格式(包括附件),发送邮件到SMTP服务器,
'只能发送到发件人SMTP服务器(需验证),直接投递功能正在编写。
'
'声明:本段代码中,有一部份借签了网上一位大侠的C#代码.由于找不到原文,无法写出原作者名字
'
'代码编写:头太晕
'QQ:2538288
'MSN:[email protected]
'BLOG: http://spaces.msn.com/members/headfaint http://blog.csdn.net/super852
'-------------------------------------------------
Imports System
Imports System.Text
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Collections
Namespace eWebMail
Public Class Mail
'邮件类,生成基本的邮件格式。访问作者BLOG: http://spaces.msn.com/members/headfaint
Public Charset As String = "GB2312"
Public From As String
Public FromName As String
Public ReplyTo As String
Public Subject As String = ""
Public isHtml As Boolean = False
Public Body As String = ""
Public TextBody As String = "This is a HTML mail."
Public RecipientMaxNum As Integer = 15 '最大收件人数 访问作者BLOG: http://spaces.msn.com/members/headfaint
Public Recipient As New ArrayList
Public RecipientCC As New ArrayList
Public RecipientBCC As New ArrayList
Protected mPriority As String = "Normal"
Protected boundary As String = "=====000_eWebMail0099887766554433_====="
Protected boundary1 As String = "=====001_eWebMail0099887766554433_====="
Protected Attachments As New ArrayList
Protected AttachmentsSB As New StringBuilder
Protected RecipientName As String = ""
Private Shared fileHT As Hashtable
Shared Sub New()
'添加一些常见的文件格式 访问作者BLOG: http://spaces.msn.com/members/headfaint
fileHT = New Hashtable
fileHT.Add(".323", "text/h323")
fileHT.Add(".3g2", "video/3gpp2")
fileHT.Add(".3gp", "video/3gpp")
fileHT.Add(".act", "text/xml")
fileHT.Add(".actproj", "text/plain")
fileHT.Add(".ai", "application/postscript")
fileHT.Add(".aif", "audio/aiff")
fileHT.Add(".aifc", "audio/aiff")
fileHT.Add(".aiff", "audio/aiff")
fileHT.Add(".asa", "text/asa")
fileHT.Add(".asf", "video/x-ms-asf")
fileHT.Add(".asm", "text/plain")
fileHT.Add(".asp", "text/asp")
fileHT.Add(".asx", "video/x-ms-asf")
fileHT.Add(".au", "audio/basic")
fileHT.Add(".avi", "video/avi")
fileHT.Add(".bmp", "image/bmp")
fileHT.Add(".c", "text/plain")
fileHT.Add(".cat", "application/vnd.ms-pki.seccat")
fileHT.Add(".cc", "text/plain")
fileHT.Add(".cdf", "application/x-netcdf")
fileHT.Add(".cer", "application/x-x509-ca-cert")
fileHT.Add(".class", "java/")
fileHT.Add(".cod", "text/plain")
fileHT.Add(".cpp", "text/plain")
fileHT.Add(".crl", "application/pkix-crl")
fileHT.Add(".crt", "application/x-x509-ca-cert")
fileHT.Add(".cs", "text/plain")
fileHT.Add(".css", "text/css")
fileHT.Add(".cxx", "text/plain")
fileHT.Add(".dbs", "text/plain")
fileHT.Add(".def", "text/plain")
fileHT.Add(".der", "application/x-x509-ca-cert")
fileHT.Add(".dib", "image/bmp")
fileHT.Add(".dll", "application/x-msdownload")
fileHT.Add(".doc", "application/msword")
fileHT.Add(".dot", "application/msword")
fileHT.Add(".dps", "interface/vnd.divx-skin")
fileHT.Add(".dsp", "text/plain")
fileHT.Add(".dsw", "text/plain")
fileHT.Add(".dxu", "video/vnd.divx-playlist")
fileHT.Add(".edn", "application/vnd.adobe.edn")
fileHT.Add(".eml", "message/rfc822")
fileHT.Add(".eps", "application/postscript")
fileHT.Add(".etd", "application/x-ebx")
fileHT.Add(".etp", "text/plain")
fileHT.Add(".exe", "application/x-msdownload")
fileHT.Add(".ext", "text/plain")
fileHT.Add(".fdf", "application/vnd.fdf")
fileHT.Add(".fif", "application/fractals")
fileHT.Add(".fky", "text/plain")
fileHT.Add(".gif", "image/gif")
fileHT.Add(".h", "text/plain")
fileHT.Add(".hpp", "text/plain")
fileHT.Add(".hqx", "application/mac-binhex40")
fileHT.Add(".hta", "application/hta")
fileHT.Add(".htc", "text/x-component")
fileHT.Add(".htm", "text/html")
fileHT.Add(".html", "text/html")
fileHT.Add(".htt", "text/webviewhtml")
fileHT.Add(".htx", "text/html")
fileHT.Add(".hxx", "text/plain")
fileHT.Add(".i", "text/plain")
fileHT.Add(".ico", "image/x-icon")
fileHT.Add(".idl", "text/plain")
fileHT.Add(".iii", "application/x-iphone")
fileHT.Add(".inc", "text/plain")
fileHT.Add(".inl", "text/plain")
fileHT.Add(".ins", "application/x-internet-signup")
fileHT.Add(".isp", "application/x-internet-signup")
fileHT.Add(".java", "java/
")
fileHT.Add(".jfif", "image/jpeg")
fileHT.Add(".jpe", "image/jpeg")
fileHT.Add(".jpeg", "image/jpeg")
fileHT.Add(".jpg", "image/jpeg")
fileHT.Add(".js", "application/x-javascript")
fileHT.Add(".kci", "text/plain")
fileHT.Add(".latex", "application/x-latex")
fileHT.Add(".lgn", "text/plain")
fileHT.Add(".ls", "application/x-javascript")
fileHT.Add(".lst", "text/plain")
fileHT.Add(".m1v", "video/mpeg")
fileHT.Add(".m3u", "audio/x-mpegurl")
fileHT.Add(".mak", "text/plain")
fileHT.Add(".man", "application/x-troff-man")
fileHT.Add(".map", "text/plain")
fileHT.Add(".mdb", "application/msaccess")
fileHT.Add(".mfp", "application/x-shockwave-flash")
fileHT.Add(".mht", "message/rfc822")
fileHT.Add(".mhtml", "message/rfc822")
fileHT.Add(".mid", "audio/mid")
fileHT.Add(".midi", "audio/mid")
fileHT.Add(".mk", "text/plain")
fileHT.Add(".mocha", "application/x-javascript")
fileHT.Add(".movie", "video/x-sgi-movie")
fileHT.Add(".mp2", "video/mpeg")
fileHT.Add(".mp2v", "video/mpeg")
fileHT.Add(".mp3", "audio/mpeg")
fileHT.Add(".mpa", "video/mpeg")
fileHT.Add(".mpe", "video/mpeg")
fileHT.Add(".mpeg", "video/mpeg")
fileHT.Add(".mpg", "video/mpeg")
fileHT.Add(".mpv2", "video/mpeg")
fileHT.Add(".nmw", "application/nmwb")
fileHT.Add(".nws", "message/rfc822")
fileHT.Add(".odh", "text/plain")
fileHT.Add(".odl", "text/plain")
fileHT.Add(".p10", "application/pkcs10")
fileHT.Add(".p12", "application/x-pkcs12")
fileHT.Add(".p7b", "application/x-pkcs7-certificates")
fileHT.Add(".p7c", "application/pkcs7-mime")
fileHT.Add(".p7m", "application/pkcs7-mime")
fileHT.Add(".p7r", "application/x-pkcs7-certreqresp")
fileHT.Add(".p7s", "application/pkcs7-signature")
fileHT.Add(".pdf", "application/pdf")
fileHT.Add(".pdx", "application/vnd.adobe.pdx")
fileHT.Add(".pfx", "application/x-pkcs12")
fileHT.Add(".pko", "application/vnd.ms-pki.pko")
fileHT.Add(".pl", "application/x-perl")
fileHT.Add(".plg", "text/html")
fileHT.Add(".png", "image/png")
fileHT.Add(".prc", "text/plain")
fileHT.Add(".prf", "application/pics-rules")
fileHT.Add(".ps", "application/postscript")
fileHT.Add(".py", "text/plain")
fileHT.Add(".pys", "text/plain")
fileHT.Add(".pyw", "text/plain")
fileHT.Add(".ra", "audio/vnd.rn-realaudio")
fileHT.Add(".ram", "audio/x-pn-realaudio")
fileHT.Add(".rat", "application/rat-file")
fileHT.Add(".rc", "text/plain")
fileHT.Add(".rc2", "text/plain")
fileHT.Add(".rct", "text/plain")
fileHT.Add(".rgs", "text/plain")
fileHT.Add(".rjs", "application/vnd.rn-realsystem-rjs")
fileHT.Add(".rjt", "application/vnd.rn-realsystem-rjt")
fileHT.Add(".rm", "application/vnd.rn-realmedia")
fileHT.Add(".rmf", "application/vnd.adobe.rmf")
fileHT.Add(".rmi", "audio/mid")
fileHT.Add(".rmj", "application/vnd.rn-realsystem-rmj")
fileHT.Add(".rmm", "audio/x-pn-realaudio")
fileHT.Add(".rmp", "application/vnd.rn-rn_music_package")
fileHT.Add(".rms", "application/vnd.rn-realmedia-secure")
fileHT.Add(".rmvb", "application/vnd.rn-realmedia-vbr")
fileHT.Add(".rmx", "application/vnd.rn-realsystem-rmx")
fileHT.Add(".rnx", "application/vnd.rn-realplayer")
fileHT.Add(".rp", "image/vnd.rn-realpix")
fileHT.Add(".rpm", "audio/x-pn-realaudio-plugin")
fileHT.Add(".rsml", "application/vnd.rn-rsml")
fileHT.Add(".rt", "text/vnd.rn-realtext")
fileHT.Add(".rtf", "application/msword")
fileHT.Add(".rul", "text/plain")
fileHT.Add(".rv", "video/vnd.rn-realvideo")
fileHT.Add(".s", "text/plain")
fileHT.Add(".sct", "text/scriptlet")
fileHT.Add(".sit", "application/x-stuffit")
fileHT.Add(".sln", "application/octet-stream")
fileHT.Add(".smi", "application/smil")
fileHT.Add(".smil", "application/smil")
fileHT.Add(".snd", "audio/basic")
fileHT.Add(".sol", "text/plain")
fileHT.Add(".sor", "text/plain")
fileHT.Add(".spc", "application/x-pkcs7-certificates")
fileHT.Add(".spl", "application/futuresplash")
fileHT.Add(".sql", "text/plain")
fileHT.Add(".srf", "text/plain")
fileHT.Add(".sst", "application/vnd.ms-pki.certstore")
fileHT.Add(".stl", "application/vnd.ms-pki.stl")
fileHT.Add(".stm", "text/html")
fileHT.Add(".swf", "application/x-shockwave-flash")
fileHT.Add(".tab", "text/plain")
fileHT.Add(".tdl", "text/xml")
fileHT.Add(".tif", "image/tiff")
fileHT.Add(".tiff", "image/tiff")
fileHT.Add(".tlh", "text/plain")
fileHT.Add(".tli", "text/plain")
fileHT.Add(".torrent", "application/x-bittorrent")
fileHT.Add(".trg", "text/plain")
fileHT.Add(".txt", "text/plain")
fileHT.Add(".udf", "text/plain")
fileHT.Add(".udt", "text/plain")
fileHT.Add(".uls", "text/iuls")
fileHT.Add(".user", "text/plain")
fileHT.Add(".usr", "text/plain")
fileHT.Add(".vb", "text/plain")
fileHT.Add(".vcf", "text/x-vcard")
fileHT.Add(".vcproj", "text/plain")
fileHT.Add(".viw", "text/plain")
fileHT.Add(".vspscc", "text/plain")
fileHT.Add(".vsscc", "text/plain")
fileHT.Add(".vssscc", "text/plain")
fileHT.Add(".wav", "audio/x-wav")
fileHT.Add(".wax", "audio/x-ms-wax")
fileHT.Add(".wiz", "application/msword")
fileHT.Add(".wm", "video/x-ms-wm")
fileHT.Add(".wma", "audio/x-ms-wma")
fileHT.Add(".wmd", "application/x-ms-wmd")
fileHT.Add(".wmv", "video/x-ms-wmv")
fileHT.Add(".wmx", "video/x-ms-wmx")
fileHT.Add(".wmz", "application/x-ms-wmz")
fileHT.Add(".wpl", "application/vnd.ms-wpl")
fileHT.Add(".wsc", "text/scriptlet")
fileHT.Add(".wvx", "video/x-ms-wvx")
fileHT.Add(".xbm", "image/x-xbitmap")
fileHT.Add(".xdp", "application/vnd.adobe.xdp+xml")
fileHT.Add(".xfd", "application/vnd.adobe.xfd+xml")
fileHT.Add(".xfdf", "application/vnd.adobe.xfdf")
fileHT.Add(".xls", "application/vnd.ms-excel")
fileHT.Add(".xml", "text/xml")
fileHT.Add(".xsl", "text/xml")
fileHT.Add(".ymg", "application/ymsgr")
fileHT.Add(".yps", "application/ymsgr")
fileHT.Add(".z", "application/x-compress")
End Sub
Public Shared Function GetMime(ByVal strFileName As String) As String
'根据文件扩展名获取文件的格式 访问作者BLOG: http://spaces.msn.com/members/headfaint
If fileHT(strFileName) <> Nothing Then Return fileHT(strFileName) Else Return "/"
End Function
Public Property RcpName() As String
'收件人名称 访问作者BLOG: http://spaces.msn.com/members/headfaint
Get
If RecipientName <> "" Then Return RecipientName
If Recipient.Count > 0 Then Return Recipient(0)
Return ""
End Get
Set(ByVal Value As String)
RecipientName = Value
End Set
End Property
Public Function AddRecipient(ByVal str As String) As Boolean
'添加一个收件人地址 访问作者BLOG: http://spaces.msn.com/members/headfaint
Return addRs(str, Recipient)
End Function
Public Function AddRecipient(ByVal str() As String) As Boolean
'添加一组收件人地址 访问作者BLOG: http://spaces.msn.com/members/headfaint
Return addRs(str, Recipient)
End Function
Public Function AddRecipientCC(ByVal str() As String) As Boolean
'添加一组抄送地址 访问作者BLOG: http://spaces.msn.com/members/headfaint
Return addRs(str, RecipientCC)
End Function
Public Function AddRecipientBCC(ByVal str() As String) As Boolean
'添加一组暗送地址 访问作者BLOG: http://spaces.msn.com/members/headfaint
Return addRs(str, RecipientBCC)
End Function
Public Function AddRecipientCC(ByVal str As String) As Boolean
'添加一个抄送地址 访问作者BLOG: http://spaces.msn.com/members/headfaint
Return addRs(str, RecipientCC)
End Function
Public Function AddRecipientBCC(ByVal str As String) As Boolean
'添加一个暗送地址 访问作者BLOG: http://spaces.msn.com/members/headfaint
Return addRs(str, RecipientBCC)
End Function
Protected Function addRs(ByVal str As String, ByRef ra As ArrayList) As Boolean
'添加一个邮件地址到一个列表中 访问作者BLOG: http://spaces.msn.com/members/headfaint
str = str.Trim()
If str = "" Or str.IndexOf("@") = -1 Then
Return True
End If
If ra.Count < RecipientMaxNum Then
ra.Add(str)
Return True
Else
ra.Clear()
Return False
End If
End Function
Protected Function addRs(ByVal str() As String, ByRef ra As ArrayList) As Boolean
'添加一组邮件地址到一个列表中 访问作者BLOG: http://spaces.msn.com/members/headfaint
Dim i As Integer
For i = 0 To str.Length - 1
If Not addRs(str(i), ra) Then
Return False
End If
Next
End Function
Public Function AddAttachment(ByVal path As String, Optional ByVal strCID As String = "") As String
'添加一个文件到附件中,并设置一个ID,用来在HTML格式邮件正文中调用 访问作者BLOG: http://spaces.msn.com/members/headfaint
If File.Exists(path) Then
Dim fs As FileStream
Try
fs = New FileStream(path, FileMode.Open)

Catch ex As Exception
Return "error no file!"
End Try
Dim strreturn As String = AddAttachment(fs, path, strCID)
fs.Close()
Return strreturn
Else
Return "error no file!"
End If
End Function
Public Function AddAttachment(ByRef AttachmentStream As Stream, ByVal AttachmentName As String, ByVal strCID As String)
'添加一个数据流,保存到附件中,并设置一个ID。 访问作者BLOG: http://spaces.msn.com/members/headfaint
If AttachmentStream.Length > 0 Then
Attachments.Add(AttachmentName)
Dim sl As Long = AttachmentStream.Length
Dim barray(sl) As Byte
Dim dotidx As Integer = AttachmentName.LastIndexOf(".")
Dim strType As String
If dotidx <> -1 Then strType = GetMime(AttachmentName.Substring(dotidx)) Else strType = "/"
AttachmentStream.Read(barray, 0, sl)
AttachmentsSB.Append("--" & boundary & vbNewLine)
AttachmentsSB.Append("Content-Type: " & strType & "; name=""" & AttachmentNameStr(AttachmentName.Substring(AttachmentName.LastIndexOf("") + 1)) & """" & vbNewLine)
AttachmentsSB.Append("Content-Transfer-Encoding: base64" & vbNewLine)
If strCID = "" Then
strCID = getrndstr()
End If
AttachmentsSB.Append("Content-ID: <" & strCID & ">" & vbNewLine)
AttachmentsSB.Append("Content-Disposition: attachment; filename=""" & AttachmentNameStr(AttachmentName.Substring(AttachmentName.LastIndexOf("") + 1)) & """" & vbNewLine & vbNewLine)
AttachmentsSB.Append(Base64.strLine(Convert.ToBase64String(barray)) & vbNewLine & vbNewLine)
Return strCID
Else
Return "error no data!"
End If
End Function
Private Function getrndstr() As String
'当没有为附件设置ID时,自动随机生成一个ID 访问作者BLOG: http://spaces.msn.com/members/headfaint
Dim strTemp As String = ""
Do While strTemp.Length < 6
Randomize()
strTemp += Chr(Int(26 * Rnd() + 65))
Loop
Return strTemp
End Function
Protected Function AttachmentNameStr(ByVal fn As String) As String
'生成邮件标题 访问作者BLOG: http://spaces.msn.com/members/headfaint
If Encoding.Default.GetByteCount(fn) > fn.Length Then
Return "=?" & Charset.ToUpper() & "?B?" & Base64.Encode(fn) + "?="
Else
Return fn
End If
End Function
Public Property Priority() As String
'设置邮件的优先级 访问作者BLOG: http://spaces.msn.com/members/headfaint
Get
Return mPriority
End Get
Set(ByVal Value As String)
Select Case Value
Case "1", "high"
mPriority = "High"
Case "3", "normal"
mPriority = "Normal"
Case "5", "low"
mPriority = "Low"
End Select
End Set
End Property
Public Overrides Function ToString() As String
'重新编写ToString方法,用于输出整体的邮件格式文本。
'这是一个十分关键的函数 访问作者BLOG: http://spaces.msn.com/members/headfaint
Dim SendBufferstr As String
Dim strItem As String
If Charset = "" Then
SendBufferstr = "From:""" & FromName & """ <" & From & ">" & vbNewLine
Else
SendBufferstr = "From:""=?" & Charset.ToUpper() & "?B?" & Base64.Encode(FromName) & "?="" <" & From & ">" & vbNewLine
End If
If ReplyTo <> "" Then SendBufferstr += "Reply-To: " & ReplyTo & vbNewLine
If Recipient.Count > 0 Then
SendBufferstr += "TO:"
For Each strItem In Recipient
SendBufferstr += strItem & "<" & strItem & ">," & vbNewLine
Next
SendBufferstr = SendBufferstr.Substring(0, SendBufferstr.Length - 3) & vbNewLine
End If
If RecipientCC.Count > 0 Then
SendBufferstr += "CC:"
For Each strItem In RecipientCC
SendBufferstr += strItem & "<" & strItem & ">," & vbNewLine
Next
SendBufferstr = SendBufferstr.Substring(0, SendBufferstr.Length - 3) & vbNewLine
End If
If RecipientBCC.Count > 0 Then
SendBufferstr += "BCC:"
For Each strItem In RecipientBCC
SendBufferstr += strItem & "<" & strItem & ">," & vbNewLine
Next
SendBufferstr = SendBufferstr.Substring(0, SendBufferstr.Length - 3) & vbNewLine
End If
If Charset = "" Then
SendBufferstr += "Subject:" & Subject & vbNewLine
Else
SendBufferstr += "Subject:" & "=?" & Charset.ToUpper() & "?B?" & Base64.Encode(Subject) & "?=" & vbNewLine
End If
SendBufferstr += "X-Priority:" & Priority & vbNewLine
SendBufferstr += "X-MSMail-Priority:" & Priority & vbNewLine
SendBufferstr += "Importance:" & Priority & vbNewLine
SendBufferstr += "X-Mailer: eWebMail" & vbNewLine
SendBufferstr += "MIME-Version: 1.0" & vbNewLine
If Attachments.Count > 0 Then
SendBufferstr += "Content-Type: multipart/related;" & vbNewLine & " boundary=""" & boundary & """;" & vbNewLine & " type=""multipart/alternative""" & vbNewLine & vbNewLine
SendBufferstr += "This is a multi-part message in MIME format." & vbNewLine & vbNewLine
SendBufferstr += "--" & boundary & vbNewLine
End If
If isHtml Then
SendBufferstr += "Content-Type: multipart/alternative;" & vbNewLine & " boundary=""" & boundary1 & """" & vbNewLine & vbNewLine & vbNewLine
SendBufferstr += "This is a multi-part message in MIME format." & vbNewLine & vbNewLine
SendBufferstr += "--" & boundary1 & vbNewLine
SendBufferstr += "Content-Type: text/plain;" & vbNewLine
If Charset = "" Then
SendBufferstr += " charset=""iso-8859-1""" & vbNewLine
Else
SendBufferstr += " charset=""" & Charset.ToLower() & """" & vbNewLine
End If
SendBufferstr += "Content-Transfer-Encoding: base64" & vbNewLine & vbNewLine
SendBufferstr += Base64.strLine(Base64.Encode(TextBody)) & vbNewLine & vbNewLine & "--" & boundary1 & vbNewLine & "Content-Type: text/html;" & vbNewLine
Else
SendBufferstr += "Content-Type: text/plain;" & vbNewLine
End If
If Charset = "" Then
SendBufferstr += " charset=""iso-8859-1""" & vbNewLine
Else
SendBufferstr += " charset=""" & Charset.ToLower() & """" & vbNewLine
End If
SendBufferstr += "Content-Transfer-Encoding: base64" & vbNewLine & vbNewLine
SendBufferstr += Base64.strLine(Base64.Encode(Body)) & vbNewLine
If isHtml Then SendBufferstr += vbNewLine & "--" & boundary1 & "--" & vbNewLine
If Attachments.Count > 0 Then
SendBufferstr += vbNewLine & AttachmentsSB.ToString()
SendBufferstr += "--" & boundary & "--" & vbNewLine & vbNewLine
End If
Return SendBufferstr
End Function
End Class
Class Base64
'用BASE64编码 访问作者BLOG: http://spaces.msn.com/members/headfaint
Public Shared Function Encode(ByVal str As String) As String
'将字符串编码 访问作者BLOG: http://spaces.msn.com/members/headfaint
Return Convert.ToBase64String(Encoding.Default.GetBytes(str))
End Function
Public Shared Function Decode(ByVal str As String) As String
'将字符串解码 访问作者BLOG: http://spaces.msn.com/members/headfaint
Return Encoding.Default.GetString(Convert.FromBase64String(str))
End Function
Public Shared Function strLine(ByVal str As String) As String
'将长的字符串内容按邮件格式进行BASE64编码 访问作者BLOG: http://spaces.msn.com/members/headfaint
Dim B64sb As New StringBuilder
Dim sl As Integer = str.Length - 76
Dim i As Integer = 0
Do While i < sl
B64sb.Append(str.Substring(i, 76))
B64sb.Append(vbNewLine)
i += 76
Loop
B64sb.Append(str.Substring(i, str.Length - i))
Return B64sb.ToString()
End Function
End Class
Public Class SmtpMail
'用SMTP协议发送邮件 访问作者BLOG: http://spaces.msn.com/members/headfaint
Public SmtpServer As String = ""
Public SmtpPort As Integer = 25
Public chkSmtp As Boolean = False
Public smtpUserName As String = ""
Public smtpPassWord As String = ""
Protected Shared ErrCodeHT As New Hashtable
Protected Shared RghCodeHT As New Hashtable
Public Function send(ByVal strMailTo As String, ByVal MailFrom As String, ByVal strMail As String) As Boolean
'发送邮件 访问作者BLOG: http://spaces.msn.com/members/headfaint
Dim SendBuffer As New ArrayList
Dim SendBufferstr As String
For Each SendBufferstr In strMailTo.Split(",")
If Not SendBufferstr = "" Then SendBuffer.Add(SendBufferstr)
Next
If SendBuffer.Count = 0 Then Return False
Return send(SendBuffer, MailFrom, strMail)
End Function
Public Function send(ByVal strMailTo As ArrayList, ByVal MailFrom As String, ByVal strMail As String) As Boolean
'发送邮件 访问作者BLOG: http://spaces.msn.com/members/headfaint
If strMailTo.Count = 0 Then Return False
Dim tc As TcpClient
Try
tc = New TcpClient(SmtpServer, SmtpPort)
Catch ex As Exception
Return False
End Try
Dim ns As NetworkStream = tc.GetStream()
Try '与服务器建立链接 访问作者BLOG: <a href="http://spaces.msn.com/members/h

Published At
Categories with Web编程
Tagged with
comments powered by Disqus