VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - 再谈用VB收发电子邮件
发表评论(0)作者:不详, 平台:VB6.0+Win98, 阅读:15969, 日期:2001-05-04
---- 在《计算机世界》上曾谈了在VB应用程序中通过调用MAPI实现收发电子邮件功能。笔者在实践中发现在VB应用程序中通过对Outlook2000编程,可以更方便地实现收发电子邮件功能且对附件的操作方便。下面结合简单实例向大家介绍在VB6.0应用程序中实现收发电子邮件的方法。

---- 对于MS Outlook2000,可以创建自定义的Outlook对象,并且从Outlook内部或其它应用程序中操纵这些对象。Outlook对象模型显露了各种Outlook对象,使用VBA访问Outlook对象、方法或属性之前,必须首先单击Visual Basic编辑器的project(工程)菜单下的References(应用)来设置对Outlook 9.0对象库的引用(如图一所示)。本文主要讨论在其它应用程序中使用VBA访问Outlook对象。



---- 图1:References对话框

---- 在其中的"Available References"列表框中选中"Microsoft Outlook 9.0 Object Library"表项,然后按"OK"命令按钮退出该对话框。此后就可以声明Outlook.Application类型的对象。

---- 如果还没有对Outlook 9.0对象库设置引用,那麽必须使用CreateObject函数,在同一时刻只能有一个Outlook实例。

---- 下面,笔者以两个简单的VB应用程序为例,分别介绍发送和接收邮件的程序编制方法。

---- 邮件发送程序

---- 邮件发送程序的基本处理过程为:用户输入信息组成邮件,然后使用Outlook.Application对象的Send方法发送邮件。步骤如下:

新建一个VB项目。
将Form1的Caption属性设置为"邮件发送"。
在Form1上设置三个Textbox,名称分别为txtaddress,txtSubject,txtBody;其中txtBody的MultiLine的值设为True;
设置两个命令按钮,其Name 分别为cmbSend、cmbReturn,其Caption值分别为"发送"、"返回"。
---- (如图二所示)


---- 图二 接收邮件窗口

---- 对CmdSend命令按钮编程

Private Sub cmdSend_Click()
Dim response
If txtaddress.Text = "" Then
MsgBox "没有有效邮件地址,
收件人E-Mail地址不能为空。
请填写收件人地址!"
Exit Sub
End If
Set olapp = CreateObject("outlook.application")
Set oitem = olapp.CreateItem(olMailItem)
With oitem
.Subject = txtSubject.Text '//邮件主题
.To = txtaddress.Text '//收件人
.Body = txtBody.Text '"正文" '//邮件正文
.Send '//发送邮件
End With
response = MsgBox("邮件成功提交")
End Sub

对CmdReturn命令按钮编程
Private Sub cmdReturn_Click()
End
End Sub

在邮件中添加附件

调用Add方法可以向邮件中添加附件,代码如下:

Set olapp = CreateObject("outlook.application")
Set oitem = olapp.CreateItem(olMailItem)
With oitem
. Subject = txtSubject.Text '//邮件主题
.To = txtaddress.Text '//收件人
.Body = txtBody.Text '//邮件正文
.attachments.Add attachmentsFileName
'//attachmentsFileName
为附件路径文件名,读者可以使
'//循环语句添加多个附件
.Send '//发送邮件
End With

---- 阅读邮件

新建一个VB项目。
将Form1的Caption属性设置为"阅读邮件"。
在Form1上设置五个Textbox,名称分别为txtaddress,txtSubject,txtBody,txtCopyTo,txtAttachments;其中txtBody的MultiLine的值设为True;
在Form1上添加三个命令按钮,其Name 分别为cmbSend、cmdNext、cmbRetun,其Caption值分别为"阅读邮件"、"下一封"、"返回"
在Form1上添加四个标签用于标注txtaddress、txtSubject、 txtCopyTo、txtAttachments,其Caption值分别为"发件人"、"主题"、"抄送"、"附件"(如图三所示)。

---- 图三:接收邮件

对cmdReadMail的click事件编写代码:
Private Sub cmdReadmail_Click()

Dim intCounter ,I As Integer
Set myOlApp = CreateObject("Outlook.Application")
Set myNameSpace = myOlApp.GetNamespace("MAPI")
Set myFolder = _
myNameSpace.GetDefaultFolder(olFolderInbox)

'显示邮件正文
If myFolder.Items.Count = 0 Then
response = MsgBox("收件箱里没有新邮件")
Exit Sub
End If
mailindex = 1
Set myItem = myFolder.Items(mailindex)

txtAddress.Text = myItem.SenderName '显示发件人姓名
txtSubject.Text = myItem.Subject '显示主题
txtBody.Text = myItem.Body '显示文本正文
txtCopyTo.Text = myItem.CC '显示抄送信息

'存储附件,这里将附件存储到C:\my docment\目录下,
读者可以根据需要编写代码执行相应的操作
Set myattachments = myItem.Attachments

For I = 1 To myattachments.Count
myattachments.Item(I) .SaveAsFile "
C:\mydocment\"& myattachments.Item(I) .
DisplayNametxtAttachments.
Text = txtAttachments.
Text + " " + myattachments.Item(I) .DisplayName
Next I
End sub

对cmdNext的click事件编写代码:
Private Sub cmdNext_Click()

Dim i As Integer

If mailindex < myFolder.Items.Count Then
mailindex = mailindex + 1
Set myItem = myFolder.Items(mailindex)
txtAddress.Text = myItem.SenderName
txtSubject = myItem.Subject
txtBody.Text = myItem.Body
txtCopyTo.Text = myItem.CC

'存储附件
Set myattachments = myItem.Attachments

For i = 1 To myattachments.Count
myattachments.Item(i) .SaveAsFile "
C:\My Docment\" & _
myattachments.Item(i) .DisplayName
txtAttachments.Text = txtAttachments.
Text + " " + myattachments.Item(i) .
DisplayNameNext i
Else
response = MsgBox("收件箱里已无邮件")
End If

End Sub

对cmdReturn的click事件编写代码:
Private Sub cmdExit_Click()
End
End Sub

---- 转发邮件
---- 转发邮件首先使用 GetDefaultFolder 方法返回表示当前用户默认"收件箱"文件夹的 MAPIFolder 对象。然后使用 Forward 方法检索默认"收件箱"文件夹中的第一封邮件,并将其转发给 myFriend。如果该名称能在"通讯簿"中进行无歧义地解析,则可使用Add 方法将"myFriend"添加到 Recipients 集合并且用 Send 方法将项目发送给所有收件人。

Set myOlApp = CreateObject("Outlook.Application")
Set myNameSpace = myOlApp.
GetNameSpace("MAPI")
Set myFolder = myNameSpace.
GetDefaultFolder(olFolderInbox)
Set myForward = myFolder.Items(1) .Forward
myForward.Recipients.Add "myFriend"
myForward.Send

---- 以上程序在Windows 98、Visual Basic6.0环境下调试通过;由于以上程序仅是简单的示例,因此省略错误处理等细节,在实际应用时应加入这些细节部分,以保证应用程序的可靠性。