【问题标题】:.NET Generate email text in Outlook from Word.NET 从 Word 在 Outlook 中生成电子邮件文本
【发布时间】:2010-06-07 22:40:03
【问题描述】:

我正在尝试从 VB 中的 Word 2007 文档文本生成 Outlook 2007 中的电子邮件正文。我可以访问 Word 和 Outlook 对象库,并且可以从 Word 文档中读取字符串并将其写入 Outlook,但我需要保持 Word 文档中的格式不变。

目的是允许用户编辑 word 文档,并始终让我的程序生成的电子邮件与文档同步。

有人知道怎么做吗?

【问题讨论】:

    标签: vb.net outlook ms-word html-email


    【解决方案1】:

    我终于让这个工作令人满意。花了一些时间,所以我想我会分享我最终使用的东西。

    Private Sub CreateEmail()
        Dim wordApp As Word.ApplicationClass = New Word.ApplicationClass()
    
        Dim file As Object = "PATH TO WORD DOCUMENT"
    
        Dim nullobj As Object = System.Reflection.Missing.Value
    
        Dim doc As Word.Document = wordApp.Documents.Open( _
                    file, nullobj, nullobj, nullobj, nullobj, nullobj, _
                    nullobj, nullobj, nullobj, nullobj, nullobj, nullobj)
        doc.ActiveWindow.Selection.WholeStory()
        doc.ActiveWindow.Selection.Copy()
        Dim data As IDataObject = Clipboard.GetDataObject
        body = data.GetData(DataFormats.Html, True).ToString
        Dim delimiter As Char() = "<".ToCharArray()
        body = "<" + (body.Split(delimiter, 3))(2)
        doc.Close()
        My.Computer.Clipboard.SetText(body)
        SendMail()
    End Sub
    
    Private Sub DisplayMail()
        Dim Errmsg As String
    
        Try
            If Len(mailto) = 0 Then
                Errmsg = "You must designate a recipient."
                MsgBox(Errmsg, MsgBoxStyle.Exclamation, "Error")
                Exit Sub
            End If
    
            If GetOutlook() = True Then
                'Set the properties of the mail item
                mItem = CType(mOutlookApp.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem)
                mItem.Recipients.Add(mailto)
                mItem.BCC = bcc
                mItem.Subject = Me.subject
                mItem.HTMLBody = body
    
                'Save email to Outlook draft folder of the user
                mItem.Display()
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    

    【讨论】:

    • -1。效率不是很高,因为您 1) 在不需要时打开 Word 实例,2) 您正在使用 WholeStory 而不考虑它不做的事情 [页眉/页脚],以及 3)您正在使用 Windows 剪贴板,因此清空了已经存在的任何内容而不恢复它。
    【解决方案2】:

    很棒的东西,在这里完成代码 sn-ps,如果您想从简单的 VBScript 中将单词 doc 作为附件发送...

    Dim outlook, nameSpace, mailItem
    
    Set outlook = WScript.CreateObject("Outlook.Application")
    Set nameSpace = outlook.GetNameSpace("MAPI")
    Set mailItem = outlook.CreateItem(0)
    
    mailItem.Recipients.Add "recipient@address"
    mailItem.Subject = "Mail Subject"
    mailItem.Body = "The body of the mail item" & vbcrlf & _ 
            "Put whatever you want in here!"
    
    mailItem.Attachments.Add("\\FULLUNC\PATH\TO Your File\Called\Whatever.doc").DisplayName = "Attached File"
    
    mailItem.Send
    
    nameSpace.Logoff
    

    【讨论】:

      【解决方案3】:

      下面是一个如何从 Outlook VBA 执行此操作的示例(添加对 Word OM 的引用)。您可以使用它来移植到 .NET。

      Sub CreateMail()
          Dim filePath As String
          filePath = """C:\\Users\\Me\\Desktop\\test.docx"""
          InsertBodyTextInOutlookWordEditor filePath
      End Sub
      
      Sub InsertBodyTextInOutlookWordEditor(filePath As String)
          Dim myMail As Outlook.MailItem
          Dim myInspector As Outlook.Inspector
          Dim wdDoc As Word.Document
          Dim wdRange As Word.Range
      
          On Error Resume Next
          Set myMail = Application.CreateItem(olMailItem)
          myMail.Subject = "Here's the latest..."
          myMail.Display
          Set myInspector = myMail.GetInspector
          Set wdDoc = myInspector.WordEditor
          If Not (wdDoc Is Nothing) Then
              Set wdRange = wdDoc.Range(0, wdDoc.Characters.Count)
              wdRange.Fields.Add Range:=wdRange, Type:=wdFieldEmpty, Text:= _
              "INCLUDETEXT  " & filePath, _
              PreserveFormatting:=True
          End If
      End Sub
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-13
        • 2019-03-17
        • 1970-01-01
        • 2019-09-15
        • 2020-08-15
        • 2011-06-08
        • 1970-01-01
        相关资源
        最近更新 更多