使用outLook提供的发送
如我见过的用友软件U生产制造(演示版)其中的邮件功能就是通过调用outLook的ActiveX 组件
优点开发简单
缺点依赖outlook组件SMTP 邮件服务
邮件发送的代码如下
以下是引用片段Private Sub Send() Dim outObj As New OutlookApplication() Dim Item As OutlookMailItemClass Item = outObjCreateItem() ItemTo = ItemSubject = hello ItemBody = hell ItemAttachmentsAdd(C:\abctxt) ItemSend() End Sub
WEB开发在ASPNet中引用SystemWebMail类
SystemWebMail 命名空间包含使您可以使用 CDOSYS(Windows 的协作数据对象)消息组件来构造和发送消息的类邮件消息是通过内置在 Microsoft Windows 中的 SMTP 邮件服务或任意的 SMTP 服务器来传送的此命名空间中的类可以在 ASPNet 或任何托管应用程序
MailAttachment提供用于构造电子邮件附件的属性和方法
MailMessage提供用于构造电子邮件的属性和方法
SmtpMail提供用于使用 Windows 的协作数据对象 (CDOSYS) 消息组件来发送消息的属性和方法
邮件可以通过 Microsoft Windows 中内置的 SMTP 邮件服务或任意 SMTP 服务器来传送SystemWebMail 命名空间中的类型可以在 ASPNet 或任何托管应用程序使用
Smtp服务器的设置现在一些免费邮件提供商是不再提供针对所有邮件提供Smtp服务在发送邮件的时候需要验证用户信息考虑Smtp用户验证问题
如果Smtp服务器在本地计算机发送速度很快的基本上不用担心如果不是本地服务器那么发送的时候最好不要以此太多一是速度问题二是以此发送太多邮件Smtp服务器可能认为是垃圾邮件而拒绝服务
代码如下
以下是引用片段Private Sub Button_Click(ByVal sender As SystemObject ByVal e As
SystemEventArgs) Handles ButtonClick Dim mailObj As New MailMessage() Dim smtp As SmtpMail 定义SMTP服务器的名称 smtpSmtpServer = 定义邮件的发送地址 mailObjFrom = 定义邮件的接收地址 mailObjTo = 定义邮件的暗送地址 mailObjBcc= 定义邮件的抄送地址 mailObjCc = 定义邮件的主题 mailObjSubject = 主题 定义邮件的主体 mailObjBody = 邮件主体! 邮件以 HTML的格式发送 mailObjBodyFormat = MailFormatHtml 定义邮件的有限级在此设定为高 mailObjPriority = MailPriorityHigh 给发送的邮件附加上一个附件 mailObjAttachmentsAdd(New MailAttachment(c:\aadoc)) smTpSend(mailObj) End Sub
在VBNet或C#开发Windows 应用程序中使用SystemNetSockets
也是基于SMTP协议
一SMTP协议简介
客户端通过服务器的端口建立TCP/IP连接
服务器端 Simple Mail Transfer Service Ready
客户端使用HELO命令标识发件人
客户端HELO
服务器端
客户端发送MAIL命令服务器端以OK作为响应表明准备接收
客户端 MAIL FROM 〈〉
服务器端 OK
客户端发送RCPT命令标识收件人服务器端回应是否愿意为收件人接受邮件
客户端RCPT TO 〈〉
服务器端 OK
协商结束后用命令DATA发送发送邮件
客户端DATA
服务器端 Start mail input end with 〈CRLF〉〈CRLF〉
客户端以表示结束输入内容一起发送出去
客户端Subject 〈CRLF〉
内容〈CRLF〉
〈CRLF〉
客户端用QUIT命令退出
客户端QUIT
服务器端 closing transmission channel
优点可以在此基础上开发出自己的组件利用Sockets我们可以进行网络编程开发
缺点程序量相对较多
发送邮件的代码如下
以下是引用片段Dim sendData As String Dim szData As Byte() Dim CRLF As String CRLF = \r\n 创建与服务器端口的连接 Dim SmtpServ As New TcpClient(txtsmtpText ) lstlogItemsClear() 显示服务器初始信息 DimNetStrm AsNetworkStream NetStrm = SmtpServGetStream() Dim RdStrm As New StreamReader(SmtpServGetStream()) If RdStrmReadLine() 〈〉 Then lstlogItemsAdd(RdStrmReadLine()) sendData = HELO server + CRLF szData = SystemTextEncodingASCIIGetBytes(sendDataToCharArray()) NetStrmWrite(szData szDataLength) lstlogItemsAdd(RdStrmReadLine()) 标志发件人 sendData = MAIL FROM: + 〈 + txtfromText + 〉 + CRLF szData = SystemTextEncodingASCIIGetBytes(sendDataToCharArray()) NetStrmWrite(szData szDataLength) lstlogItemsAdd(RdStrmReadLine()) 标志收件人 sendData = RCPT TO: + 〈 + txtToText + 〉 + CRLF szData = SystemTextEncodingASCIIGetBytes(sendDataToCharArray()) NetStrmWrite(szData szDataLength) lstlogItemsAdd(RdStrmReadLine()) 准备发送内容 sendData = DATA + CRLF szData = SystemTextEncodingASCIIGetBytes(sendDataToCharArray()) NetStrmWrite(szData szDataLength) lstlogItemsAdd(RdStrmReadLine()) 发送主题 sendData = SUBJECT: + txtsubText + CRLF 发送内容 sendData = sendData + txtmsgText + CRLF 结束发送 sendData = sendData + + CRLF szData = SystemTextEncodingASCIIGetBytes(sendDataToCharArray()) NetStrmWrite(szData szDataLength) lstlogItemsAdd(RdStrmReadLine()) 退出 sendData = QUIT + CRLF szData = SystemTextEncodingASCIIGetBytes(sendDataToCharArray()) NetStrmWrite(szData szDataLength) lstlogItemsAdd(RdStrmReadLine()) 关闭连接 NetStrmClose() RdStrmClose() lstlogItemsAdd(连接关闭) lstlogItemsAdd(发送成功)
大家还可以参考使用C# 创建邮件发送组件(SMTP)
IIS SMTP自带的基本的发信组件CDONTS
你不必专门下载微软已经提供了这个组件只要安装了NT的SMTP就会有的
优点组件由操作系统自带
缺点功能比较差可扩展性不强
Mymail = CreateObject(CDONTSNewMail)
MymailFrom = *** 信件发送者信箱
MymailTo = *** 信件接收者信箱
MymailCC = *** 抄送
MymailBCC = *** 密件发送
MymailSubject = *** 信件主题
MymailBody = *** 信件正文
设置优先级不重要一般重要
MymailImportance =
MymailSend()
Mymail = Nothing
使用JMail组件
Jmail具有以下特点
()可以发送附件
()详细日志能力便于你查看问题所在
()设置邮件发送的优先级
()支持多种格式的邮件发送比如说以HTML或者TXT的方式发送邮件这是个免费的组件
()密件发送/(CC)抄送/紧急信件发送能力
()最关键的就是——免费的组件不必发钱所以非常值得使用
网站目前版本是
JMail组件的常用属性
Body 邮件正文
Logging 调用Log记录供Debug用
Priority 邮件的优先程度从到
Sender 发件人
ServerAddress SMTP服务器的IP地址或名称
Subject 邮件标题
JMail组件的常用方法
AddAttachment 指定附件文件
AddRecipient 加入一个收件人
AddRecipientBCC 隐藏的副本抄送只有发件人和BCC收件人知道
AddRecipientCC 副本抄送
Execute 送出邮件
了解必要的属性及方法后余下的部分接收使用者输入的Email当成参数传给AddRecipient方法然后根据需要填上其余属性最后以Execute方法寄出例如
以下是引用片段Dim JMail JMail = ServerCreateObject(JMailSMTPMail) JMailLogging = True JMailServerAddress = JMailSender = JMailSubject = subject JMailBody = body JMailAddRecipient() JMailAddAttachment(c:\gogif) JMailPriority = JMailExecute() JMail = Nothing
总结选择何种方案视程序的用途和需求而定本文例出的几种方案供大家参考例如用友软件U调用outlook组件一样整合到自己的软件中我编写的管理系统自己写组件(SMTP)功能同样强大不过Coding的时间就长了!