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

Всем привет! В этот раз представляем вашему вниманию небольшую программу для отправки почты из консоли. Она умеет работать через HTTP, Socks4 и Socks5 прокси, поддерживает аттач нескольких файлов, аттач файлов по маске, может НЕ отправлять письмо при отсутствии аттачей, умеет сохранять отправленные письма в любую выбранную IMAP-папку, может запускать всякие системные команды ДО и ПОСЛЕ отправки письма, умеет читать и использовать параметры отправки из файла, чтобы не приходилось каждый раз передавать кучу параметров при вызове программы. Просто иной раз нужно автоматизировать какое-либо действие, а потом получить отчёт по почте, вот тут и бывает порой необходимость в отправке почты из консоли.

Но! Обо всём по порядку)

Получить справку по командам можно указав параметр -h. Вот так оно всё и выглядит:
Отображение встроенной справки по командам (это версия 0.1, сейчас команд куда больше 😏)

Внимание! Свежая версия программы с кучей новых штук, и дополнительная, более актуальная информация находятся в конце статьи 😏

Пример отправки письма через 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, но на самом деле это немножко не так… 🙂

[UPD 26.02.2025] — теперь поддерживается сохранение писем по IMAP в указанную папку 🤩😎

-imap:save — включить сохранение копий отправленных писем по IMAP (сохраняться будут в папку в параметре imap:folder, но по-умолчанию это Sent)

-imap:server — сервер IMAP. Параметр не обязательный. Если не указать, то будет взят из smtp сервера, но с заменой smtp на imap. Например: smtp.yandex.com станет imap.yandex.com, потому что обычно у почтовых серверов домен совпадает, отличается только поддомен для smtp и imap)

-imap:port     — порт для IMAP. По-умолчанию = 993
-imap:user     — имя пользователя для IMAP. Если не указать, будет взято из параметра -user
-imap:pass     — пароль для IMAP. Если не указать, будет взято из пароля для smtp (из -pass или -crpass)

-imap:folder  — папка для сохранения копии отправленного письма. По-умолчанию это Sent, но на разных почтовых серверах может быть по-разному, так что лучше сначала просмотреть список папок на почтовом сервере следующей командой:

-imap:folder_list — показать список папок на почтовом сервере. Список папок приходит в кодировке UTF7, поэтому показаны будут и декодированные названия, и их raw-значения. Указать в imap:folder можно любое имя папки, оно автоматически закодируется в UTF-7, так что проблем не будет 🙂

Пример списка папок на почтовом сервере, показанный командой imap:folders_list
Пример списка папок на почтовом сервере, показанный командой imap:folders_list

Разумеется, все эти параметры также можно задать в файле настроек (кроме, разве что, -imap:folders_list, потому что это не параметр, а команда), но обычно вполне достаточно добавить всего два параметра, чтоб всё заработало: включить сохранение параметром imap_save=1 и указать папку для сохранения, например, imap_folder=Отправленные

-ssl — использование SSL. Если указать, то будет использовано, если не указывать, то не будет! Надо же:) Также и в файле  с параметрами. Если не нужно, то можно закомментировать эту строку или вообще её удалить. И нужно быть внимательным, ведь при использовании SSL отличается и порт, к которому нужно подключаться. Работает и для SMTP, и для IMAP подключения сразу. Отдельного параметра для imap нет (пока что, но вроде и не нужен).

Важный момент, внимание! Для работы 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, письмо всё равно уходило, даже если файлов в папке не было. Теперь письмо не отправляется если файлов нет 🙂

[UPD 26.02.2025]: добавлена поддержка сохранения копий писем через IMAP, за что спасибо человеку из вот этого комментария 🖤
Разобрались с IMAP, доработали программу, да и статья обновлена, так что можно выше, в списке параметров найти всё нужное для активации IMAP.
Скачать именно эту версию можно по этой ссылке: smtpsend_v0.8.exe, но ниже есть постоянная ссылка на актуальную версию 🙂 

