如何調用默認郵件發送的軟件,發送帶多個附件的EMAIL?在線等候......

yhipah 2002-03-05 12:00:37
.
...全文
211 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jamex 2002-03-06
  • 打赏
  • 举报
回复
http://www.dapha.net/vb/list.asp?id=936
sonicdater 2002-03-06
  • 打赏
  • 举报
回复
通过 MAPI ,调用 OUTLOOK 发信的例子:
==================================================================
VERSION 5.00
Object = "{20C62CAE-15DA-101B-B9A8-444553540000}#1.1#0"; "MSMAPI32.OCX"
Begin VB.Form Form1
Caption = "MailErrorForm"
ClientHeight = 5235
ClientLeft = 1680
ClientTop = 1530
ClientWidth = 5220
LinkTopic = "Form1"
ScaleHeight = 5235
ScaleWidth = 5220
Begin VB.TextBox txtPassword
Height = 285
IMEMode = 3 'DISABLE
Left = 720
PasswordChar = "*"
TabIndex = 7
Top = 1080
Width = 4455
End
Begin VB.TextBox txtUser
Height = 285
Left = 720
TabIndex = 6
Top = 720
Width = 4455
End
Begin VB.TextBox txtBody
Height = 3135
Left = 0
MultiLine = -1 'True
ScrollBars = 3 'Both
TabIndex = 5
Top = 1440
Width = 5175
End
Begin VB.TextBox txtTo
Height = 285
Left = 720
TabIndex = 3
Top = 0
Width = 4455
End
Begin VB.TextBox txtSubject
Height = 285
Left = 720
TabIndex = 1
Top = 360
Width = 4455
End
Begin VB.CommandButton cmdSend
Caption = "Send"
Height = 495
Left = 2040
TabIndex = 0
Top = 4680
Width = 1215
End
Begin MSMAPI.MAPIMessages mpmErrorMail
Left = 3720
Top = 4560
_ExtentX = 1005
_ExtentY = 1005
_Version = 393216
AddressEditFieldCount= 1
AddressModifiable= 0 'False
AddressResolveUI= 0 'False
FetchSorted = 0 'False
FetchUnreadOnly = 0 'False
End
Begin MSMAPI.MAPISession mpsErrorMail
Left = 4320
Top = 4560
_ExtentX = 1005
_ExtentY = 1005
_Version = 393216
DownloadMail = 0 'False
LogonUI = 0 'False
NewSession = 0 'False
End
Begin VB.Label Label1
Caption = "Password:"
Height = 255
Index = 4
Left = 0
TabIndex = 9
Top = 1080
Width = 780
End
Begin VB.Label Label1
Caption = "User:"
Height = 255
Index = 3
Left = 0
TabIndex = 8
Top = 720
Width = 660
End
Begin VB.Label Label1
Caption = "To:"
Height = 255
Index = 1
Left = 0
TabIndex = 4
Top = 0
Width = 660
End
Begin VB.Label Label1
Caption = "Subject:"
Height = 255
Index = 0
Left = 0
TabIndex = 2
Top = 360
Width = 660
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

Private Sub cmdSend_Click()
On Error GoTo SendErrorMailError

' Sign on to the mail system.
mpsErrorMail.UserName = txtUser
mpsErrorMail.Password = txtPassword
mpsErrorMail.SignOn

' Send the message.
mpmErrorMail.SessionID = mpsErrorMail.SessionID
mpmErrorMail.Compose
mpmErrorMail.RecipDisplayName = txtSubject
mpmErrorMail.RecipAddress = txtTo
mpmErrorMail.AddressResolveUI = False
mpmErrorMail.MsgSubject = txtSubject
mpmErrorMail.MsgNoteText = txtBody
mpmErrorMail.Send False

' Sign off of the mail system.
mpsErrorMail.SignOff
Exit Sub

SendErrorMailError:
' There was an error sending the mail.
' Just present the message.
MsgBox "Error " & Format$(Err.Number) & _
" sending mail." & vbCrLf & _
Err.Description
Exit Sub
End Sub
Private Sub Form_Resize()
Dim wid As Single
Dim hgt As Single

