![]() ![]() |
|
简单电子邮件发送程序 | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/4/18 14:44:34 文章录入:杜斌 责任编辑:杜斌 | |
|
|
本文将向你介绍如何编写一个能发送简单的电子邮件的程序。所谓简单是指本程序只能发送纯文本,并且一次只能发送给一个收件人。 首先新建一个工程。 将窗体的Name属性改为"frmSendMail" ,Caption属性改为"Simple Mail sender", BorderStyle 属性值设为"1 - Fixed Single"。 向窗体中添加一个Winsock控件。 将上面的New Message, Send Message ?Close 等命令按钮的Name属性分别改为cmdNew, cmdSend ?及cmdClose。 将下面的代码添加到相应的事件中 Private Sub cmdNew_Click() txtRecipient = "" End Sub Private Sub cmdClose_Click() Unload Me End Sub 现在来写发送邮件的代码。 如果你看过本站的上一篇文章“SMTP协议简介”的话,你就已经知道了我们在这里会用到一些什么样的命令。这些命令必须严格按照预先规定的顺序来发送。为了跟踪这一顺序,我们将用到一个特殊的变量m_State,我们将用它来存储当前的SMTP进程的状态。 你可以将SMTP进程状态看作是等待服务对某一命令反应的状态,也就是说向服务器发送了多少个命令就有多少个状态。我们无法用VB的数据类型来描述进程所处的状态。因此本程序中用到了一个特殊的数据类型"SMTP_State" 。把下面的代码添加到窗体的声明段中: Private Enum SMTP_State Private m_State As SMTP_State 把下面的代码放在Send Message的Click事件中。 Private Sub cmdSend_Click() Winsock1.Connect Trim$(txtHost), 25 End Sub 上面的代码第一行用来同服务器建立连接,25是SMTP服务器的默认端口号。接下来要做的就是在Winsock的DataArrival事件中编写代码处理服务的回应。
代码的结构如下: Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim strServerResponse As String strResponseCode = Left(strServerResponse, 3) If strData = "250" Or _ Select Case m_State Else End Sub 第一行执行代码用来辨明来自服务器的回应。接下来的IF/ELSE/ENDIF循环用来判断回应是否同预定义的值相等。220,250和354都是来自服务器的肯定回应(详见SMTP协议简介一文),对于来自服务器的失败的回应则用一个对话框来显示。下面是完整的代码。 Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim strServerResponse As String Select Case m_State
'获取信箱名
'发送每一行邮件 For Each varLine In varLines Winsock1.SendData CStr(varLine) & vbLf ' Debug.Print CStr(varLine) Next ' '向服务器发送一个小数点告诉服务器邮件发送完毕。 Winsock1.SendData "." & vbCrLf ' Debug.Print "." ' Case MAIL_DOT '改变当前进程的状态 m_State = MAIL_QUIT ' '向服务器发送QUIT命令 Winsock1.SendData "QUIT" & vbCrLf ' Debug.Print "QUIT" Case MAIL_QUIT ' '断开连接 Winsock1.Close ' End Select Else End Sub 请注意,对于要发送的文本,我们是以vbLf结尾,而不是vbCrLf。这一规则同样适用于发送邮件的主题。如果不以vbLf结尾会让服务器错误理解你的命令。最后要做的事是对Winsock的Error事件编码,以处理错误。 Private Sub Winsock1_Error(ByVal Number As Integer, _ MsgBox "Winsock Error number " & Number & vbCrLf & _ End Sub |
|
![]() ![]() |