Отправка почты через командную строку или powershell

01.10.15

База данных - Инструменты администратора БД

Мне, как и вам, небось, хотелось получать уведомление по электронной почте об успешном исполнении какого-то действия. Например, после сохранении резервной копии файловой БД http://infostart.ru/public/400349/ отправилось по почте уведомление, что «все ок!».
Или же уведомить при наступлении какого-то события, системного или нет, например, доступность сервера из интернета и т.д.

Итак, чтобы отправить с «батника» электронное письмо, нужно качнуть http://sourceforge.net/projects/blat/files/ разархивировать и содержимое папки "…\full" скопировать в папку "C:\Windows\System32", а далее создаем файл send.bat, где пишем

rem Так как мы скопировали туда куда надо файлы архива то ниже строку не меняем
set file_blat=blat.exe
rem Предварительно создаем файл report.txt, где описываем текст сообщения
set file_text=D:\report.txt
rem Предварительно создаем файл log_blat.txt, где будут ложиться логи
set file_log=D:\log_blat.txt
rem SMTP сервер для отправки сообщения, например smtp.mail.ru
set from_server=smtp.inbox.ru
rem Порт SMTP сервера для отправки, например 2525 порт
set from_port=2525
rem Данные пользователя от которого будет отправлено сообщение
set from_mail=login@inbox.ru
rem Данные пользователя от которого отправляется сообщение
set from_name=login@inbox.ru
rem Пароль от почтового ящика пользователя от которого отправляется сообщение
set from_pass=1111
rem Электронный адрес, кому мы отправляем сообщение
set to_mail=login@mail.ru
rem Тема сообщения
set to_subject="Report"
%file_blat% %file_text% -server %from_server%:%from_port% -f %from_mail% -u %from_name% -pw %from_pass% -to %to_mail% -s %to_subject% -log %file_log%

! Хочу обратить внимание на вот эти данные

rem SMTP сервер для отправки сообщения, например, smtp.mail.ru
set from_server=smtp.inbox.ru
rem Порт SMTP сервера для отправки, например 2525 порт
set from_port=2525

Так как почтовики сейчас перевели свои smtp сервера на безопасное соединение, типа SSL, поэтому для успешной отправки по данному соединению нужно еще качнуть вот эту беду https://www.stunnel.org/index.html, которую нужно установить, и при установке можно ставить все по умолчанию, без указания каких то параметров.

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

После установки утилиты нужно через cmd.exe перейти в папку, куда была установлена программа, и выполнить

stunnel –install

чтобы установить программу как службу

stunnel –start

чтобы программа запустилась как служба

! Не закрываем командную строку

Потом, открыть и отредактировать файл

C:\Program Files (x86)\stunnel\stunnel.conf

Например, в моем случаи для майл.ру конфиг выглядит так

[mail-pop3]

client = yes

accept = 127.0.0.1:110

connect = pop.mail.ru:995

[mail-smtp]

client = yes

accept = 127.0.0.1:587

connect = smtp.mail.ru:465

сберечь отредактированный файл, а далее в незакрытом ранее терминале выполняем

stunnel –reload

этим самым мы обновляем конфигурационный файл.

Ну, а теперь вернемся к указанию SMTP сервера и порта для отправки почты с командной строки, а именно, заменяем

rem SMTP сервер для отправки сообщения, например smtp.mail.ru
set from_server=smtp.inbox.ru
rem Порт SMTP сервера для отправки, например 2525 порт
set from_port=2525

нами ранее строки в файле send.bat на

rem Теперь SMTP сервер это наш компьютер

set from_server=127.0.0.1

rem Порт, взятый из stunnel.conf

set from_port=587

Вот и все, кидаем этот «батник» в Планировщик заданий, привязав к какому то событию, или вставляем все содержимое из send.bat в свой батник, например, который делает что-то полезное, и будет вам уведомление, что что-то полезное выполнилось, в моем случае вышло, что один «батник» вызывается Планировщиком, который сначала архивирует файловую базу БД, отправляет БД на фтп сервер и потом отправляет мне сообщение о выполнении.


 

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

