我正在尝试从 VB 中的 Word 2007 文档的文本中生成 Outlook 2007 中的电子邮件正文。我可以访问 Word 和 Outlook 对象库,并且可以从 Word 文档中读取以获取字符串并将其写入 Outlook,但我需要保持 Word 文档中的格式不变。
目的是允许用户编辑 word 文档,并始终让我的程序生成的电子邮件与文档同步。
有谁知道如何做到这一点?
我正在尝试从 VB 中的 Word 2007 文档的文本中生成 Outlook 2007 中的电子邮件正文。我可以访问 Word 和 Outlook 对象库,并且可以从 Word 文档中读取以获取字符串并将其写入 Outlook,但我需要保持 Word 文档中的格式不变。
目的是允许用户编辑 word 文档,并始终让我的程序生成的电子邮件与文档同步。
有谁知道如何做到这一点?
很棒的东西,在这里完善代码片段,如果您只想从简单的 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
我终于让这个工作令人满意。花了一些时间,所以我想我会分享我最终使用的东西。
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
下面是如何从 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