Использование Raspbian и Ubunntu 16.04 LTS, поэтому нужно общее решение Linux.
Требование простое:
Мне нужен способ отправки однострочных сообщений электронной почты из командной строки.
Я настроил учетную запись Gmail только для этого конкретного Rpi3, с адресом rpi3abc@gmail.com - без 2FA
Поэтому теперь мне нужно иметь возможность отправлять однострочные почтовые сообщения из любого места (включая cron) без вмешательства пользователя.
Я также хотел бы иметь возможность отправлять текстовые файлы; в основном что-нибудь из stdin
.
Ответы:
Самый простой ответ на отправку однострочных сообщений через gmail - использовать ssmtp
Установите его с помощью следующих команд:
Изменить,
/etc/ssmtp/ssmtp.conf
чтобы выглядеть так:Отправить однострочник так:
или
Затем, верный * nix, вы получите ответ через несколько секунд.
Проверьте свою учетную запись myusername@gmail.com и вуаля, она есть!
Это также хорошо работает при отправке файла, например:
И программа будет отображаться в почтовом ящике
Если файл представляет собой текстовый файл, он может иметь первую строку, которая говорит
Subject: xxxxxx
Это может быть использовано с различными заданиями cron, которые могут отправлять мне данные с темами, указывающими содержимое.
Это будет работать со всем, что готовит сообщение, которое передается в ssmtp через stdin.
Для получения более подробной информации, такой как защита этих файлов от других пользователей, посетите эту статью:
Отправить письмо из командной строки Raspberry Pi
Обязательно посмотрите внизу ответ на вопрос
Rui
о блокировкеFROM:
адреса, который может быть изменен в форматированных файлах сообщений, если это необходимо.Теперь если бы я только мог понять, как отправить SMS таким же образом.
источник
ssmtp
в своих виртуальных машинах, очень легкий. +1sendmail
одиночку нет MTA - Mail Transport Agent для связи вне машины. По умолчанию, поскольку Unixen по своей структуре являются многопользовательскими, ониsendmail
будут отправлять сообщения другим пользователям в том же окне, но не снаружи.ssmtp
это MTA, который я думаю, проще всего настроить для Gmail.ssmtp
это всего лишь одна из многих оболочек Sendmail. Все они принимают сообщение на стандартном вводе и, необязательно, список адресов в качестве аргументов командной строки, и все они предлагают двоичный файл с именем,sendmail
который реализует (по крайней мере, основные функции) традиционный API командной строки Sendmail. Но, собственно говоря, это сообщение должно быть правильно сформированным сообщением RFC822. Как минимум, он должен иметьSubject:
заголовок.(С
ssmtp
,sendmail
это просто символическая ссылка наssmtp
. Postfix, Exim, и я полагаю, что любой другой MTAProvides: mail-transport-agent
имеет аналогичное расположение, за исключением, конечно,sendmail
гдеsendmail
двоичный файл "реальная вещь".)Чаще всего вы можете собрать простое электронное письмо с документом здесь.
(Опция Sendmail
-t
говорит, что нужно взять список получателей из заголовков сообщения, которое вы получаете при стандартном вводе. Точный путь к Sendmail будет отличаться для разных платформ.)Другим распространенным вариантом является объединение вывода нескольких команд. Позаботьтесь о том, чтобы между заголовками и телом сообщения была пустая строка («шея»).
Для чего-либо, кроме очень простых текстовых сообщений ASCII, вам нужно понять, как составить правильное сообщение MIME, и в этом случае обычно имеет смысл использовать подобный инструмент
mutt
. Некоторые платформы имеютmail
илиmailx
которые знают, как отправлять вложения и текст не-ASCII, но это не полностью переносимо.Проблема здесь не в том, чтобы найти клиента, который может принять сообщение электронной почты и попытаться отправить его, а в том, чтобы настроить его для специфики Gmail, для чего MTA должен знать имя пользователя и пароль для использования на удаленном сервере, чтобы чтобы иметь возможность использовать его в качестве исходящего SmartHost.
За кулисами, как большинство клиентов
mutt
,mailx
и т. Д., Как правило, простоsendmail
скрываются, чтобы передать сообщение из системы.источник
Добавление в ОП собственного ответа:
При настройке
ssmtp
вы также можете запретить или разрешить пользователям определять From, а также переопределять домен; Вы можете сделать это по нескольким причинам, включая сообщение, которое не попадает в папку «Спам».Вы можете добавить к
/etc/ssmtp/ssmtp.conf
:Обратите внимание, что хотя YES можно использовать в домашней малине, это не рекомендуется в многопользовательской системе с точки зрения безопасности.
источник
Что не так с "почтой"?
"mail" - это / etc / альтернативная ссылка на / usr / bin / bsd-mailx из пакета bsd-mailx. Я считаю, что это там по умолчанию. Отличная утилита для отправки почты из скриптов cron, например.
Работает также на Ubuntu и FreeBSD.
источник
mailx
это просто фронт. Это требует, чтобы некоторые MTA были настроены для фактического получения сообщения от локальной системы. Существует несколько несовместимых версий, но если ваша целевая платформа - только Debian, вы можете полагаться на разумное поведение BSD.Я действительно неравнодушен к использованию
mailx
для этого:источник
-a
частности, вариант был бы замечательным, если бы он был универсально поддержан, но просто просмотритеmailx
вопросы здесь, чтобы увидеть, что это, безусловно, не так.Я использую sendEmail для отправки простых автоматических писем через SMTP-сервер внешнего провайдера:
Я передаю все в одной строке, поэтому выполнение этого в командной строке, скорее всего, покажет все параметры (включая пароль smtp) всем пользователям, если они будут запускаться,
ps -ef
пока я выполняю команду. Я использую это в сценарии оболочки.источник
Мой сервер - CEntOS 7, и он имеет sendmail, но не mailx и т. Д. Вместо того, чтобы установить новую программу, которую я протестировал с использованием sendmail напрямую, обнаружил, что это работает:
На мой взгляд, это самый простой способ отправить короткое электронное письмо, поскольку он не требует запуска или настройки сервера или демона и может быть выполнен в одной командной строке.
Идея состоит в том, что сообщение просто предупредит меня о том, что определенная программа выдала ошибку, не раскрывая потенциально конфиденциальную информацию, и затем я отправлю SSH на сервер, чтобы проверить его журналы. Таким образом, нет необходимости беспокоиться о сложностях, таких как прикрепление файлов или шифрование транспорта.
Заметки:
-e
говорит эхо интерпретировать '\ n' и другие побеги.-t
говорит sendmail получить адреса получателей из «To:» в заголовке сообщения.tail /var/log/maillog
для просмотра сообщений об ошибках.источник
sendmail
- но я не вижу этого ответа, демонстрирующего, что он работает с gmail, как указано в исходном вопросе ...