从 Office.Interop.Outlook 迁出

Migrating away from Office.Interop.Outlook

我们目前使用 Microsoft.Office.Interop.Outlook 打开带有预格式化 MailItem 的 Outlook。这样用户就可以在发送电子邮件之前更改任何信息。

已搜索 Exchange WebServices 但未找到等效项。

我尽可能清理了下面的代码。我们想在用户桌面上的当前版本的 Outlook 中打开一条消息。目前,我们有本地 Exchange 和 Office 2010,我们正在迁移到云中的 Office 2016 和 O365。

    Public Function OpenOutlookSendWithAttachment(ByVal Subject As String, ByVal Body As String, ByVal FileName As String) As Boolean
        Dim bSuccess As Boolean = True
        Dim OutlookApplication As Microsoft.Office.Interop.Outlook.Application
        Dim OutlookMailItem As Microsoft.Office.Interop.Outlook.MailItem

        Try
            OutlookApplication = New Microsoft.Office.Interop.Outlook.Application
            Try
                If OutlookApplication.Session.Offline Then OutlookApplication.Session.Logon("", "", True, True)
            Catch ex As Exception
            End Try
            OutlookMailItem = OutlookApplication.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem)
            OutlookMailItem.Subject = Subject
            OutlookMailItem.Body = Body & vbNewLine
            OutlookMailItem.Attachments.Add(FileName)
            OutlookMailItem.Display(True)
        Catch ex As Exception
            bSuccess = False
        Finally
            OutlookMailItem = Nothing
            OutlookApplication = Nothing
        End Try

        Return bSuccess
    End Function

正在寻找任何 .Net 方法来执行等效操作。

除了 mailto 协议外,没有其他方法可以使用预格式化的电子邮件打开已安装的 Outlook 版本。技术在所有 Outlook 版本中保持不变。有关详细信息,请参阅 C# app automates Outlook (CSAutomateOutlook)

您可以使用 mailto link(不支持附件)或创建 MSG(二进制)或 EML(MIME 文本)文件:Outlook 将很乐意打开并显示它。

在后一种情况下(.EML 文件),不要忘记添加 "X-Unsent: 1" MIME header 以强制 Outlook 将邮件视为未发送并显示“发送”按钮。