您现在的位置: 捷凌网安 >> 编程语言 >> VB编程 >> 正文
简单电子邮件发送程序

作者:佚名 责任编辑:左决 点击数: 更新时间:2008-2-16 6:28:37

本文将向你介绍如何编写一个能发送简单的电子邮件的程序。所谓简单是指本程序只能发送纯文本,并且一次只能发送给一个收件人。

首先新建一个工程。

将窗体的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 = ""
txtSubject = ""
txtMessage = ""

End Sub

Private Sub cmdClose_Click()

Unload Me

End Sub

现在来写发送邮件的代码。

如果你看过本站的上一篇文章“SMTP协议简介”的话,你就已经知道了我们在这里会用到一些什么样的命令。这些命令必须严格按照预先规定的顺序来发送。为了跟踪这一顺序,我们将用到一个特殊的变量m_State,我们将用它来存储当前的SMTP进程的状态。

你可以将SMTP进程状态看作是等待服务对某一命令反应的状态,也就是说向服务器发送了多少个命令就有多少个状态。我们无法用VB的数据类型来描述进程所处的状态。因此本程序中用到了一个特殊的数据类型"SMTP_State" 。把下面的代码添加到窗体的声明段中:

Private Enum SMTP_State
MAIL_CONNECT
MAIL_HELO
MAIL_FROM
MAIL_RCPTTO
MAIL_DATA
MAIL_DOT
MAIL_QUIT
End Enum

Private m_State As SMTP_State

把下面的代码放在Send Message的Click事件中。

Private Sub cmdSend_Click()

Winsock1.Connect Trim$(txtHost), 25
m_State = MAIL_CONNECT

End Sub

上面的代码第一行用来同服务器建立连接,25是SMTP服务器的默认端口号。接下来要做的就是在Winsock的DataArrival事件中编写代码处理服务的回应。代码的结构如下:

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim strServerResponse As String
Dim strResponseCode As String

strResponseCode = Left(strServerResponse, 3)

If strData = "250" Or _
strData = "220" Or _
strData = "354" Then

Select Case m_State
Case MAIL_CONNECT
Case MAIL_HELO
Case MAIL_FROM
Case MAIL_RCPTTO
Case MAIL_DATA
Case MAIL_DOT
Case MAIL_QUIT
End Select

Else
MsgBox "SMTP Error: " & strServerResponse, _
vbInformation, "SMTP Error"
End If

End Sub

第一行执行代码用来辨明来自服务器的回应。接下来的IF/ELSE/ENDIF循环用来判断回应是否同预定义的值相等。220,250和354都是来自服务器的肯定回应(详见SMTP协议简介一文),对于来自服务器的失败的回应则用一个对话框来显示。下面是完整的代码。

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim strServerResponse As String
Dim strResponseCode As String
Dim strDataToSend As String
'
'接收来自服务器的数据并存储在strServerResponse变量中
'
Winsock1.GetData strServerResponse
'
Debug.Print strServerResponse
'
获取来自服务器的回应的代码
'
strResponseCode = Left(strServerResponse, 3)
'
'只有下面这个三个数字才表示服务执行你的命令成功,我们可以进行下一步的操作
'
If strResponseCode = "250" Or _
strResponseCode = "220" Or _
strResponseCode = "354" Then

Select Case m_State
Case MAIL_CONNECT
'改变当前进程的状态
m_State = MAIL_HELO
'
'去掉空格
strDataToSend = Trim$(txtSender)
'

[1] [2] 下一页

  • 上一篇文章:

  • 下一篇文章:
  •  
    最进更新
    普通文章VC++设计超强仿QQ自动伸缩窗04-17
    推荐文章基于HOOK和MMF的Win密码渗透04-17
    推荐文章几种VC++数据库开发技术的相04-17
    普通文章多线程、Socket技术及委托技04-11
    推荐文章VB.Net连接各种数据库的几种04-11
    普通文章VB.NET中的多窗体编程:升级04-11
    普通文章用VB.NET定制Windows控件04-11
    普通文章VB.NET中监视文件夹的变化04-11
    普通文章VB.NET中对象的克隆04-11
    推荐文章VB.NET中的TextBox控件详解04-11
     
    推荐文章
    推荐文章基于HOOK和MMF的Win密码渗透04-17
    推荐文章几种VC++数据库开发技术的相04-17
    推荐文章VB.Net连接各种数据库的几种04-11
    推荐文章VB.NET中的TextBox控件详解04-11
    推荐文章在VB.NET中进行抓屏04-11
    推荐文章VB.Net开发的长内容自动分页04-11
    推荐文章VB.NET中快速访问注册表技巧04-11
    推荐文章PHP5手动最简安装方法03-07
    推荐文章完全讲解PHP+MySQL的分页显示03-07
    推荐文章Linux Shell元字符知识笔记02-21
     
    热点文章 
    普通文章VC++设计超强仿QQ自动伸缩窗04-17
    推荐文章基于HOOK和MMF的Win密码渗透04-17
    推荐文章几种VC++数据库开发技术的相04-17
    普通文章VB.NET中的多窗体编程:升级04-11
    普通文章用VB.NET定制Windows控件04-11
    普通文章VB.NET中对象的克隆04-11
    推荐文章VB.NET中的TextBox控件详解04-11
    普通文章VB/VB.NET/C#导出到Excel的方04-11
    普通文章如何通过VB.NET获取网卡地址04-11
    普通文章VB.NET中使用ListView控件的04-11

    | 设为首页 | 加入收藏 | 联系站长 | 广告服务 | 友情链接 | 版权申明 | 网站地图 |

    在线交流 捷凌网安主群:51649627
    Copyright 2007-2008 © 捷凌网安. All rights reserved.
    备案序号:蜀ICP备08001812号