Буду очень признателен за помощь в таком вопросе.
Из VBA необходимо отправлять письма через power shell.
Если запускать код в powershell, то он отправляет месседж с картинкой в теле:
Но если его переписать в VBA, то он не отправляется. Код (из него даже картинку убрал, но не пропускает):
А еще есть такой код - он более громоздкий, но письмо отправляет, правда в боди проходит только текст, а картинку не понимаю как вставить.
Буду очень признателен за подсказку/решение, как отправить картинку.
Из VBA необходимо отправлять письма через power shell.
Если запускать код в powershell, то он отправляет месседж с картинкой в теле:
Цитата |
---|
$Body = @" <html> This is image 1 <img src='cid:logo.png'> </body> </html> "@ Send-MailMessage -To mymail@mail.ru ` -from mymail@mail.ru` -SmtpServer 111.111.33.3 ` -Subject "Hello" ` -BodyAsHtml -body $body ` -Encoding ‘UTF8’ ` -Attachments "K:\Jobs\logo.png" |
Но если его переписать в VBA, то он не отправляется. Код (из него даже картинку убрал, но не пропускает):
Цитата |
---|
Sub mail() Dim strCmd As String Dim WsShell As Object body = "$Body = @" & Chr(34) & Chr(10) & "This is image 1" & Chr(10) & Chr(34) & "@" & Chr(10) strCmd = body & "Send-MailMessage -To mymail@mail.ru `" _ & " -from mymail@mail.ru `" _ & " -SmtpServer 111.111.33.3 `" _ & " -Subject " & Chr(34) & "Hello" & Chr(34) & " `" _ & " -BodyAsHtml -body $Body `" _ & " -Encoding 'UTF8' `" _ & " -Attachments " & Chr(34) & "K:\Jobs\logo.png" & Chr(34) Set WsShell = CreateObject("WScript.Shell") WsShell.Run "PowerShell -Command " & Chr(10) & strCmd, 0, True Cells(1, 1) = strCmd 'проверка End Sub |
А еще есть такой код - он более громоздкий, но письмо отправляет, правда в боди проходит только текст, а картинку не понимаю как вставить.
Цитата |
---|
Public Sub SendEmail() ActiveWorkbook.SaveCopyAs "C:\Jobs\Отчет_АВТО.xlsm" Dim strCmd As String Dim WsShell As Object текст = " Привет! " _& " Тестовое письмо из power shell. " текст2 = "This is image 1" 'присваиваем значения переменным PowerShell strCmd = strCmd & "$serverSmtp = " & Chr(34) & "111.111.33.3" & Chr(34) & ";" 'strCmd = strCmd & "$port = " & intPort & ";" strCmd = strCmd & "$from = " & Chr(34) & "<" & "mymail@mail.ru" & ">" & Chr(34) & ";" strCmd = strCmd & "$to = " & Chr(34) & "mymail@mail.ru" & Chr(34) & ";" strCmd = strCmd & "$cc = " & Chr(34) & "mymail@mail.ru" & Chr(34) & ";" strCmd = strCmd & "$subject = " & Chr(34) & "Тестовое письмо" & Chr(34) & ";" strCmd = strCmd & "$user = " & Chr(34) & "user" & Chr(34) & ";" strCmd = strCmd & "$pass = " & Chr(34) & "passw" & Chr(34) & ";" 'создаем объект Сообщения Email strCmd = strCmd & "$mes = New-Object System.Net.Mail.MailMessage;" strCmd = strCmd & "$mes.From = $from;" strCmd = strCmd & "$mes.To.Add($to);" strCmd = strCmd & "$mes.cc.Add($cc);" strCmd = strCmd & "$mes.Subject = $subject;" 'отправка в виде HTML страницы strCmd = strCmd & "$mes.IsBodyHTML = $true;" 'отправка с телом письма strCmd = strCmd & "$body = " & Chr(34) & текст2 & Chr(34) & ";" strCmd = strCmd & "$mes.Body = $body;" 'отправка письма с вложением файла strCmd = strCmd & "$file = " & Chr(34) & "C:\Jobs\Отчет_АВТО.xlsm" & Chr(34) & ";" strCmd = strCmd & "$att = New-object Net.Mail.Attachment($file)" & ";" strCmd = strCmd & "$mes.Attachments.Add($att)" & ";" strCmd = strCmd & "$file2 = " & Chr(34) & "K:\Jobs\logo.png" & Chr(34) & ";" strCmd = strCmd & "$att2 = New-object Net.Mail.Attachment($file2)" & ";" strCmd = strCmd & "$mes.Attachments.Add($att2)" & ";" 'создаем связь с SmtpServer strCmd = strCmd & "$smtp = New-Object Net.Mail.SmtpClient($serverSmtp, $port)" & ";" strCmd = strCmd & "$smtp.Credentials = New-Object System.Net.NetworkCredential($user, $pass)" & ";" 'отправляем письмо strCmd = strCmd & "$smtp.Send($mes);" ''освобождаем память strCmd = strCmd & "$att.Dispose();" 'формируем конечную строку скрипта для PowerShell strCmd = "powershell -command " & Replace(strCmd, Chr(34), Chr(39)) ' в скрипте меняем двойные кавычки на одинарные Cells(1, 1) = strCmd 'проверка Set WsShell = CreateObject("WScript.Shell") WsShell.Run strCmd, 0, True 'окно PowerShell скрыто Kill "C:\Jobs\Отчет_АВТО.xlsm" End Sub |
Буду очень признателен за подсказку/решение, как отправить картинку.