smtpsender — маленькая, но гибкая программа для отправки писем из командной строки (с мультиаттачем файлов, поддержкой SSL/TLS и прокси, выполнением скриптов)

Всем привет! В этот раз представляю вашему вниманию небольшую программу для отправки почты из консоли. Она умеет работать через 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 <путь[;имя]> — с помощью этого параметра можно прикрепить к сообщению файл. Если файл не будет найден, то программа ничего не выведет, но и не прикрепит ничего. Можно указать произвольное имя файла через точку с запятой. Если этого не сделать, то будет использовано просто имя файла. Также можно несколько раз указывать этот параметр, тогда все указанные файлы будут прикреплены к письму.

Пример:

Пример отправки файлов. Два файла указаны в файле с параметрами, остальные два приписаны прям в консоли
Пример отправки файлов. Два файла указаны в файле с параметрами (это можно увидеть на картинке у команды -load_data), остальные два приписаны прям в консоли.
Все четыре файла успешно получены!
Все четыре файла успешно получены!

-type [text|html] — тип сообщения. По-умолчанию оно простое текстовое. Если же указать 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 порту. Это мы и указываем в файле с параметрами.Загрузка текста из файла и использование socks5 прокси

А вот тут уже видим, что.. Ну, тут ещё предыдущие письма, и как раз виден результат загрузки текста сообщения из файла file1.txt, ну и ниже, следующее письмо — это то самое, которое было отправлено через Socks5 туннель. Всё работает, как видим 🙂

Текст сообщения загружен из файла и письмо, посланное через прокси!

А вот и сам файл file1.txt и его содержимое, которое успешно отправилось и пришло )

содержимое файла file1.txt
содержимое файла 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, скачайте свежую версию

Вам также может понравиться

About the Author: karamush

20 комментариев

  1. [error]: SMTP: Не удалось подключится к smtp-серверу. проверьте адрес сервера и настройки прокси (если используется он). SocketError: SSL/TLS support is not compiled!

    прокси в настройках нет

    1. Тут дело не в прокси, что-то пошло не так с поддержкой SSL.

      Возможно, у вас в системе отсутствуют нужные библиотеки. Можно скачать их тут http://shpirat.net/bin/ssl_libs.zip и положить в папку с программой, либо в папку system32.

      Если проблема не исчезнет, напишите ваши параметры подключения (без логина и пароля, естественно), посмотрим, может косяк в самой программе, исправим, если что)

      1. Привет! у меня такая же ошибка [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 и заработало. А на другом компе не могу настроить.

      2. Здравствуйте! с 1 марта на 4 пк та же ошибка пошла, пробовал уже разные серверы отправки, не помогает. Можете продублировать файл ssl_libs.zip
        Уже нет по ссылке

  2. привет
    у меня почему-то не заработала программа когда в пароле использовались заглавные латинские буквы, проверял на mail.ru и yandex.ru сервере

    1. Привет!
      Программе должно быть без разницы, в каком регистре символы в пароле )
      Но спасибо за комментарий, я проверю и отпишусь, как что-то выясню!

      И ещё для уточнения один вопрос: пароль передаётся в открытом виде или в зашифрованном?

    2. Всё, подправил ошибочку )
      Действительно, он принимал пароли только в нижнем регистре, т.к. там была небольшая ошибка при получении параметров )
      Но теперь всё исправлено, exe-шник обновил, можно заново скачать!

  3. Добрый день, ваша программа оказалась очень полезной для выяснения ряда ошибок при отправки писем. Спасибо!
    в ходе работы наткнулась на такую «фичу»: при формирования письма на несколько адресов, в поле «кому» полученного письма отображается только один адрес — первый из списка.
    то есть если указываешь -to [email protected],[email protected],[email protected]
    письмо получают все три адреса, но в адресе у всех указан [email protected]

    1. Добрый день! Спасибо за отзыв, очень рады, что программа оказалась полезной )
      А по поводу вашего вопроса — да, не доглядел. Так происходит потому, что остальные получатели (кроме первого) находятся в поле «скрытая копия», поэтому они и не видны больше никому, кроме отправителя.
      Это нормальное поведение почтового сервера 🙂
      Попробуйте зайти в почту, используя учётную запись, с которой производилась отправка писем, в папке «отправленные» вы увидите письма, которые вы отправляли, там же и будет в поле «скрытая копия» остальные адресаты.
      Спасибо за указание данного недочёта. В скором времени исправлю, как исправлю, выложу новую версию и отпишусь вам снова )

    2. Готово!
      Программу обновил, можете скачать снова её )
      Действительно, был недочёт в разборе списка получателей. Но теперь всё работает и письма приходят всем адресатам, при этом каждый видит список получателей 🙂

  4. Какая версия Synapse (и Delphi) использовалась? — хочу попробовать скомпилировать (и может чем-то помочь проекту, попробовать например поддержку FreePascal добавить).

    1. Прошу прощения, что сразу не ответил, не увидел комментарий или занят был.. не помню точно, но!

      Используется Delphi 7, а Synapse — последняя версия от 2012 года, что на сайтике у них тут: https://www.ararat.cz/synapse/doku.php/download

      За помощь спасибо! Сейчас исходник, что в репозитории, немножко устарел, так как появились новые крутые штуки 🙂

      Дело в том, что один из пользователей предложил добавить некоторый функционал, который, я думаю, будет и остальным тоже весьма полезен! Так что закончу очередной кусочек, выложу свежую версию, раз уж она пригождается )
      Немножко проспойлерю: теперь есть возможность выполнять команды из настроек или из файла с командами до отправки и после отправки письма! Но в этих командах можно также использовать некоторые переменные. А нужно это для того, чтобы выполнить, возможно, в системе какие-нибудь действия, прежде, чем отправить письмо. Например, заархивировать что-то, приложить архив к письму, а после отправки удалить его )

  5. Ошибка (прокси не используется, сервер использует ssl протокол, 465 порт):
    [error]: SMTP: Не удалось подключиться к smtp-серверу. Проверьте адрес сервера и настройки прокси(если используется он). SocketError: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version

  6. читает кто эту тему еще или нет, но у меня почему то не работает отправка, где и как проверить наличие ошибок?

Добавить комментарий

Войти с помощью: 

Ваш адрес email не будет опубликован. Обязательные поля помечены *