
Всем привет! В этот раз представляем вашему вниманию небольшую программу для отправки почты из консоли. Она умеет работать через HTTP, Socks4 и Socks5 прокси, поддерживает аттач нескольких файлов, аттач файлов по маске, может НЕ отправлять письмо при отсутствии аттачей, умеет сохранять отправленные письма в любую выбранную IMAP-папку, может запускать всякие системные команды ДО и ПОСЛЕ отправки письма, умеет читать и использовать параметры отправки из файла, чтобы не приходилось каждый раз передавать кучу параметров при вызове программы. Просто иной раз нужно автоматизировать какое-либо действие, а потом получить отчёт по почте, вот тут и бывает порой необходимость в отправке почты из консоли.
Но! Обо всём по порядку)
Получить справку по командам можно указав параметр -h. Вот так оно всё и выглядит:
Внимание! Свежая версия программы с кучей новых штук, и дополнительная, более актуальная информация находятся в конце статьи 😏
Пример отправки письма через 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, но на самом деле это немножко не так… 🙂
[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_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 порту. Это мы и указываем в файле с параметрами.
А вот тут уже видим, что.. Ну, тут ещё предыдущие письма, и как раз виден результат загрузки текста сообщения из файла 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, письмо всё равно уходило, даже если файлов в папке не было. Теперь письмо не отправляется если файлов нет 🙂
[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
Одмена на мыло!!!!
Андрей Коромыло ответь на почту [email protected] вк тебя не сыщешь. Есть дело 🙂
Написал 🙂
[error]: SMTP: Не удалось подключится к smtp-серверу. проверьте адрес сервера и настройки прокси (если используется он). SocketError: SSL/TLS support is not compiled!
прокси в настройках нет
Тут дело не в прокси, что-то пошло не так с поддержкой SSL.
Возможно, у вас в системе отсутствуют нужные библиотеки. Можно скачать их тут https://shpirat.net/bb/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
читает кто эту тему еще или нет, но у меня почему то не работает отправка, где и как проверить наличие ошибок?
Добрый день! Оказалось, что на сайте сломалась отправка писем. Это забавно, учитывая то, что комментарий пишется под статьёй про отправку почты 🙂
Вопрос ещё актуален? Ошибки программа пишет прям в stdout, то есть, в консоли печатает. Что программа выводит при своей работе? )
У меня тоже не работала сразу, но скачал библиотеки ssl_libs по ссылке из шапки, положил рядом с экзешником и всё стало работать.
Я честно говоря был очень удивлён что в системе нет этих библиотек.
Правда у меня стоит 64-битная система, а библиотеки видимо для 32-битной предназначены. И возможно что сам экзешник ищет именно 32-битные. Но это не утверждение, а просто мысли вслух.
Добрый день. Автору огромное спасибо за полезную софтинку!
Есть вопрос.
Почему отправленная почта не отображается в папке «Отправленные» в браузере?
Все письма отправляются успешно, но когда я захожу в почтовый ящик через браузер ([email protected]), то не вижу отправленных писем в папке «Отправленные».
Это можно исправить?
Уже ответил в телеге, но думаю, полезно будет и остальным тоже увидеть, если вдруг такой вопрос возникнет, а лучше даже обновить статью и вынести инфу в F.A.Q., спасибо за хороший вопрос)
UPD: программа и статья обновлены, теперь поддерживается и это 🙂