Отправка почты через командную строку или 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 Конфигурации 1cv8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Платные (руб)

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

8400 руб.

20.08.2024    9814    81    35    

90

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 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

16800 руб.

06.12.2023    9400    46    5    

76

SALE! %

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

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

15000 10000 руб.

10.11.2023    11015    40    27    

66

SALE! %

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

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

4800 3840 руб.

14.01.2013    189399    1146    0    

916

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

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

3000 руб.

25.11.2020    24743    250    8    

216

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

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

14400 руб.

29.04.2020    33189    107    152    

73

Архивирование (backup) Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Данная разработка позволит решить вопрос с резервным копированием Ваших баз в автоматическом режиме, расположенных на сервере 1С. Система умеет ставить блокировки на вход, блокировать фоновые задания, принудительно отключать сеансы пользователей. И все это система делает в автоматически при создании бэкапа (или через команду). Выгрузка происходит в родной формат 1С - .dt. Так же система умеет архивировать данные выгрузки с установкой пароля. Умеет менять расширение файла zip или dt на любое указанное вами, что позволит сохранить выгрузки от шифровальщика. Может удалять старые копии выгрузок, оставляя указанное количество резервных копий, начиная с самой поздней. Только для WINDOWS!

6000 руб.

06.11.2012    73181    629    45    

86
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. didkovskij 44 02.10.15 07:54 Сейчас в теме
Аналогичным образом использую blat для отправки уведомлений о наличие свободного места на серверах, их перезагрузки и т.д.
4. jaroslav.h 180 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 204 02.10.15 09:24 Сейчас в теме
А у меня почему-то отправка из 1С 8.2 не взлетела....
3. jaroslav.h 180 02.10.15 10:14 Сейчас в теме
(2) premier, в смысле? тут отправка через 1с-ку не описана, имелось ввиду отправка из ком.строки + повершел
7. premierex 204 05.10.15 13:56 Сейчас в теме
(3) а какая разница какой будет почтовый клиент? Главное в этой теме то, что stunnel выполняет функцию прокси сервера с SSL шифрованием.
Кстати, покопавшись в настройках, удалось-таки настроить работу с почтой через stunnel из 1С. Может, конечно, не совсем в тему публикации, но, повторюсь: в теме публикации главное - отправка почты с SSL шифрованием. А какой почтовый клиент - не важно.
9. jaroslav.h 180 05.10.15 22:38 Сейчас в теме
(7) premier, если вы о ССЫЛКА то где то и на этом ресурсе видел аналогичные способы
10. premierex 204 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 1314 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_ 243 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 180 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)
Оставьте свое сообщение