АКТУАЛЬНЫЕ ЗАГРУЗКИ

Скачать свежую версию можно в репозитории (файл smtpsend.exe всегда актуальный): https://bitbucket.org/karamush/smtpsender/downloads/

Или вот прямая ссылка на загрузку актуальной последней версии программы: smtpsend.exe   (эта ссылка меняться больше не будет, она постоянная, но всегда свежая)

Внимание! Если вдруг программа ругается на SSL, то скачайте вот этот архив и положите его содержимое рядом с программой.


Если у кого-то что-то не будет работать или найдутся какие-то ошибки, то смело пишите в комментариях или в отзывах, с радостью приму пожелания и постараюсь исправить какие-то недочёты и ошибочки, но сначала загляните в F.A.Q. в конце статьи, ведь ваша проблема может быть уже известной)
Если же долго не отвечаю, то пишите напрямую на почту: zbcdefgh(HotDog)gmail.com

Или же в телеграм, мой ник там @karamush .

Надеюсь, что кому-то это пригодится и будет нужно, чтобы труды (время всё же было затрачено) не пропадали зря 🙂


F.A.Q. или список частых вопросов и ответов

  • Вылетает ошибка «503 5.5.4 send AUTH command first«, что делать?
  • Нужно проверить логин и пароль, но если они 1000% верны и если речь идёт о яндексе или гугле, то в случае с гуглом нужно разрешить доступ небезопасным приложениям, а в случае с яндексом добавить пароль приложения. Сделали они это для безопасноти, поэтому придётся совершить больше шагов для работы программы
  • не прикрепляются файлы по маске из текущей директории
  • это была ошибка программы, уже исправлена в UPD 10.08.2021, скачайте свежую версию
  • почему я не вижу письма в папке «Отправленные», если зайти через браузер или другую полноценную почтовую программу???
  • потому что используется протокол SMTP для простой отправки писем, а сохранение через IMAP не было. Но теперь программа доработана, есть поддержка сохранения копий писем в любую выбранную папку на почтовом сервере через IMAP, и почитать об этом можно в UPD 26.02.2025

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

About the Author: karamush

24 комментария

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

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

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

      Возможно, у вас в системе отсутствуют нужные библиотеки. Можно скачать их тут https://shpirat.net/bb/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. читает кто эту тему еще или нет, но у меня почему то не работает отправка, где и как проверить наличие ошибок?

    1. Добрый день! Оказалось, что на сайте сломалась отправка писем. Это забавно, учитывая то, что комментарий пишется под статьёй про отправку почты 🙂

      Вопрос ещё актуален? Ошибки программа пишет прям в stdout, то есть, в консоли печатает. Что программа выводит при своей работе? )

    2. У меня тоже не работала сразу, но скачал библиотеки ssl_libs по ссылке из шапки, положил рядом с экзешником и всё стало работать.
      Я честно говоря был очень удивлён что в системе нет этих библиотек.
      Правда у меня стоит 64-битная система, а библиотеки видимо для 32-битной предназначены. И возможно что сам экзешник ищет именно 32-битные. Но это не утверждение, а просто мысли вслух.

  7. Добрый день. Автору огромное спасибо за полезную софтинку!
    Есть вопрос.
    Почему отправленная почта не отображается в папке «Отправленные» в браузере?
    Все письма отправляются успешно, но когда я захожу в почтовый ящик через браузер ([email protected]), то не вижу отправленных писем в папке «Отправленные».
    Это можно исправить?

    1. Уже ответил в телеге, но думаю, полезно будет и остальным тоже увидеть, если вдруг такой вопрос возникнет, а лучше даже обновить статью и вынести инфу в F.A.Q., спасибо за хороший вопрос)

      UPD: программа и статья обновлены, теперь поддерживается и это 🙂

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

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

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