Создадим файл name.ps1 куда поместим

$EmailFrom = "Электронный адрес отправителя"

$EmailTo = " Электронный адрес получателя"

$Subject = "Тема сообщения"

$Body = "Текст сообщения"

$SMTPServer = "127.0.0.1 \ так как и выше, нужно использовать для отправки stunnel"

# 587 здесь иммется ввиду порт, см. выше о stunnel

$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)

$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("Электронный адрес отправителя", "Пароль отправителя");

$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

Send-MailMessage -From $EmailFrom -To $EmailTo  -Subject $Subject -Body $Body -SmtpServer $SMTPServer

E-MAIL Почта cmd Powershell

См. также

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    26526    174    88    

168

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

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

15000 руб.

10.11.2023    14135    60    33    

79

SALE! 10%

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 18.09.2024, версия 1.2

19200 17280 руб.

06.12.2023    13163    57    8    

86

SALE! 50%

Мессенджеры и боты SMS рассылки Email рассылки Пользователь Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)

Расширение 1С с полным набором инструментов для качественных транзакционных, триггерных и маркетинговых рассылок Email, SMS, WhatsApp, Telegram. Даже простые уведомления об оплате счетов способны существенно упростить сбор дебиторской задолженности. Применение всех возможностей прямого маркетинга выводит коммуникацию с клиентами, уровень сервиса и лояльность на новый уровень.

4800 2400 руб.

07.04.2014    87214    56    199    

141

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    35953    117    152    

81

Взаиморасчеты Email рассылки Акт сверки Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Платные (руб)

Внешняя обработка для Бухгалтерии 3.0 - позволяет автоматически формировать документы «Акт сверки расчетов» с контрагентами за выбранный период с последующей фоновой отправкой на почту контрагента.

4800 руб.

25.11.2020    25978    278    9    

240
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. didkovskij 44 02.10.15 07:54 Сейчас в теме
Аналогичным образом использую blat для отправки уведомлений о наличие свободного места на серверах, их перезагрузки и т.д.
4. jaroslav.h 182 02.10.15 10:23 Сейчас в теме
(1) didkovskij, поделитесь каким образом вычисляете окончания свободного места?
8. BenjaminFranklin 05.10.15 14:10 Сейчас в теме
(4) в cmd можно так
FOR /F "skip=2 delims=" %a IN ('fsutil volume diskfree c:') DO @SET str=%a
ECHO %str:~32%

на выходе будет строка с числом определяющим остаток свободного места на диске с: в байтах.
для МБ делим это число два раза на 1024. для ГБ три раза.
Pyhar; jaroslav.h; +2 Ответить
5. ashvik 02.10.15 11:10 Сейчас в теме
2. premierex 207 02.10.15 09:24 Сейчас в теме
А у меня почему-то отправка из 1С 8.2 не взлетела....
3. jaroslav.h 182 02.10.15 10:14 Сейчас в теме
(2) premier, в смысле? тут отправка через 1с-ку не описана, имелось ввиду отправка из ком.строки + повершел
7. premierex 207 05.10.15 13:56 Сейчас в теме
(3) а какая разница какой будет почтовый клиент? Главное в этой теме то, что stunnel выполняет функцию прокси сервера с SSL шифрованием.
Кстати, покопавшись в настройках, удалось-таки настроить работу с почтой через stunnel из 1С. Может, конечно, не совсем в тему публикации, но, повторюсь: в теме публикации главное - отправка почты с SSL шифрованием. А какой почтовый клиент - не важно.
9. jaroslav.h 182 05.10.15 22:38 Сейчас в теме
(7) premier, если вы о ССЫЛКА то где то и на этом ресурсе видел аналогичные способы
10. premierex 207 07.10.15 09:06 Сейчас в теме
(9) да, в данном случае я об этом. И на инфостарте, кстати, тоже нашёл пример.
В тему публикации: есть ещё один способ отправки электронной почты из командной строки - объект Windows CDO.Message.
С его помощью также можно отправлять почту, используя шифрование. Я, например, делаю это с помощью Windows Script Host.
Пишется скрипт на jscript или vbscript (я предпочитаю jscript). В него в качестве аргументов передаем параметры (в примере они объявлены как переменные, но их можно и как аргументы передавать). И так же, как описано выше, создаем задание в планировщике, где вызываем csript.exe путь_к_нашему_скрипту аргументы. Файл csript.exe находится в системном каталоге Windows, так что полный путь до него можно и не указывать.
Прикрепленные файлы:
sendmail.js
7OH; le_; +2 Ответить
6. blackhole321 1315 04.10.15 17:45 Сейчас в теме
$SMTPServer = "127.0.0.1 \ так как и выше, нужно использовать для отправки stunnel"

