你曾经有过想从vb程序里发送电子邮件的想法吗?有了vb的MAPI控件,这就很容易了。这个控件能够让你在任何符合MAPI的电子邮件系统上发送消息,例如Outlook和Exchange。
要使用MAPI控件,你必须在项目的组件(Components)对话框里选择它们。它们被列入微软MAPI控件6.0里。然后,这两个叫做MAPISession和MAPIMessages的控件,会出现在你的工具箱里。在每个窗体里都要放一个(它们在运行的时候看不到)。
MAPISession控件用来建立到安装在系统上的、符合MAPI邮件系统标准的会话或者连接。这个控件具有UserName和Password这两个属性,用于电子邮件账号的登录。你可以在设计的时候设置这些属性,或者提示用户在代码里使用它们。然后,调用控件的SignOn方法来建立会话。一旦会话建立起来的,控件的SessionID属性就会返回会话的句柄。
MAPIMessages控件必须被传送给MAPI会话的句柄,它从MAPISession控件的SessionID属性里获得。一旦实现了这一步,你就可以使用MAPIMessages控件来完成各种任务,比如访问收件箱里的消息,保存、复制和删除消息,以及操作附件等。
对这个小窍门,我们对创建和发送消息感兴趣,这需要下面几步:
使用MAPIMessages控件发送消息并不是真的发送了它;而是将它放在邮件系统的送件箱里。消息真正要在什么时候发送取决于邮件系统的设置。当你的程序完成与邮件相关的活动时,就要调用MAPISession控件的SignOff方法来结束会话。
下面的代码说明了这一点。它假设含有代码的窗体包含有用于各种必要信息的控件:用户名、密码等等。
Private Sub SendMail_Click()
MAPISession1.UserName = tstUserName.Text
MAPISession1.Password = txtPassword.Text
MAPISession1.SignOn
MAPIMessages1.SessionID = MAPISession1.SessionID
MAPIMessages1.Compose
MAPIMessages1.RecipAddress = txtTo.Text
MAPIMessages1.MsgSubject = txtSubject.Text
MAPIMessages1.MsgNoteText = txtMessage.Text
MAPIMessages1.ResolveName
MAPIMessages1.Send
MAPISession1.SignOff
End Sub
使用Send方法的替代方法是发送一个值为真(True)的自变量。(这个自变量缺省的值是伪False——这就是为什么它没有被包含在上面代码里的原因。)
MAPIMessages1.Send True
在本文里,Send方法显示了一个消息框,用户可以在里面输入或者编辑消息的元素,然后点击发送(Send)按钮把它发送出去。
当vb程序需要发送电子邮件消息(也许为了支持或者许可证的问题)的时候,将对电子邮件的支持集成到应用程序里,而不是要求用户切换到他们自己的电子邮件软件会更好。