.NET在Word中从Outlook生成电子邮件文本
问题描述:
我试图从VB中的Word 2007文档的文本生成Outlook 2007中的电子邮件正文。我可以访问Word和Outlook对象库,并且可以从Word文档读取字符串并将其写入Outlook,但我需要保持Word文档格式不变。.NET在Word中从Outlook生成电子邮件文本
其目的是允许用户编辑Word文档并始终让我的程序生成的电子邮件与文档同步。
有谁知道如何做到这一点?
答
我终于得到了这个令人满意的工作。它花了一些时间,所以我想我会分享我最终使用的。
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
答
伟大的东西,在这里四舍五入的代码片段,如果你看中是在发送Word文档作为从简单的VBScript附件...
Dim outlook, nameSpace, mailItem
Set outlook = WScript.CreateObject("Outlook.Application")
Set nameSpace = outlook.GetNameSpace("MAPI")
Set mailItem = outlook.CreateItem(0)
mailItem.Recipients.Add "[email protected]"
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
-1。不是非常有效,因为你1)打开一个Word的实例,当你不需要时,2)你正在使用'WholeStory'而没有考虑它不会做什么[header/footers],3)你正在使用Windows剪贴板,从而清空已经存在的任何内容,而不用恢复它。 – 2010-06-24 19:19:40