Всем привет! В этот раз представляю вашему вниманию небольшую программу для отправки почты из консоли. Она умеет работать через HTTP, Socks4 и Socks5 прокси, поддерживает аттач нескольких файлов, аттач файлов по маске, может запускать другие команды ДО и ПОСЛЕ отправки письма, умеет читать и использовать параметры отправки из файла, чтобы не приходилось каждый раз передавать кучу параметров при вызове программы. Просто иной раз нужно автоматизировать какое-либо действие, а потом получить отчёт по почте, вот тут и бывает порой необходимость в отправке почты из консоли.
Но! Обо всём по порядку)
Получить справку по командам можно указав параметр -h. Вот так оно всё и выглядит:
Внимание! Свежая версия программы и дополнительная, более актуальная информация находятся в конце статьи.
И ещё внимание! Недавно (октябрь 2021) у нас появился Телеграм-бот для получения уведомлений, и их тоже легко и просто можно отправлять из консоли и вообще, откуда угодно. Возможно, именно это тебе нужно, а не почтовик 😉
Почитать про Телеграм-бота и про примеры использования можно в этой статье.
Пример отправки письма через SMTP-сервер Google, через SSL соединение:
А вот и письмецо 🙂
Параметры:
-make_data <путь к файлу> — этот параметр создаёт пустой файл-заготовку для следующего параметра -load_data) Сам файл будет выглядеть примерно вот так:
-load_data <путь к файлу> — этот параметр загружает созданный ранее файл с параметрами для отправки писем. Можно указать как полный, так и относительный путь к файлу. Если загрузить не удастся, программа сообщит об этом.
Берём и вписываем нужные данные в нужные параметры. Я изменил синтаксис в Notepad++, чтобы хоть чуток по-веселее было смотреть эти скриншотики, а то всё сливалось в единую непонятную массу, а теперь хоть комментарии и параметры различаются 🙂
Тут есть одна хитрость. Те параметры, которые будут переданы программе напрямую при её вызове, будут иметь более высокий приоритет. Поэтому, например, можно запилить файл со всеми нужными параметрами, а потом вызывать программу, лишь указывая адресата или текст сообщения с темой. Удобно ж ведь! 🙂
-from <email> — в этом параметре указывается отправитель. Можно указать так: Имя <[email protected]> и тогда получатель или получатели увидят в первую очередь имя отправителя. Ну, хотя.. Это ж и так известно и понятно, зачем об этом писать… )
-to <email or email list> — тут можно указать получателя. Или получателей. Указывать можно в таком же формате, как и было показано в предыдущем параметре, а если нужно послать письмо нескольким адресатам, то можно указать их список через запятую.
-subject <текст> — тема сообщения.
-body <текст> — текст сообщения. Естественно, если там будет несколько слов, то нужно взять значение этого параметра в кавычки, как и в любой другой консольной программе. Если нужно перевести на новую строку, то можно написать \n прям там. Если задавать значение параметра в файле, то кавычки не нужны. Если указан тип сообщения html, а не text, то тут уже нужно будет использовать html-теги для форматирования письма и <br /> для перевода строки.
-load_body <имя файла> — загружает текст сообщения из файла. Если файл не будет найден, то программа об этом сообщит. Если этот параметр указан, то параметр -body будет проигнорирован. Кстати! Чтобы программа сработала как надо, нужно указать один из этих параметров. Любой из них. Иначе будет ошибка… ) Но программа вообще сама сообщает о неполадках, если что… )
Вот, что произойдёт, если не указать текст сообщения:
-attach <путь[;имя]> — с помощью этого параметра можно прикрепить к сообщению файл. Если файл не будет найден, то программа ничего не выведет, но и не прикрепит ничего. Можно указать произвольное имя файла через точку с запятой. Если этого не сделать, то будет использовано просто имя файла. Также можно несколько раз указывать этот параметр, тогда все указанные файлы будут прикреплены к письму.
Пример:
-type [text|html] — тип сообщения. По-умолчанию оно простое текстовое. Если же указать html, то тогда и в самом письме нужно использовать html теги.
Естественно, что все эти параметры можно было указать и напрямую при вызове программы, просто в таком виде их удобнее читать )
-server <ip или имя хоста> — ну, тут и так понятно, думаю 🙂
-port <номер порта> — порт для подключения. Внимание! Обычно это 25, но если использовать SSL, то порт будет другой )
-user <имя пользователя> — имя пользователя для авторизации на smtp сервере. Если вдруг не нужно, то можно не заполнять. Это не обязательный параметр.
-pass <пароль> — пароль от имени пользователя для авторизации на smtp.
-cpass <зашифрованный пароль> — тут нужно передавать пароль, созданный следующей командой ) А сделано это для того, чтобы не писать пароль от учётки в открытом виде. Ведь мало ли… Вдруг в батнике это будет или ещё где-то, а кто-то увидит и сможет использовать… ) Можно передать один из двух вариантов паролей. Но! Если будут указанны оба, и в открытом виде и в зашифрованном, то будет всё равно использоваться открытый пароль. Поэтому, если нужно использовать зашифрованный, то нужно не указывать ничего в параметре -pass. И вообще, открытые пароли — это не хорошо в любом случае!
-crpass <обычный пароль> — этой командой можно немножко зашифровать обычный пароль, а потом передавать его в параметре -cpass.
Пример:
На первый взгляд кажется, что это обычный base64, но на самом деле это немножко не так… 🙂
-ssl — использование SSL. Если указать, то будет использовано, если не указывать, то не будет! Надо же:) Также и в файле с параметрами. Если не нужно, то можно закомментировать эту строку или вообще её удалить. И нужно быть внимательным, ведь при использовании SSL отличается и порт, к которому нужно подключаться.
Также, внимание! Для работы ssl необходимы две библиотечки: libeay32.dll и ssleay32.dll. Они обычно есть в системе, но могут и не быть. Поэтому можно их вручную скачать и поместить в папку с программой или в system32, ну или можно положить их куда угодно, главное, чтоб программа могла их найти в путях поиска или через переменную PATH. Вот ссылка на архив с этими двумя библиотечками. Но лучше поискать в интернете, чтобы более свежие версии найти и поставить, если что.. )
-proxy [тип прокси] — использовать прокси. Если указать просто параметр -proxy без ничего, то будет использован HTTP-прокси. Ну, а можно и указать http, socks4 или socks5, и тогда будет использован соответствующий тип прокси.
-proxy_addr <адрес прокси> — адрес прокси в таком формате: proxy_server:port. Или же, если нужно ещё и авторизовываться, то так: user:pass@proxy_server:port.
Пример :
Здесь у меня просто PuTTY, подключенный к одному из серверов, в котором я настроил Socks5 прокси на 9999 порту. Это мы и указываем в файле с параметрами.
А вот тут уже видим, что.. Ну, тут ещё предыдущие письма, и как раз виден результат загрузки текста сообщения из файла file1.txt, ну и ниже, следующее письмо — это то самое, которое было отправлено через Socks5 туннель. Всё работает, как видим 🙂
А вот и сам файл file1.txt и его содержимое, которое успешно отправилось и пришло )
Вот вроде и всё.
А! Самое главное!
Вот сама программа (устаревшая версия, ниже есть новее): smtpsend.exe
А вот её исходный код на bitbucket-е: https://bitbucket.org/karamush/smtpsender
Там же, в репозитории, в загрузках будут выкладываться версии программы. И все изменения в исходниках!
А вот ещё разок ссылка на SSL-библиотеки: ssl_libs.zip
UPD [26.01.016]: сделал небольшую графическую программу, чтобы генерировать пароли для этого почтовика. Взять можно вот тут: pass_crypt.exe
Выглядит она вот так:
UPD [05.02.018]: новая версия программы, в которой есть поддержка выполнения команд до и после отправки писем (можно использовать, например, для архивации файлов перед отправкой, а после отправки можно удалить временный архив), поддержка переменных и возможность изменять параметры программы в выполняемых скриптах, поддержка поиска и аттача файлов по маске (сразу кучу можно), поддержка регулярных выражений в скриптах (может быть полезно для извлечения части имени файла и ещё чего угодно).
Ссылка на репозиторий обновлена, теперь он будет поддерживаться и все изменения будут сразу доступны в нём. Здесь, в статье, буду дополнять UPD-ейты, но версии программ (текущая: 0.4) и исходники можно будет смотреть в репозитории.
Скачать текущую версию программы можно тут: smtpsend_v0.4
[UPD 13.03.019]: теперь программа возвращает операционной системе код возврата 1, если возникли ошибки при отправке или парсинге параметров, и 0, если всё прошло хорошо. Раньше всегда 0 возвращался, будто бы и не было ошибок.
Скачать эту свежую версию можно тут: smtpsend_v0.4_retcode.exe
[UPD 29.09.020]: вышла версия 0.5! Теперь при аттаче файлов по маске или через параметры -attach указывается статус добавления каждого файла: добавлен успешно или же не найден… 🙂
[UPD 10.08.2021]: исправлена ошибка с аттачем файлов по маске. Если указать маску без папки, файлы искались в корне диска, а не в текущей директории. Теперь всё работает как надо. И теперь актуальная версия программы находится в репозитории под именем smtpsend.exe, без всяких там версий и т.д.).
[UPD 07.07.2022]: исправлена ошибка, когда при аттаче файлов по маске *.* (все файлы) и включенным параметром -nosend_without_files, письмо всё равно уходило, даже если файлов в папке не было. Теперь письмо не отправляется если файлов нет 🙂
АКТУАЛЬНЫЕ ЗАГРУЗКИ
Скачать свежую версию можно в репозитории (файл smtpsend.exe всегда актуальный): https://bitbucket.org/karamush/smtpsender/downloads/
Или вот прямая ссылка на загрузку актуальной последней версии программы: smtpsend.exe (эта ссылка меняться больше не будет, она постоянная, но всегда свежая)
Если у кого-то что-то не будет работать или найдутся какие-то ошибки, то смело пишите в комментариях или в отзывах, с радостью приму пожелания и постараюсь исправить какие-то недочёты и ошибочки, но сначала загляните в F.A.Q. в конце статьи, ведь ваша проблема может быть уже известной)
Если же долго не отвечаю, то пишите напрямую на почту: zbcdefgh(HotDog)gmail.com
Или же в телеграм, мой ник там @karamush .
Надеюсь, что кому-то это пригодится и будет нужно, чтобы труды (время всё же было затрачено) не пропадали зря 🙂
F.A.Q. или список частых вопросов и ответов
- Вылетает ошибка «503 5.5.4 send AUTH command first«, что делать?
- Нужно проверить логин и пароль, но если они 1000% верны и если речь идёт о яндексе или гугле, то в случае с гуглом нужно разрешить доступ небезопасным приложениям, а в случае с яндексом добавить пароль приложения. Сделали они это для безопасноти, поэтому придётся совершить больше шагов для работы программы
- не прикрепляются файлы по маске из текущей директории
- это была ошибка программы, уже исправлена в UPD 10.08.2021, скачайте свежую версию
Одмена на мыло!!!!
Андрей Коромыло ответь на почту [email protected] вк тебя не сыщешь. Есть дело 🙂
Написал 🙂
[error]: SMTP: Не удалось подключится к smtp-серверу. проверьте адрес сервера и настройки прокси (если используется он). SocketError: SSL/TLS support is not compiled!
прокси в настройках нет
Тут дело не в прокси, что-то пошло не так с поддержкой SSL.
Возможно, у вас в системе отсутствуют нужные библиотеки. Можно скачать их тут http://shpirat.net/bin/ssl_libs.zip и положить в папку с программой, либо в папку system32.
Если проблема не исчезнет, напишите ваши параметры подключения (без логина и пароля, естественно), посмотрим, может косяк в самой программе, исправим, если что)
на какой адрес отправить?
Большое спасибо за очень нужную программульку. Все работает!!!
Привет! у меня такая же ошибка [error]: SMTP: Не удалось подключиться к smtp-серверу. Проверьте адрес сервера и настройки прокси(если используется он). SocketError: SSL/TLS support is not compiled!
OpenSSL устанавливал, все галочки стоят, добавлял переменную, отключал брандмауэр, защитник. Копировал файлы из архива dll. Запускал из system32 и из других папок — результата 0. На другом компьютере работает, windows 10 такая же. Не могу найти в чем проблема. Помоги!!! Код отправляю такой
smtpsend.exe -server smtp.gmail.com -port 465 -subject Test!:) -from «Комп Работа » -to *****@yandex.ru -body «Хей!\n\nКомпьютер перезагрузился!» -user ******@gmail.com -pass ***** -ssl
На другом компе запустил, заработало без танцев с бубном, просто скачал , скинул в system32 и заработало. А на другом компе не могу настроить.
Здравствуйте! с 1 марта на 4 пк та же ошибка пошла, пробовал уже разные серверы отправки, не помогает. Можете продублировать файл ssl_libs.zip
Уже нет по ссылке
привет
у меня почему-то не заработала программа когда в пароле использовались заглавные латинские буквы, проверял на mail.ru и yandex.ru сервере
Привет!
Программе должно быть без разницы, в каком регистре символы в пароле )
Но спасибо за комментарий, я проверю и отпишусь, как что-то выясню!
И ещё для уточнения один вопрос: пароль передаётся в открытом виде или в зашифрованном?
Всё, подправил ошибочку )
Действительно, он принимал пароли только в нижнем регистре, т.к. там была небольшая ошибка при получении параметров )
Но теперь всё исправлено, exe-шник обновил, можно заново скачать!
Добрый день, ваша программа оказалась очень полезной для выяснения ряда ошибок при отправки писем. Спасибо!
в ходе работы наткнулась на такую «фичу»: при формирования письма на несколько адресов, в поле «кому» полученного письма отображается только один адрес — первый из списка.
то есть если указываешь -to [email protected],[email protected],[email protected]
письмо получают все три адреса, но в адресе у всех указан [email protected]
Добрый день! Спасибо за отзыв, очень рады, что программа оказалась полезной )
А по поводу вашего вопроса — да, не доглядел. Так происходит потому, что остальные получатели (кроме первого) находятся в поле «скрытая копия», поэтому они и не видны больше никому, кроме отправителя.
Это нормальное поведение почтового сервера 🙂
Попробуйте зайти в почту, используя учётную запись, с которой производилась отправка писем, в папке «отправленные» вы увидите письма, которые вы отправляли, там же и будет в поле «скрытая копия» остальные адресаты.
Спасибо за указание данного недочёта. В скором времени исправлю, как исправлю, выложу новую версию и отпишусь вам снова )
Готово!
Программу обновил, можете скачать снова её )
Действительно, был недочёт в разборе списка получателей. Но теперь всё работает и письма приходят всем адресатам, при этом каждый видит список получателей 🙂
Спасибо за обновление! Все работает 🙂
Пожалуйста! И вам спасибо, что нашли данную ошибочку и что она теперь исправлена 🙂
Какая версия Synapse (и Delphi) использовалась? — хочу попробовать скомпилировать (и может чем-то помочь проекту, попробовать например поддержку FreePascal добавить).
Прошу прощения, что сразу не ответил, не увидел комментарий или занят был.. не помню точно, но!
Используется Delphi 7, а Synapse — последняя версия от 2012 года, что на сайтике у них тут: https://www.ararat.cz/synapse/doku.php/download
За помощь спасибо! Сейчас исходник, что в репозитории, немножко устарел, так как появились новые крутые штуки 🙂
Дело в том, что один из пользователей предложил добавить некоторый функционал, который, я думаю, будет и остальным тоже весьма полезен! Так что закончу очередной кусочек, выложу свежую версию, раз уж она пригождается )
Немножко проспойлерю: теперь есть возможность выполнять команды из настроек или из файла с командами до отправки и после отправки письма! Но в этих командах можно также использовать некоторые переменные. А нужно это для того, чтобы выполнить, возможно, в системе какие-нибудь действия, прежде, чем отправить письмо. Например, заархивировать что-то, приложить архив к письму, а после отправки удалить его )
Ошибка (прокси не используется, сервер использует ssl протокол, 465 порт):
[error]: SMTP: Не удалось подключиться к smtp-серверу. Проверьте адрес сервера и настройки прокси(если используется он). SocketError: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
читает кто эту тему еще или нет, но у меня почему то не работает отправка, где и как проверить наличие ошибок?