Outlook olMailItem.Attachments.Add - вложение должно быть в файловой системе? - PullRequest
1 голос
/ 03 сентября 2010

Есть ли способ добавить вложение к электронному письму, которое вы отправляете, без вложения в файловой системе? При чтении через DOM (http://msdn.microsoft.com/en-us/library/bb175153%28office.12%29.aspx) он говорит, что источником вложения может быть либо путь к файлу, либо «элемент Outlook, который составляет вложение». Я не так часто использую VBA офисных DOM, и я Я не уверен, что это. Кроме того, все примеры, которые я могу найти, дают только примеры использования с использованием пути файловой системы.

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

Есть ли способ, которым Word может передать объект документа в памяти в Outlook для присоединения к электронной почте?

Ответы [ 3 ]

1 голос
/ 10 сентября 2010

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

0 голосов
/ 23 июня 2016

Это должно работать для вас, если соответствующим источником вложения является встроенный элемент, например встроенное изображение. Я не пробовал его с вложенными файлами, которые не являются встроенными, но он может работать там же. Основные идеи:

1) Рассматривайте содержимое электронных писем как документ Word, поскольку собственным редактором для Outlook является Word.

2) Используйте Word's Copy and Paste, чтобы переносить все с собой через буфер обмена, потому что это хорошо проверенный подход. В этом примере я вставил новый раздел с самого начала в новый абзац, но вы, очевидно, можете разместить его в любом месте.

Странно, однако, (см. Debug.Print), что количество вложений в документе To не изменяется, даже если встроенные изображения находятся там, где они должны быть, их можно увидеть и отправить. Приятного просмотра! (Файлы .olm в примере - это просто Outlook.MailItems, которые были сохранены как файлы шаблонов. Они также могут быть MailItems из папки Outlook.)

Private Sub TestAttach()
'Places inline Attachment information into a different MailItem
Dim OlTo As Outlook.MailItem
Dim OlFrom As Outlook.MailItem
Dim DocTo As Word.Document
Dim DocFrom As Word.Document
Dim R As Word.Range
Dim R1 As Word.Range
Dim R2 As Word.Range
Dim lStart As Long
Dim lEnd As Long

Set OlFrom = Outlook.CreateItemFromTemplate("C:\Temp\OlTemplateWithSomeOtherAttachments.oft")
Set OlTo = Outlook.CreateItemFromTemplate("C:\Temp\OlTemplateWithSomeAttachments.oft")
Debug.Print "From file starts with " & OlFrom.Attachments.Count & " attachments."
Debug.Print "To   file starts with " & OlTo.Attachments.Count & " attachments."
Set DocFrom = OlFrom.GetInspector.WordEditor
Set DocTo = OlTo.GetInspector.WordEditor
OlFrom.Display
OlTo.Display

Set R2 = DocFrom.Content
With R2.Find                    'Note: Find settings are 'sticky' and do not need to be repeated on the next find.
    .Forward = True
    .Wrap = wdFindStop          'Do not loop back to the start of the document
    .Format = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    .Text = "Start flag for Section with Attachments"  'Find the start of the section to move
    .Execute
    lStart = R2.Start
    .Text = "End flag for Section with Attachments"    'Find the end of the section to move
    R2.Collapse wdCollapseEnd
    .Execute
    lEnd = R2.Start
End With
'OlFrom.Display
Set R2 = DocFrom.Range(lStart, lEnd)
'R2.Select
R2.Copy
Set R = DocTo.Range(1, 1)
R.InsertParagraphBefore
'Place the new inline attachments in the To MailItem
Set R = DocTo.Range(1, 1)
R.Paste
OlTo.Display
Debug.Print OlTo.Attachments.Count; "To   file ends with " & OlTo.Attachments.Count & " attachments, the same as the original number but all the inline images show."
End Sub
0 голосов
/ 04 сентября 2010

Oesor,

Я предположил, что электронная почта должна отправляться автоматически, поэтому метод SendMail отсутствует.Я попробовал пару вещей, чтобы увидеть, будет ли это работать.В обоих случаях код будет встроен в ваш файл Word.В Word до 2007 вы могли использовать функциональность RoutingSlip:

 ActiveDocument.HasRoutingSlip = True   'Creates RoutingSlip
 With ActiveDocument.RoutingSlip
   .Subject = "email Subject"
   .AddRecipient = "recipient@domain.com"
   .Delivery = wdAllAtOnce
 End With
 ActiveDocument.Route

Очевидно, этот код не работает в Word 2007. Поэтому вместо этого вы можете использовать функциональность SendForReview:

ActiveDocument.SendForReview "recipient@domain.com", "email subject", False, True

отправляется сразу (без всплывающего окна Outlook), но существует несколько предостережений: у документа должен быть соответствующий файл - он не будет работать для нового документа, который никогда не был сохранен, и в первый разполучатель открывает прикрепленный документ по электронной почте, может появиться всплывающее сообщение о начале процесса проверки.

Надеюсь, это поможет,

Макс.

...