Excel VBA - отправка электронных писем с помощью Excel - тело сообщения в виде изображения - PullRequest
0 голосов
/ 11 октября 2019

Моя цель - отправлять электронные письма, используя таблицу Excel, содержащую всю необходимую информацию.

Я нашел файл с почти идеальным макросом. Используя этот файл, я мог отправлять электронные письма с CC, темой, приложением и текстом сообщения. Что мне действительно нужно, так это возможность отправлять изображение в виде тела сообщения.

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

Я отправляю код с любезным запросом о помощи по добавлению кода, позволяющего мне отправлять текст сообщения в виде изображения.

    Option Explicit

Sub Send_Mails()
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Send_Mails")
Dim i As Integer

Dim OA As Object
Dim msg As Object



Set OA = CreateObject("outlook.application")

Dim last_row As Integer
last_row = Application.CountA(sh.Range("A:A"))

For i = 2 To last_row
Set msg = OA.createitem(0)
msg.To = sh.Range("A" & i).Value
msg.cc = sh.Range("B" & i).Value
msg.Subject = sh.Range("C" & i).Value
msg.Body = sh.Range("D" & i).Value



If sh.Range("E" & i).Value <> "" Then
    msg.Attachments.Add sh.Range("E" & i).Value
End If

msg.send

sh.Range("F" & i).Value = "Sent"

Next i

MsgBox "All the mails have been sent successfully"


End Sub

Заранее благодарю всех, кто помогает!

Каро

Ответы [ 3 ]

1 голос
/ 11 октября 2019

Я использую приведенный ниже код для отправки вложения. Проверьте, работает ли он для вас Код любезно предоставлен @ HirSinghRajput

Set objEmail = objOutlook.CreateItem(olMailItem)
 With objEmail
  .To = Sheets("DataSheet").Cells(itr, 2)' Add "To" Email Id

  .Subject = Sheets("DataSheet").Cells(itr, 3)' Add Subject Line

  .Body = Sheets("DataSheet").Cells(itr, 4)' Add Email Body

  For iAttachmentCol = 5 To 9
   strPath = CStr(Sheets("DataSheet").Cells(itr, iAttachmentCol)) ' Copy the attachment Path

   If strPath <> "" Then' Verify attachment path is empty or not

    .Attachments.Add strPath' Attach the attachment if path is not empty

   End If

  Next

  .Send

0 голосов
/ 11 октября 2019

Вам необходимо прикрепить изображение, а затем установить CID, который вы можете использовать в теле сообщения:

Attachment attachment = newMail.Attachments.Add(@"E:\Pictures\image001.jpg"
    , OlAttachmentType.olEmbeddeditem , null , "Some image display name" );

   string imageCid = "image001.jpg@123";

   attachment.PropertyAccessor.SetProperty(
     "http://schemas.microsoft.com/mapi/proptag/0x3712001E", imageCid);

   newMail.HTMLBody = String.Format("<body><img src=\"cid:{0}\"></body>", imageCid );
0 голосов
/ 11 октября 2019

Я не совсем понимаю, что вы хотите, но у меня есть потенциальное решение. В VBA вы можете использовать Range.CopyPicture(...), что позволяет копировать диапазон в виде изображения в буфер обмена. Немного поработав, вы можете легко сохранить изображение во временном каталоге, а затем использовать файл в своем электронном письме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...