Для использование ssl в случае PowerShell, stunnel не требуется. Используйте $SMTPClient.EnableSsl = $true
https://msdn.microsoft.com/ru-ru/library/system.net.mail.smtpclient.enablessl(v=vs.110).aspx
jaroslav.h; +1 Ответить
11. le_ 251 07.10.15 09:22 Сейчас в теме
Через CDO.Message, по-моему, удобнее и устанавливать ничего дополнительно не нужно.
Вот пример с шифрованием пароля в скрипте.
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Тема сообщения"
objMessage.From = "my_acc@gmail.com"
objMessage.To = "my_acc@gmail.com"
objMessage.HTMLBody = "Текст сообщения."

objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = "smtp.gmail.com"
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = 465
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value = 1
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = true
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").Value = "my_acc@gmail.com"
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value = D("sЎRЮ¬ЩgT", "'njghjcnjgfhjkm")
	
objMessage.Configuration.Fields.Update

objMessage.Send

Function D(str,key)
 Dim lenKey, KeyPos, LenStr, x, Newstr
 
 Newstr = ""
 lenKey = Len(key)
 KeyPos = 1
 LenStr = Len(Str)
 
 str=StrReverse(str)
 For x = LenStr To 1 Step -1
      Newstr = Newstr & chr(asc(Mid(str,x,1)) - Asc(Mid(key,KeyPos,1)))
      KeyPos = KeyPos + 1
      If KeyPos > lenKey Then KeyPos = 1
      Next
      Newstr=StrReverse(Newstr)
      D = Newstr
End Function
Показать
Прикрепленные файлы:
Отправка почты CDO.vbs
dima532301; jaroslav.h; +2 Ответить
12. jaroslav.h 182 07.10.15 09:27 Сейчас в теме
(11) le_, отлично, пускай множество вариантов отправки будет приведено, спасибо
viptextil; +1 Ответить
14. user966382 27.04.18 10:53 Сейчас в теме
(11)
//schemas.microsoft.com/cdo/configuration/sendpassword").Value = D("sЎRЮ¬ЩgT", "'njghjcnjgfhjkm")

Я так понял что это не реальный а уже зашифрованный пароль, а как его получить чтобы вбить в эту строку?
13. viptextil 42 06.05.16 09:35 Сейчас в теме
Ну, тогда в комментах тоже отмечусь. Для отправки использую консольную программу отправки почты Mailsend она умеет работать по ssl без stunnel.
Tangram; jaroslav.h; +2 Ответить
15. user1338585 08.02.22 23:29 Сейчас в теме
Через павершел получилось отправить через яндекс почту напрямую:
$EmailTo = "po4ta@mail.ru"
$EmailFrom = "PowerShell mymail@yandex.ru"
$Subject = "Отправка из PowerShell"
$Body = "Тестовое сообщение, отправленное из командной строки PowerShell"
$SMTPServer = "smtp.yandex.ru"
$filenameAndPath = "C:\Users\777\Downloads\003435.pdf"
$SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$Body)
$attachment = New-Object System.Net.Mail.Attachment($filenameAndPath)
$SMTPMessage.IsBodyHTML=$true
$SMTPMessage.Attachments.Add($attachment)
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("mymail@ya.ru", "mymail123");
$SMTPClient.Send($SMTPMessage)
Оставьте свое сообщение