用VB让电子邮件自动发布信息
软件世界
有些信息中心支持用户向它的电子信箱中发出带有特定格式命令的咨询邮件(也可以是空邮件),信息中心系统根据用户的要求,自动发布信息。这一功能也可用VB进行简单的编程来实现,为个人的电子邮箱提供一个自动回复咨询信的功能。如果你负责承办一个小型会议或社会活动的组织工作,可以用这一功能提高工作效率。
一、程序设计思路
检查Outlook Express(默认邮件管理器),从服务器上接收邮件(咨询信),根据咨询信,逐一发布信息,实际就是一个有控制的自动回复邮件的过程。
二、核心控件
VB的Microsoft MAPI Controls 6.0控件中的邮件会话控件(MAPISession)和邮件消息控件(MAPIMessage)可以实现邮件管理器Outlook Express主要功能,如邮件的接收和发送,对收信人的E-mail地址、主题、信息内容进行相关的处理等。用到的主要功能有:
1.方法:
MAPISession.SignOff '关闭邮件会话
MAPISession.SignOn '打开邮件会话,由Outlook Express 自动接收邮件
MAPIMessages. Send '发送邮件
MAPIMessages.Fetch '从邮箱中产生一个消息集合
2.属性:
MAPISession.SessionID 'MAPI对话标识号
MAPIMessages.SessionID 'MAPI消息标识号
MAPIMessages.MsgIndex '邮件索引号
MAPIMessages.MsgCount '邮件总数
MAPIMessages.FetchUnreadOnly '消息集合中的消息是否不可读
MAPIMessages.MsgDateReceived '邮件接受日期
MAPIMessages.MsgOrigDisplayName '发件人的姓名
MAPIMessages.MsgOrigAddress '发件人的E-mail地址
MAPIMessages. RecipDisplayName '收件人的姓名
MAPIMessages.RecipAddress '收件人的E-mail地址
MAPIMessages.MsgSubject '邮件主题
MAPIMessages.MsgNoteText '邮件正文
MAPIMessages.AttachmentPathName '要发送邮件的附件名
三、窗口界面
1.新建一个标准的EXE工程,添加10个Label,Caption属性分别为“发件人”、“日期”,“收件人”、“主题”和“内容”,其他Label的Caption分别设置为空,并将Autosize属性设置为True,用这些Label分别来显示日期、发件人、主题和新邮件的数量。
2.添加1个文本框,并将属性清空,用来显示信件的内容。
3.添加4个命令按钮,将Caption的属性分别设为“上一条”、“下一条”、“发布信息”和“退出”。
4.在“工具”菜单中选“部件”,在“控件”选项卡中选“Microsoft MAPI Controls 6.0”。然后点击“应用”按钮,将MAPIMessages和 MAPISession控件加入窗体。(图1)

四、代码实现
本程序在Windows2000、Windows98、VB6.0、Outlook Express5-6环境下调试通过。
'声明部分,基本变量和主要功能回复函数和显示过程的声明
Dim zs As Integer '用户名字数
Dim i As Integer
Dim sendtext As String '发出的文本
Dim fff As String '换行符
Dim mapiusername As String '
'定义一个回复邮件(发布信息)的函数
Public Function mapisend(t1, t2, sendtext)
MAPIMessages1.MsgIndex = -1
MAPIMessages1.RecipAddress = t1 ' 传递发布信息的目标地址参数
MAPIMessages1.MsgSubject = t2 '传递主题参数
MAPIMessages1.MsgNoteText = sendtext ' 传递内容参数
MAPIMessages1.SessionID = MAPISession1.SessionID
MAPIMessages1.Send
End Function
'定义一个显示已接收邮件的子程序
Public Sub mapidisp()
Label6.Caption = MAPIMessages1.MsgOrigAddress '显示发件人的邮件地址
Label7.Caption = MAPIMessages1.MsgDateReceived '显示日期
Label8.Caption = MAPIMessages1.RecipAddress '显示收件人的邮件地址
Label9.Caption = MAPIMessages1.MsgSubject '显示邮件主题
Text1.Text = MAPIMessages1.MsgNoteText '显示邮件内容
Label10.Caption = "总计" + LTrim(Str(MAPIMessages1.MsgCount)) + "封新邮件"
End Sub
'窗体加载,打开邮件对话,并显示邮件
Private Sub Form_Load()
MAPISession1.SignOn
MAPIMessages1.SessionID = MAPISession1.SessionID
MAPIMessages1.FetchUnreadOnly = True
MAPIMessages1.Fetch
If MAPIMessages1.MsgCount = 0 Then
MsgBox "邮箱中没有咨询信", , "信息"
End Sub
End If
MAPIMessages1.MsgIndex = 1
Mapidisp ' 显示第一个邮件
End Sub
' 显示上一个邮件
Private Sub Command1_Click()
If MAPIMessages1.MsgIndex > 1 Then
MAPIMessages1.MsgIndex = MAPIMessages1.MsgIndex - 1
mapidisp
End If
End Sub
' 显示下一个邮件
Private Sub Command2_Click()
If MAPIMessages1.MsgIndex < MAPIMessages1.MsgCount - 1 Then
MAPIMessages1.MsgIndex = MAPIMessages1.MsgIndex + 1
mapidisp
End If
End Sub
'发布信息
Private Sub Command1_Click()
If MAPIMessages1.MsgCount = 0 Then
MsgBox "邮箱中没有咨询信", , "消息"
Exit Sub
End If
zs = InStr(MAPIMessages1.MsgOrigDisplayName,"@")
If zs = 0 Then
mapiusername = MAPIMessages1.MsgOrigDisplayName
ElseIf zs > o Then
mapiusername = Left(MAPIMessages1.MsgOrigDisplayName,(zs - 1))
End If
fff = Chr(13) + Chr(10)
sendtext = mapiusername + ",你好" + fff + "欢迎来信咨询,有关活动的信息如下(略)+"fff + "湖北襄樊VB乐园" + fff + Date$ + Time$
popmsg = "信息已发布到" + MAPIMessages1.MsgOrigAddress
Call mapisend(MAPIMessages1.MsgOrigAddress, MAPIMessages1.MsgSubject, sendtext)
MsgBox popmsg, , "消息"
End Sub
'退出并关闭邮件对话
Private Sub Command2_Click()
MAPISession1.SignOff
End
End Sub
Private Sub Form_Unload(Cancel As Integer)
MAPISession1.SignOff
End Sub
五、功能的扩展
以上功能只是在收到咨询信后进行固定内容的回复。这一功能还可以进一步扩展,自定义一个命令集,每个命令设定一个特定的信息服务,用程序自动识别咨询信中的命令,有针对性地回复,用MAPIMessages.AttachmentPathName属性设定送邮件的附件。要进行信息发布,还须注意邮箱的安全性问题,至少要将邮箱设定为拒收附件和大邮件的状态。