扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
如:我见过的用友软件U8生产制造(演示版),其中的邮件功能就是通过调用outLook的ActiveX 组件
优点:开发简单
缺点:依赖outlook组件,SMTP 邮件服务
邮件发送的代码如下:
以下是引用片段:
Private Sub Send() Dim outObj As New Outlook.Application() Dim Item As Outlook.MailItemClass Item = outObj.CreateItem(0) Item.To = "lihonggen0@163.com " Item.Subject = "hello" Item.Body = "hell" Item.Attachments.Add("C:\abc.txt") Item.Send() End Sub |
System.Web.Mail 命名空间包含使您可以使用 CDOSYS(Windows 2000 的协作数据对象)消息组件来构造和发送消息的类。邮件消息是通过内置在 Microsoft Windows 2000 中的 SMTP 邮件服务或任意的 SMTP 服务器来传送的。此命名空间中的类可以在 ASP.Net 或任何托管应用程序
MailAttachment提供用于构造电子邮件附件的属性和方法。
MailMessage提供用于构造电子邮件的属性和方法。
SmtpMail提供用于使用 Windows 2000 的协作数据对象 (CDOSYS) 消息组件来发送消息的属性和方法。
邮件可以通过 Microsoft Windows 2000 中内置的 SMTP 邮件服务或任意 SMTP 服务器来传送。System.Web.Mail 命名空间中的类型可以在 ASP.Net 或任何托管应用程序使用。
Smtp服务器的设置,现在一些免费邮件提供商是不再提供针对所有邮件提供Smtp服务,在发送邮件的时候,需要验证用户信息,考虑Smtp用户验证问题 如果Smtp服务器在本地计算机,发送速度很快的,基本上不用担心,如果不是本地服务器,那么发送的时候最好不要以此太多,一是速度问题,二是以此发送太多邮件,Smtp服务器可能认为是垃圾邮件而拒绝服务
代码如下:
以下是引用片段:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim mailObj As New MailMessage() Dim smtp As SmtpMail '定义SMTP服务器的名称 smtp.SmtpServer = "smtp.XXX.com" '定义邮件的发送地址 mailObj.From = "lihonggen@XXX.com" '定义邮件的接收地址 mailObj.To = " AAA@XXX.com" '定义邮件的暗送地址 mailObj.Bcc= "aa@sina.com" '定义邮件的抄送地址 mailObj.Cc = "aaa@sina.com" '定义邮件的主题 mailObj.Subject = "主题" '定义邮件的主体 mailObj.Body = "邮件主体!" '邮件以 HTML的格式发送 mailObj.BodyFormat = MailFormat.Html '定义邮件的有限级,在此设定为高 mailObj.Priority = MailPriority.High '给发送的邮件附加上一个附件 mailObj.Attachments.Add(New MailAttachment("c:\aa.doc")) smTp.Send(mailObj) End Sub 3、在VB.Net或C#开发Windows 应用程序中使用System.Net.Sockets 也是基于SMTP协议 |
1、 客户端通过服务器的25端口建立TCP/IP连接
服务器端: 220 server.com Simple Mail Transfer Service Ready
2、 客户端使用“HELO”命令标识发件人
客户端:HELO server.com
服务器端:250 server.com
3、 客户端发送MAIL命令,服务器端以OK作为响应表明准备接收
客户端: MAIL FROM: 〈A@B.com〉
服务器端: 250 OK
4、 客户端发送RCPT命令标识收件人,服务器端回应是否愿意为收件人接受邮件 服务器端:250 OK
5、 协商结束后用命令DATA发送发送邮件
客户端:DATA
服务器端:354 Start mail input: end with 〈CRLF〉.〈CRLF〉
6、 客户端以.表示结束输入内容一起发送出去
客户端:Subject: 〈CRLF〉
内容〈CRLF〉
.〈CRLF〉
7、客户端用QUIT命令退出。
客户端:QUIT
服务器端:250 server.com closing transmission channel
优点:可以在此基础上开发出自己的组件,利用Sockets我们可以进行网络编程开发
缺点:程序量相对较多,
发送邮件的代码如下:
以下是引用片段:
Dim sendData As String Dim szData As Byte() Dim CRLF As String CRLF = "\r\n" '创建与服务器25端口的连接 Dim SmtpServ As New TcpClient(txtsmtp.Text, 25) lstlog.Items.Clear() '显示服务器初始信息 Dim.NetStrm As.NetworkStream .NetStrm = SmtpServ.GetStream() Dim RdStrm As New StreamReader(SmtpServ.GetStream()) If RdStrm.ReadLine() 〈〉 "" Then lstlog.Items.Add(RdStrm.ReadLine()) ' sendData = "HELO server " + CRLF szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray()) .NetStrm.Write(szData, 0, szData.Length) lstlog.Items.Add(RdStrm.ReadLine()) '标志发件人 sendData = "MAIL FROM: " + "〈" + txtfrom.Text + "〉" + CRLF szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray()) .NetStrm.Write(szData, 0, szData.Length) lstlog.Items.Add(RdStrm.ReadLine()) '标志收件人 sendData = "RCPT TO: " + "〈" + txtTo.Text + "〉" + CRLF szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray()) .NetStrm.Write(szData, 0, szData.Length) lstlog.Items.Add(RdStrm.ReadLine()) '准备发送内容 sendData = "DATA " + CRLF szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray()) .NetStrm.Write(szData, 0, szData.Length) lstlog.Items.Add(RdStrm.ReadLine()) '发送主题 sendData = "SUBJECT: " + txtsub.Text + CRLF '发送内容 sendData = sendData + txtmsg.Text + CRLF '结束发送 sendData = sendData + "." + CRLF szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray()) .NetStrm.Write(szData, 0, szData.Length) lstlog.Items.Add(RdStrm.ReadLine()) '退出 sendData = "QUIT " + CRLF szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray()) .NetStrm.Write(szData, 0, szData.Length) lstlog.Items.Add(RdStrm.ReadLine()) '关闭连接 .NetStrm.Close() RdStrm.Close() lstlog.Items.Add("连接关闭") lstlog.Items.Add("发送成功") |
4、IIS SMTP自带的基本的发信组件CDONTS
你不必专门下载,微软已经提供了这个组件,只要安装了2000,NT的SMTP就会有的。
优点:组件由操作系统自带
缺点:功能比较差,可扩展性不强
Mymail = CreateObject("CDONTS.NewMail") Mymail.From = *** '信件发送者信箱 Mymail.To = *** ‘信件接收者信箱 Mymail.CC = *** '抄送 Mymail.BCC = *** ’密件发送 Mymail.Subject = *** ‘信件主题 Mymail.Body = *** ’信件正文 '设置优先级,0-不重要,1-一般,2-重要。 Mymail.Importance = 2 Mymail.Send() Mymail = Nothing |
Jmail具有以下特点:
(1)可以发送附件;
(2)详细日志能力,便于你查看问题所在;
(3)设置邮件发送的优先级;
(4)支持多种格式的邮件发送,比如说以HTML或者TXT的方式发送邮件。这是个免费的组件。
(5)密件发送/(CC)抄送/紧急信件发送能力;
(6)最关键的就是--免费的组件,不必发钱,所以非常值得使用。
网站:http://www.dimac.Net/,目前版本是4.3
JMail组件的常用属性:
Body 邮件正文 Logging 调用Log记录,供Debug用 Priority 邮件的优先程度,从1到5 Sender 发件人 ServerAddress SMTP服务器的IP地址或名称 Subject 邮件标题 JMail组件的常用方法: AddAttachment 指定附件文件 AddRecipient 加入一个收件人 AddRecipientBCC 隐藏的副本抄送,只有发件人和BCC收件人知道。 AddRecipientCC 副本抄送 Execute 送出邮件 了解必要的属性及方法后,余下的部分接收使用者输入的Email,当成参数传给AddRecipient方法,然后根据需要填上其余属性,最后以Execute方法寄出。例如: 以下是引用片段: Dim JMail JMail = Server.CreateObject("JMail.SMTPMail") JMail.Logging = True JMail.ServerAddress = "202.96.144.48" JMail.Sender = "lihonggen0@163.com" JMail.Subject = "subject." JMail.Body = "body." JMail.AddRecipient("bbbb@163.com") JMail.AddAttachment("c:\go.gif") JMail.Priority = 3 JMail.Execute() JMail = Nothing |
总结:选择何种方案,视程序的用途和需求而定,本文例出的几种方案,供大家参考。例如用友软件U8,调用outlook组件,一样整合到自己的软件中。我编写的管理系统,自己写组件(SMTP),功能同样强大,不过Coding的时间就长了!
濠电姷鏁告慨鐑姐€傛禒瀣劦妞ゆ巻鍋撻柛鐔锋健閸┾偓妞ゆ巻鍋撶紓宥咃躬楠炲啫螣鐠囪尙绐為梺褰掑亰閸撴盯鎮惧ú顏呪拺闂傚牊鍗曢崼銉ョ柧婵犲﹤瀚崣蹇旂節婵犲倻澧涢柛瀣ㄥ妽閵囧嫰寮介妸褋鈧帡鏌熼挊澶婃殻闁哄瞼鍠栭幃婊堝煛閸屾稓褰嬮柣搴ゎ潐濞叉ê鐣濈粙璺ㄦ殾闁割偅娲栭悡娑㈡煕鐏炲墽鐭嬫繛鍫熸倐濮婄粯鎷呯粵瀣異闂佹悶鍔嬮崡鍐茬暦閵忋倕鍐€妞ゆ劑鍎卞皬闂備焦瀵х粙鎴犫偓姘煎弮瀹曚即宕卞Ο闀愮盎闂侀潧鐗嗛幊搴㈡叏椤掆偓閳规垿鍩ラ崱妞剧凹濠电姰鍨洪敋閾荤偞淇婇妶鍛櫤闁稿鍊圭换娑㈠幢濡纰嶉柣搴㈣壘椤︾敻寮诲鍫闂佸憡鎸鹃崰搴敋閿濆鏁嗗〒姘功閻绻涢幘鏉戠劰闁稿鎹囬弻锝呪槈濞嗘劕纾抽梺鍝勬湰缁嬫垿鍩為幋锕€宸濇い鏇炴噺閳诲﹦绱撻崒娆戝妽妞ゃ劌鎳橀幆宀勫磼閻愰潧绁﹂柟鍏肩暘閸斿矂鎮為崹顐犱簻闁圭儤鍨甸鈺呮倵濮橆剦妲归柕鍥у瀵粙濡歌閸c儳绱撴担绛嬪殭婵☆偅绻堝濠氭偄绾拌鲸鏅i悷婊冪Ч閹﹢鎳犻鍌滐紲闁哄鐗勯崝搴g不閻愮儤鐓涢悘鐐跺Г閸犳﹢鏌℃担鐟板鐎规洜鍠栭、姗€鎮╅搹顐ら拻闂傚倷娴囧畷鍨叏閹惰姤鈷旂€广儱顦崹鍌炴煢濡尨绱氶柨婵嗩槸缁€瀣亜閺嶃劎鈽夋繛鍫熺矒濮婅櫣娑甸崨顔俱€愬銈庡亝濞茬喖宕洪埀顒併亜閹哄棗浜鹃梺鎸庢穿婵″洤危閹版澘绫嶉柛顐g箘椤撴椽姊虹紒妯哄鐎殿噮鍓欒灃闁告侗鍠氶崢鎼佹⒑閸撴彃浜介柛瀣閹﹢鏁冮崒娑氬幈闁诲函缍嗛崑鍡樻櫠椤掑倻纾奸柛灞剧☉缁椦囨煙閻熸澘顏柟鐓庢贡閹叉挳宕熼棃娑欐珡闂傚倸鍊风粈渚€骞栭銈傚亾濮樺崬鍘寸€规洖缍婇弻鍡楊吋閸涱垽绱遍柣搴$畭閸庨亶藝娴兼潙纾跨€广儱顦伴悡鏇㈡煛閸ャ儱濡煎褜鍨伴湁闁绘ǹ绉鍫熺畳闂備焦瀵х换鍌毼涘Δ鍛厺闁哄洢鍨洪悡鍐喐濠婂牆绀堟慨妯挎硾閽冪喖鏌曟繛褍瀚烽崑銊╂⒑缂佹ê濮囨い鏇ㄥ弮閸┿垽寮撮姀鈥斥偓鐢告煥濠靛棗鈧懓鈻嶉崶銊d簻闊洦绋愰幉楣冩煛鐏炵偓绀嬬€规洟浜堕、姗€鎮㈡總澶夌处