2

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

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

有谁知道如何做到这一点?

4

3 回答 3

1

很棒的东西,在这里完善代码片段,如果您只想从简单的 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
于 2010-06-08T16:45:42.290 回答
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
于 2010-06-08T16:36:48.410 回答
0

下面是如何从 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
于 2010-06-08T05:03:41.003 回答