2010-06-07 2 views
2

Я пытаюсь сгенерировать тело сообщения электронной почты в Outlook 2007 из текста документа Word 2007 в VB. У меня есть доступ к библиотекам объектов Word и Outlook, и я могу читать из документа Word, чтобы получить строку и записать ее в Outlook, но мне нужно сохранить форматирование из документа Word неповрежденным..NET Генерировать текст электронной почты в Outlook из Word

Цель состоит в том, чтобы разрешить пользователям редактировать документ слова и всегда получать письма, которые моя программа создает, синхронизируются с документом.

Кто-нибудь знает, как это сделать?

ответ

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 
+0

-1. Не очень эффективно в том, что вы 1) открываете экземпляр Word, когда вам этого не нужно, 2) вы используете 'WholeStory' без учета того, чего он не делает [верхние и нижние колонтитулы], и 3) вы используете буфер обмена Windows, тем самым опустошая все, что уже существует, без его восстановления. –

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 
1

Большой материал, чтобы закруглить фрагменты кода здесь, если вы представляете себе просто отправив слово документ в качестве вложения от простого 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 
Смежные вопросы