wid = ScaleWidth - txtTo.Left
If wid < 120 Then wid = 120
txtTo.Width = wid
txtSubject.Width = wid
txtUser.Width = wid
txtPassword.Width = wid

cmdSend.Move _
(ScaleWidth - cmdSend.Width) / 2, _
ScaleHeight - cmdSend.Height
hgt = cmdSend.Top - txtBody.Top - 60
If hgt < 120 Then hgt = 120
txtBody.Move 0, txtBody.Top, ScaleWidth, hgt
End Sub
jamex 2002-03-06
  • 打赏
  • 举报
回复

使用 MAPI 控件


消息处理应用程序接口 (MAPI) 控件,可用于创建具有电子邮件功能的 Visual Basic 应用程序。MAPI 是一系列的核心系统部件,它们可将任何用于电子邮件或工作组的应用程序,和适应 MAPI 的消息服务天衣无缝地连接起来。例如,通过使用 MAPI 驱动程序,Microsoft Exchange 消息系统可被连接到绝大多数私用或公用电子邮件系统中。

在 Visual Basic 中,MAPI 控件可用于与基本的消息子系统进行交互。要使用这些控件,则必须先安装适应 MAPI 的电子邮件系统,比如 Microsoft Exchange。基本的消息服务已由工作组环境提供了,比如说,在 Windows 95 或 Windows NT 环境下运行的 Microsoft Exchange 服务器。

使用 MAPI 控件包括两个步骤:建立 MAPI 会话,然后使用各种属性和方法访问和管理个人的收件箱。比如,创建并发送消息、加上附加文件、验证电子邮件系统地址簿中的收件人地址,等等。

MAPISession 控件登录并建立 MAPI 会话。它也可用于退出 MAPI 会话。MAPIMessages 控件包含了完成上面所说的消息系统功能所需的所有属性和方法。

MAPI 控件在运行时是不可见的。另外,这些控件不具有任何事件。只有通过设置适当的属性,或指定适当的方法来使用它们。

注意 如果要运行使用了 MAPI 控件的程序,则需要保证已经正确安装了 32 位的 MAPI DLL,否则就不能完成象 SignOn 之类的 MAPI 功能。例如,为了正确使用 MAPI 功能,在 Windows 95 中,安装系统时必须同时安装 Exchange,或者在“控制面板”中单独安装。

用途
在应用程序中加入消息系统功能。


创建功能完备的电子邮件应用程序。
使用 MAPISession 控件
MAPISession 控件用于登录和退出一个 MAPI 会话。假如已存在 MAPI 服务,那么用 MAPISession 控件进行登录只是提供注册用户的姓名和密码。MAPISession 控件将确定操作系统中的电子邮件设置,并调用基本的消息子系统(电子邮件服务器)。

MAPISession 控件



设置 MAPISession 的属性
在设计时可用 MAPISession 的“属性页”设置 MAPISession 的属性。用鼠标右键单击 MAPISession 控件,并单击“属性”以显示“属性页”对话框。

在设计时设置 MAPISession 的属性



UserName 和 Password 属性被用来向基本的消息系统提供合法的登录信息。可以在设计时设置这些属性,也可以在运行时向用户提示输入这些属性。在需要向用户提供基本的电子邮件系统的登录对话框时,请将 LoginUI 属性设置为 True。如果不存在这样的对话框,则忽略该属性。可以创建自定义的对话框提示用户输入这些信息。

NewSession 属性指定是否需要建立新的电子邮件会话。如果已经建立了合法的会话,通过设置 NewSession 属性可使两个会话并发运行。

DownloadMail 属性指定在当前会话开始时,是否自动下载该用户的电子邮件。将该值设置为 True,将把该用户的所有电子邮件下载到其收件箱。根据电子邮件系统的速度和接收的电子邮件数量,该操作有可能是很耗时的操作。通过将该属性设置为 False,用户可以选择是否等到以后再下载电子邮件,或者设置自动下载电子邮件的时间间隔。

SignOn 和 SignOff 方法
设置了 UserName 和 Password 属性后,就可以在运行时使用 SignOn 方法启动 MAPI 会话了。

