- Shpirat
- Лазяют там по своим интернетам, шпираты гребанные!
- smtpsender — маленькая, но гибкая программа для отправки писем из командной строки (с мультиаттачем файлов, поддержкой SSL/TLS и прокси, выполнением скриптов)
- Параметры:
- Mutt E-Mail Client
- Записки программиста
- Настройка консольного e-mail клиента Mutt за пять минут
Shpirat
Лазяют там по своим интернетам, шпираты гребанные!
smtpsender — маленькая, но гибкая программа для отправки писем из командной строки (с мультиаттачем файлов, поддержкой SSL/TLS и прокси, выполнением скриптов)
Всем привет! В этот раз представляю вашему вниманию небольшую программу для отправки почты из консоли. Она умеет работать через HTTP, Socks4 и Socks5 прокси, поддерживает аттач нескольких файлов, аттач файлов по маске, может запускать другие команды ДО и ПОСЛЕ отправки письма, умеет читать и использовать параметры отправки из файла, чтобы не приходилось каждый раз передавать кучу параметров при вызове программы. Просто иной раз нужно автоматизировать какое-либо действие, а потом получить отчёт по почте, вот тут и бывает порой необходимость в отправке почты из консоли.
Но! Обо всём по порядку)
Получить справку по командам можно указав параметр -h. Вот так оно всё и выглядит:
Внимание! Свежая версия программы и дополнительная, более актуальная информация находятся в конце статьи.
Пример отправки письма через SMTP-сервер Google, через SSL соединение:
А вот и письмецо 🙂
Письмо успешно дошло)
Параметры:
-make_data — этот параметр создаёт пустой файл-заготовку для следующего параметра -load_data) Сам файл будет выглядеть примерно вот так:
-load_data — этот параметр загружает созданный ранее файл с параметрами для отправки писем. Можно указать как полный, так и относительный путь к файлу. Если загрузить не удастся, программа сообщит об этом.
Файл с параметрами не найден, остальные параметры не указаны, поэтому столько ошибок… )
Берём и вписываем нужные данные в нужные параметры. Я изменил синтаксис в Notepad++, чтобы хоть чуток по-веселее было смотреть эти скриншотики, а то всё сливалось в единую непонятную массу, а теперь хоть комментарии и параметры различаются 🙂
Заполненный файл с параметрами
Тут есть одна хитрость. Те параметры, которые будут переданы программе напрямую при её вызове, будут иметь более высокий приоритет. Поэтому, например, можно запилить файл со всеми нужными параметрами, а потом вызывать программу, лишь указывая адресата или текст сообщения с темой. Удобно ж ведь! 🙂
-from — в этом параметре указывается отправитель. Можно указать так: Имя и тогда получатель или получатели увидят в первую очередь имя отправителя. Ну, хотя.. Это ж и так известно и понятно, зачем об этом писать… )
-to — тут можно указать получателя. Или получателей. Указывать можно в таком же формате, как и было показано в предыдущем параметре, а если нужно послать письмо нескольким адресатам, то можно указать их список через запятую.
-subject — тема сообщения.
-body — текст сообщения. Естественно, если там будет несколько слов, то нужно взять значение этого параметра в кавычки, как и в любой другой консольной программе. Если нужно перевести на новую строку, то можно написать \n прям там. Если задавать значение параметра в файле, то кавычки не нужны. Если указан тип сообщения html, а не text, то тут уже нужно будет использовать html-теги для форматирования письма и
для перевода строки.
-load_body — загружает текст сообщения из файла. Если файл не будет найден, то программа об этом сообщит. Если этот параметр указан, то параметр -body будет проигнорирован. Кстати! Чтобы программа сработала как надо, нужно указать один из этих параметров. Любой из них. Иначе будет ошибка… ) Но программа вообще сама сообщает о неполадках, если что… )
Вот, что произойдёт, если не указать текст сообщения:
-attach — с помощью этого параметра можно прикрепить к сообщению файл. Если файл не будет найден, то программа ничего не выведет, но и не прикрепит ничего. Можно указать произвольное имя файла через точку с запятой. Если этого не сделать, то будет использовано просто имя файла. Также можно несколько раз указывать этот параметр, тогда все указанные файлы будут прикреплены к письму.
Пример отправки файлов. Два файла указаны в файле с параметрами (это можно увидеть на картинке у команды -load_data), остальные два приписаны прям в консоли.
Все четыре файла успешно получены!
-type [text|html] — тип сообщения. По-умолчанию оно простое текстовое. Если же указать html, то тогда и в самом письме нужно использовать html теги.
Естественно, что все эти параметры можно было указать и напрямую при вызове программы, просто в таком виде их удобнее читать )
-server — ну, тут и так понятно, думаю 🙂
-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:[email protected]_server:port.
Здесь у меня просто PuTTY, подключенный к одному из серверов, в котором я настроил Socks5 прокси на 9999 порту. Это мы и указываем в файле с параметрами.
А вот тут уже видим, что.. Ну, тут ещё предыдущие письма, и как раз виден результат загрузки текста сообщения из файла file1.txt, ну и ниже, следующее письмо — это то самое, которое было отправлено через Socks5 туннель. Всё работает, как видим 🙂
А вот и сам файл file1.txt и его содержимое, которое успешно отправилось и пришло )
содержимое файла file1.txt
Вот вроде и всё.
А! Самое главное!
Вот сама программа (устаревшая версия, ниже есть новее): smtpsend.exe
Там же, в репозитории, в загрузках будут выкладываться версии программы. И все изменения в исходниках!
А вот ещё разок ссылка на 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 указывается статус добавления каждого файла: добавлен успешно или же не найден… 🙂
Если у кого-то что-то не будет работать или найдутся какие-то ошибки, то смело пишите в комментариях или в отзывах, с радостью приму пожелания и постараюсь исправить какие-то недочёты и ошибочки )
Если же долго не отвечаю, то пишите напрямую на почту: zbcdefgh(HotDog)gmail.com
Или же в телеграм, мой ник там @karamush.
Надеюсь, что кому-то это пригодится и будет нужно, чтобы труды (время всё же было затрачено) не пропадали зря 🙂
Mutt E-Mail Client
Mutt — нетребовательный к системным ресурсам Ncurses (Curses) консольный почтовый клиент, отличающийся быстротой работы и отсутствием каких-либо лишних функций.
Mutt написан Майклом Элкинсом (Michael Elkins) в 1995 году, интерфейс основывается на интерфейсе ELM / Electronic Mail for UNIX (один из первых почтовых клиентов с текстовым интерфейсом пользователя), с добавлением новых функций и возможностей позаимствованных у других популярных почтовых клиентов.
Клиентом поддерживается большинство форматов почтовых ящиков (включая MMDF, MH, mbox и maildir) протоколов (POP3, SMTP, IMAP и др), включает поддержку MIME, PGP/GPG и S/MIME-интеграцию. Mutt является Mail User Agent (MTA) и не может отсылать электронные сообщения самостоятельно, для этого ему необходимо иметь соединение с почтовым сервером (MTA / Mail Transfer Agent) или SMTP-клиентом.
Mutt максимально гибок в настройках, поддерживается создание цветовых схем для элементов интерфейса, тематическая сортировка писем, заголовков сообщений и прочее. Для добавления новых функциональных возможностей существует множество пачей и расширений, можно изменять все клавиатурные сочетания и создавать пользовательские клавиатурные макросы для сложных действий.
Mutt является оптимальным решением для работы с каким-то одним почтовым ящиком, имеющим для пользователя особо важное значение. Клиент способен работать даже на очень слабом канале связи, что поможет вовремя отвечать на письма в поездках. Настройки и адресную книгу можно хранить в одном файле, что упрощает перенос приложения на другую машину и синхронизацию параметров используя облачный сервис (например Dropbox).
Лицензия: GNU General Public License version 2.0 (GPLv2)
Записки программиста
Настройка консольного e-mail клиента Mutt за пять минут
21 сентября 2016
Мотивация пользоваться вместо обычных почтовых клиентов, таких, как Thunderbird, или, скажем, Claws Mail, консольным почтовым клиентом Mutt сродни мотивации пользоваться irssi вместо HexChat. Консольные приложения, как правило, намного проще своих GUI-аналогов, а значит не так сильно жрут батарею и более безопасны. Также они управляются исключительно при помощи клавиатуры, могут быть запущены на сервере в screen / tmux, и вот это все. К сожалению, конкретно Mutt совершенно незаслуженно пользуется репутацией программы, очень сложной в настройке. Сегодня мы убедимся, что в действительности настройка Mutt не сильно отличается от настройки любого другого почтового клиента.
На момент написания этих строк в качестве основной системы я использую FreeBSD, поэтому у меня установка необходимых пакетов выглядит так:
В дополнение к пакету mutt нужен еще и msmtp по той причине, что сам Mutt является только MUA, а не MTA. Другими словами, непосредственно для отправки писем Mutt использует сторонние программы. Не переживайте, это не так страшно, как может показаться.
Дополнение: Начиная с версии 1.5 стало возможным использовать smtp напрямую, без сторонних MTA. Для этого Mutt должен быть собран с соответствующими опциями. В зависимости от вашей системы / дистрибутива эти условия могут выполняться или не выполняться, поэтому в этой статье описывается способ, работающий всегда.
Первым делом указываем параметры подключения к SMTP. В файле
/.msmtprc пишем что-то вроде:
Адрес сервера, имя пользователя и пароль, разумеется, нужно заменить на свои. Кроме того, в вашей системе путь к связке корневых сертификатов может быть немного другим. Думаю, вы без труда найдете нужный файл при помощи утилиты find.
Меняем права доступа к конфигу, иначе msmtp откажется использовать его:
Проверяем, что письма ходят:
Далее создаем примерно такой файл
Насколько мне известно, в третьем тысячелетии абсолютно все почтовые сервисы предоставляют IMAP, и про POP3 можно наконец-то забыть.
Запускаем Mutt. Некоторые основные клавиши (все не привожу, так как их очень много и в клиенте все равно повсюду есть подсказки):
- ? — помощь;
- Вверх/вниз — перемещение между письмами;
- Enter — открыть письмо;
- d — пометить, что письмо следует удалить;
- u — отменяет пометку письма на удаление;
- N — пометить письмо как прочитанное/непрочитанное;
- $ — сохранить изменения (удалить помеченные письма, и т.д.);
- (цифра) — переход к письму с заданным номером;
- m — написать новое письмо;
- r — ответить на письмо;
- g — group reply, ответить всем;
- f — forward, перенаправить письмо;
- h — показать/скрыть все заголовки письма;
- a — создать алиас для отправителя письма;
- t — поставить/снять метку (tag);
- ;(что-то) — выполнить что-то с отмеченным;
- s — сохранить письмо на диск или в папку;
- c? — просмотр папок (там же см справку про создание/удаление папок);
- q — выйти из Mutt;
В любой непонятной ситуации просто нажмите Ctr+C, и на вопрос закрыть ли Mutt ответьте «no». Поиск по письмам работает примерно так. Нажмите T , затем введите
B pattern для поиска по телу сообщения или
s pattern для поиска по subject. По тому же принципу можно делать untag найденных ранее сообщений, только вместо T следует использовать Ctr+T. Подробности о поиске можно найти в документации.
Заметьте, что нажатие $ не приводит к загрузке новых писем. Загрузить новые письма можно, введя команду c? , и заново открыв папку INBOX. Понятно, что постоянно так делать неудобно, поэтому в
/.muttrc стоит дописать такой хоткей:
Еще один момент, который поначалу не очень понятен. Новые непрочитанные письма помечаются как N (new). Но если переподключиться, то они будут отмечены, как O (old). Это все еще непрочитанные письма, но которые мы уже видели в прошлый раз. Таким образом можно отличить новые письма от совсем-совсем новых.
Еще один хинт. По умолчанию Mutt отображает все письма «плоско». Мне лично древовидное отображение нравится больше. Включается оно так:
Примите во внимание, что Mutt имеет очень гибкие настройки в отношении что каким цветом подсвечивать. Вот вам для примера небольшой кусок
/.muttrc, чтобы вы могли представить масштабы (какая строчка что означает, думаю, и так понятно):
# new unread messages
color index brightgreen default «
# messages to me
color index cyan default «
p»
color index brightcyan default «
O»
color index brightcyan default «
# messages from me
color index yellow default «
# tagged messages
color index red default «
# messages about to be deleted
color index brightyellow default «
# message displaying settings
color hdrdefault green default
color header brightgreen default ^Subject:
color quoted cyan default
color signature red default
Мне очень нравится, что можно подсветить сообщения, отправленные лично тебе, а не просто в какой-нибудь мейлинг лист! Вообще, Mutt настолько гибок в плане настройки цветов, что для него делают целые темы.
Кстати, после внесения изменений в
/.muttrc, их можно подгрузить без перезапуска Mutt, введя:
По умолчанию Mutt скролит текст писем и списки писем экранами, а не по одной строке. Чтобы исправить это, я дописал в конфиг:
# scroll message line by line using arraws
bind pager previous-line
bind pager next-line
# scroll index line by line
set menu_scroll
Также в Mutt есть искуственные паузы, чтобы пользователь успевал прочитать все, что клиент выводит при подключении к IMAP серверу, и так далее. В целом это создает ощущение, что клиент тормозит, поэтому отключаем:
Еще, чтобы клиент работал быстрее, можно включить кэширование (не забудьте предварительно создать соответствующие каталоги):
/.mutt/header_cache»
set message_cachedir=»
Теперь, допустим, нам нужна адресная книга. Нет ничего проще!
/.muttrc дописываем что-то вроде:
Теперь, когда предлагается ввести адрес получателя при написании нового письма, просто начните вводить его никнейм. Никнеймы автодополняются при нажатии Tab. А если нажать Tab дважды, то открывается полный список алиасов.
И последняя пара полезняшек. Чтобы при редактировании писем в Vim ширина текста автоматически ограничивалась до 72-х символов, в
Интересно также, что Mutt позволяет слать письма прямо из консоли:
Чтобы вы могли лучше представить, как происходит работа с Mutt, я приготовил пару скриншотов. Оба скришота кликабельные, в полном размере имеют формат PNG, 1366 x 768 пикселей, размер менее 250 Кб.
Просмотр списка писем:
Чтение конкретного письма:
А теперь, внимание, вопрос! А как работать с несколькими мейлбоксами? Ну-ка, ну-ка, кто уже догадался? 🙂
Да просто дописываем информацию об еще одном SMTP-аккаунте в
/.msmtprc, создаем еще один .muttrc и переключаемся между ними при помощи :source . Я лично сложил все аккаунты в
/.mutt/user2 и так далее, а дэфолтный подключил в
/.muttrc с помощью директивы source. Адресную книгу по тому же принципу можно положить в
/.mutt/contacts. Единственная хитрость заключается в том, что после переключения на другой аккаунт при помощи :source , нужно сделать c! , чтобы клиент переподключился. Все гениальное — просто! Разумеется, для удобства можно определить хоткеи для переключения между аккаунтами. Пример вы найдете в полной версии
В нем же вы найдете кое-какие другие интересные вещи. Например, открытие ссылок из письма в браузере через urlscan, рендеринг HTML-писем при помощи lynx и их открытие в браузере по умолчанию, открытие картинок в gpicview, и не только. Кстати, много полезных рецептов, связанных с Mutt, можно найти на wiki-сайте Arch Linux. Ну и, конечно же, обратите внимание на официальный мануал по Mutt. Он классный и легко превращается в PDF-книгу, если нажать Ctr+P (print) в Chrome или Chromium.
Многое, к сожалению, остается за кадром. Например, настройка фильтров и работа с IMAP в оффлайне. Для последнего часто используют offlineimap. Но эти вопросы уже выходят за рамки данного поста и, откровенно говоря, мне это сейчас попросту не особо нужно.
А используете ли вы Mutt и если да, быть может, вам есть что дополнить?
Дополнение: О том, как прикрутить GPG к Mutt, читайте в посте Использование PGP/GPG, руководство для нетерпеливых.