.NET Создать текст электронной почты в Outlook из Word - PullRequest
2 голосов
/ 08 июня 2010

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

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

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

Ответы [ 3 ]

1 голос
/ 08 июня 2010

Я наконец получил эту работу удовлетворительно. Это заняло некоторое время, поэтому я решил поделиться тем, что я использовал в итоге.

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 голос
/ 08 июня 2010

Отличный материал, чтобы округлить здесь фрагменты кода, если вы хотите просто отправить слово doc в качестве вложения из простого VBScript ...

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
0 голосов
/ 08 июня 2010

Вот пример того, как вы можете сделать это из 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
...