例如:

mpsSession.SignOn

会话建立后,该会话的句柄被保存在 SessionID 属性中。根据 NewSession 属性的值,该会话句柄可能指向新创建的会话,也可能指向已经存在的会话。

要终止会话,请使用 SignOff 方法。

注意 Action 属性也可用于登录和退出 MAPI 会话。然而,建议使用 SignOn 和 SignOff 方法。Action 属性只是用来保持与早先版本的 Visual Basic 兼容。

SessionID 属性
用 SignOn 方法成功地建立了消息处理会话后,SessionID 属性将返回一个唯一的消息处理会话句柄。SessionID 的值可被 MAPIMessages 控件用来创建与合法消息处理会话的关联。按照缺省规定,该值为 0。

使用 MAPIMessages 控件
使用 MAPISession 控件在消息处理会话中登录后,就可以使用 MAPIMessages 控件接收、发送或阅读收件箱中的消息了。该收件箱是在登录时指定的。

MAPIMessages 控件提供了完成基本电子邮件任务的属性和方法。这些基本任务有:撰写一条消息、将其发送给收件人、检查收件人地址是否有效,或者附加上一个文件。

MAPIMessages 控件



在绝大多数情况下,MAPIMessage 控件用于为应用程序提供与电子邮件兼容的特定功能。例如,需要在应用程序自动创建了报表后,向工作组发一个通知消息。换句话说,可以在自编的应用程序中加入与电子邮件功能,而无需创建完备的电子邮件应用程序。

不过,用 MAPI 控件同样能够创建非常强大的,具有电子邮件和工作组功能的应用程序。

示例应用程序:VBMail.vbp
下面的示例演示了 Visual Basic 中 MAPI 的基本用法。要知道 MAPI 控件属性和方法的更详尽用法,请参考 VBMail.vbp 示例应用程序,该示例应用程序列在 Samples目录中。

注意 用 OLE 消息处理技术也可以将 MAPI 功能加入自编的应用程序中,有关 OLE 消息处理的消息可以在 Microsoft Exchange Microsoft Exchange Software Development Kit 中找到。

与 SessionID 属性相关联
MAPIMessages 控件的 SessionID 属性包含了 MAPISession 控件的 SessionID 属性返回的消息处理会话句柄。要使 MAPIMessages 控件与有效的消息处理会话相关联,就需要将该属性设置为成功登录的 MAPISession 控件的 SessionID。例如:

mpmMessage.SessionID = mpsSession.SessionID

只有与有效的 MAPI 会话相关联,才能使用 MAPIMessages 控件并访问消息。

访问消息
成功登录到 MAPI 会话后,就可以访问注册用户的收件箱了。注册用户由 MAPISession 控件的 UserName 和 Password 属性指定。收件箱是消息的仓库。收件箱被打开时,创建两个缓冲区:撰写缓冲区和阅读缓冲区。

阅读缓冲区由从用户的收件箱中得到的编了号的消息集合构成。MsgIndex 属性用来访问该集合中的每条消息,第一条消息的编号值为 0,然后依次加一,直到集合的末尾。

该消息集合是用 Fetch 方法建立的。该集合包括所有 FetchMsgType 类型的消息,并根据 FetchSorted 属性的指定进行了排序。FetchMsgType 属性的值由基本的消息系统控制。FetchSorted 属性可被设置为按照接收消息的顺序,或按照用户收件箱指定的顺序,将消息加入消息集合(阅读缓冲区)。已经阅读过的消息,可通过设置 FetchUnreadOnly 属性,确定是包括在消息集合之中,还是排除在消息集合之外。

用户不能修改阅读缓冲区中的消息,但用户可以将它们复制到撰写缓冲区进行修改。

消息可在撰写缓冲区中创建和编辑。当 MsgIndex 属性设置为 -1 时,撰写缓冲区有效。很多消息操作只在撰写缓冲区中才有效。比如:发送消息、保存消息或删除收件人和附件等操作。

撰写和管理消息
管理消息是 MAPIMessages 控件的最基本的功能。撰写、发送、接收和删除消息等操作,通过使用对应其基本功能(合并、复制、删除等等)的方法完成。下表列出了应用于消息的 MAPIMessages 方法:

