gpt4 book ai didi

c# - 从 C# 启动电子邮件应用程序 (MAPI)(带附件)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:23:04 25 4
gpt4 key购买 nike

过去,我使用 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 和 Adob​​e Reader 9 都可以在 Vista 下启动带有附件的 Outlook。

C# 兼容的解决方案是首选,但我对任何可行的解决方案都很满意(不必使用 MAPI)。我似乎找不到当前的“解决方案”是什么。 Stack Overflow 上的现有答案似乎也没有涵盖这一点。

编辑:

我知道 MAPI 和 C# 不能一起工作,所以我将采用一个 C/C++ 解决方案,当以管理员身份运行时,它可以在 Vista 和 Server 2008 中工作。请参阅 Adob​​e Reader 9 和 Microsoft Word 作为有效示例。

最佳答案

在工作中,我们已经使用 VSTO 成功完成了这项工作。

下面是我们在 VISTA 上运行的 Outlook 2007 中的一些代码片段:(代码在 VB.net 中)。

请注意,在对 outlook 对象执行某些操作时,该用法是安全锁定的。 (将地址、正文等属性标记为安全隐患)。我们使用第 3 方组件(赎回)来绕过此安全性。如果您不使用某种安全管理器,outlook 会弹出一个小窗口,表明外部正在尝试访问它,您可以在一段时间内授予它访问权限。

Outlook界面的导入。

Imports Outlook = Microsoft.Office.Interop.Outlook

这个例子是给你一些指导,而不是一个完整的工作例子。

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)

上例中的 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

如您所见,它在内部为此使用了 MAPI。

祝你好运。

关于c# - 从 C# 启动电子邮件应用程序 (MAPI)(带附件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/784997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com