Ste*_*ven 6 c# c++ email mapi outlook
在过去,我使用MAPISendMail从带有文件附件的C++应用程序启动Outlook(或任何所需的MAPI电子邮件应用程序).(类似于Microsoft Word的发送电子邮件功能).
我需要在C#应用程序中执行相同的操作,并在XP,Vista,Server 2008(以及我认为的Windows 7)上运行时使其工作.
MAPISendMail在Vista/2008下是不可取的,因为它在Outlook运行时始终返回MAPI_ E_FAILURE并且托管代码中不支持MAPI.即使在检查此修复程序后:http: //support.microsoft.com/kb/939718 我无法让它可靠地工作.
我知道Microsoft Word和Adobe Reader 9都可以在Vista下使用附件启动Outlook.
AC#兼容解决方案将是首选,但我会对任何有效的(不必使用MAPI)感到满意.我似乎无法找到当前的"解决方案".Stack Overflow上现有的答案似乎也没有涵盖这一点.
编辑:
我知道MAPI和C#不能一起工作,所以当不以管理员身份运行时,我将采用在Vista和Server 2008中运行的C/C++解决方案.请参阅Adobe Reader 9和Microsoft Word作为有效的示例.
小智 5
在工作中,我们使用VSTO成功完成了这项工作.
以下是我们在VISTA上使用Outlook 2007运行的一些代码片段:(代码在VB.net中).
请注意,在对outlook对象执行某些操作时,用法是安全锁定的.(标明为安全风险的地址,正文和其他财产).我们使用第三方组件(Redemption)来绕过此安全性.如果你不使用某种类型的安全管理器,outlook会给出一些弹出窗口,外面的东西试图访问它,你可以在一段时间内给它访问.
导入Outlook界面.
Imports Outlook = Microsoft.Office.Interop.Outlook
Run Code Online (Sandbox Code Playgroud)
这个例子是给你一些方向,而不是一个完整的工作例子.
dim MailItem As Microsoft.Office.Interop.Outlook.MailItem
' Lets initialize outlook object '
MailItem = OutlookSession.Application.CreateItem(Outlook.OlItemType.olMailItem)
MailItem.To = mailto
MailItem.Subject = communication.Subject
MailItem.BodyFormat = Outlook.OlBodyFormat.olFormatHTML
MailItem.HTMLBody = htmlBody
MailItem.Attachments.Add(filename, Outlook.OlAttachmentType.olByValue)
' If True is supplied to Display it will act as modal and is executed sequential. '
SafeMail.Display(True)
Run Code Online (Sandbox Code Playgroud)
上例中的OutlookSession来自此属性:
Public ReadOnly Property OutlookSession() As Outlook.NameSpace
Get
If Not OutlookApplication Is Nothing Then
Return OutlookApplication.GetNamespace ("MAPI")
Else
Return Nothing
End If
End Get
End Property
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它正在使用MAPI.
祝它好运.