方法 描述
Compose 撰写新的消息
Copy 将当前编号的消息复制到撰写缓冲区
Delete 删除一条消息、收件人或附件
Fetch 从收件箱中选定的消息中创建消息集合
Forward 转发消息
Reply 答复消息
ReplyAll 答复消息的所有收件人
Save 保存撰写缓冲区中的当前消息
Send 发送消息


要对一条消息进行操作,必须首先用 MsgIndex 属性选中它。由 MsgIndex 属性标识的消息被称为当前编号的消息。

在 MsgIndex 属性选中某条消息之前,不能设置其它消息属性。消息编号的有效范围是 -1 到 MsgCount -1(MsgCount 属性返回消息集合中的消息总数)。创建新的消息后,MsgIndex 属性的值被设置为 -1。

撰写消息
用 Compose 方法可以创建新消息。使用 Compose 方法后,撰写缓冲区被清空,并且 MsgIndex 属性被设置为 -1。

'撰写新消息
mpmMessage.Compose

完成消息需要如下几步:确定消息的收件人,选择主题以及编写消息。

确定消息地址
要设置收件人的姓名和地址,可使用 RecipDisplayName 和 RecipAddress 属性。其中 RecipDisplayName 是收件人的有效姓名,比如“Richard Tull”。RecipAddress 属性包含了收件人的电子邮件地址“richtull”,如下所示。

'确定消息地址
mpmMessage.RecipDisplayName = "Richard Tull"
mpmMessage.RecipAddress = "richtull"

本地工作组以外的收件人地址(比如通过 Internet 发送给其它公司某人的消息)需要完整的 Internet 电子邮件地址:“richtull@littlemag.com”。

验证收件人姓名
收件人姓名在发送消息时,用 ResolveName 方法,参照电子邮件系统中注册的用户列表进行验证。本地工作组之外的收件人姓名的检查,由基本的消息系统用不同方法进行验证。

下面的示例调用 ResolveName 方法验证了收件人的有效电子邮件名称,并将 AddressResolveUI 属性设置为 True。

'验证收件人姓名
mpmMessage.AddressResolveUI = True
mpmMessage.ResolveName

发送消息时,如果收件人地址有二义性或无效,可以通过将 AddressResolveUI 属性设置为 True 以显示对话框输入详细情况,或设置为 False 以产生错误。如果找到了较接近的地址,输入详细情况的对话框将提供一个替换的地址。

消息主题和文本
MsgSubject 属性指定了消息的主题行。包括 Null 字符在内,在主题中最多可以输入 64 个字符。

该消息的消息体包含在 MsgNoteText 属性中。在入站 (inbound) 的消息中,每段消息由回车换行符 (vbCrLf) 结束。出站 (Outbound) 的消息中,每段消息可以由回车符 (vbCr)、换行符 (vbLf),或者回车换行符结束。

'创建消息
mpmMessage.MsgSubject = "Status Report"
mpmMessage.MsgNoteText = "Build successful!"

发送消息
要发送消息,可使用 Send 方法。
acptvb 2002-03-06
  • 打赏
  • 举报
回复
感谢您使用微软产品。

正象sonicdater所说,您可以用MAPISession和MAPIMessages控件来调用默认的邮件客户端发信。如果您要发送多个附件,您可以参考以下文档中的代码,其关键是要正确设定AttachmentPosition属性。
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q186148

- 微软全球技术中心 VB技术支持

本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。

为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
yhipah 2002-03-05
  • 打赏
  • 举报
回复
謝謝,我要的是能夠帶多個附件的代碼....
各位高手,幫幫忙.....
要用OUTLOOKEXPRESS的
一川烟草123 2002-03-05
  • 打赏
  • 举报
回复
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

example:
ShellExecute aa, "open", txthomepage, 0, 0, 0
ShellExecute aa, "open", "mailto:" & txtcontractemail1.Text, 0, 0, 0
一川烟草123 2002-03-05
  • 打赏
  • 举报
回复
up.

742

社区成员

发帖
与我相关
我的任务
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