Как отправить письмо из командной строки?


29

Как отправить письмо из командной строки или скрипта? Я хочу иметь возможность запускать скрипт программно, передавая получатель и сообщение.


Если вы пишете программу, во многих языках есть библиотеки, которые работают с электронной почтой
user151019

Ответы:


22

mail -s subject someone@example.com введите ваше сообщение, нажмите, Ctrl+Dчтобы закончить


11
Если вы не настроили свою систему так, чтобы она указала, куда отправлять электронную почту, это, вероятно, фактически не будет отправлять электронную почту, она просто будет накапливаться на моем Mac.
TJ Luoma

15
-1: Этот ответ неполон. Если система не была настроена до выполнения этой команды, как отмечает @TJLuoma, эта команда не будет работать.
Мельвинким

1
TJ Luoma и melvkim неверны: стандартная система OS X из коробки будет отправлять электронную почту просто отлично, без необходимости настройки. Машина OS X будет действовать как собственный SMTP-сервер, ища DNS MX для домена назначения и отправляя почту туда.
JohnEDee

2
@patrix, правильно, он использует длинное имя пользователя вошедшего в систему аккаунта и сгенерированный адрес Mac ".local" для формирования "From". Я использую его все время для уведомлений по электронной почте мне и моим сотрудникам о сценариях оболочки. TJ Luoma и melvkim говорили, что это «не будет работать» и «фактически не отправлять электронную почту», однако оба они неверны.
JohnEDee

1
@RamarajT, да, вы можете направить вывод команды echo на почту, и тогда она не будет требовать Cmd-D. Например: echo This will be the body of the email | mail -s "This is the Subject" destination@example.com
JohnEDee

26

Мне известны две программы, которые легко позволят вам настроить Mac для отправки электронной почты из командной строки.

Я написал HOWTO для них обоих:

Из двух я предлагаю msmtp.

Настройка достаточно сложна, поэтому я не уверен, что мне следует повторить все шаги здесь, но я упомяну, что если вы используете Homebrew, вы можете установить msmtp, используя

brew install msmtp --with-macosx-keyring

Тогда все остальное - это просто настройка соответствующих файлов конфигурации.

Первый /usr/local/etc/msmtprc

# Begin msmtprc
# Set default values for all following accounts.
defaults
tls on
logfile ~/.msmtp.log

# A first gmail address
account example@gmail.com
host smtp.gmail.com
port 587
protocol smtp
auth on
from example@gmail.com
user example@gmail.com
tls on
tls_starttls on

# this next line is crucial: you have to point to the correct security certificate for GMail.
# If this doesn't work, check the mstmp documentation
# at http://msmtp.sourceforge.net/documentation.html for help
#
# This next line should all be on one long line:
tls_trust_file /path/to/Thawte Roots/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem

# Set a default account
# You need to set a default account for Mail
account default : example@gmail.com

# end msmtprc

Обратите внимание, что tls_trust_fileстрока должна указывать, где вы скачали и установили сертификаты с https://www.thawte.com/roots/index.html .

Я вставил свой, ~/Dropbox/Thawte Rootsчтобы иметь его на всех своих Mac.

Затем вам нужен ~/.mailrcфайл, чтобы сказать, где находится бинарный файл msmtp. Если вы используете brewего, /usr/local/bin/msmtpфайл будет выглядеть так:

set sendmail="/usr/local/bin/msmtp"

Последний, но важный шаг - убедиться, что ваша цепочка для ключей имеет информацию именно в том формате, в котором ее ожидает msmtp:

Я думаю, что это охватывает большинство деталей. См. Http://www.tuaw.com/2010/05/04/msmtp-a-free-tool-to-send-email-from-terminal/, если хотите узнать больше подробностей.


Очевидно, мои примеры в приведенном выше сценарии предполагают, что вы используете Gmail, но его можно использовать и для других серверов. Перейдите example@gmail.comна свой адрес электронной почты Gmail или Google Apps.
TJ Luoma

Я наконец смог заставить это работать, используя Google Roots, доступные здесь: pki.google.com/roots.pem . Если у вас возникли проблемы с файлом доверия и Gmail, это может разблокировать вас.
Codewise

Если у вас возникли проблемы с расположением файла конфигурации (msmtprc), после установки с помощью Homebrew на macOS 10.13.3, msmtp искал его в моем домашнем каталоге: ~/.msmtprc
codewise

15

Самый простой способ отправки почты - через сеанс telnet с сервером smtp вашего провайдера / сети. После того, как вы связались с сервером и после каждой команды сервер ответит, если он примет команду с чем-то вроде «250 OK», или, если нет, с сообщением об ошибке.

Все подробности можно найти в RFC2821 - Простой протокол пересылки почты, Google для него. Этот базовый способ отлично подходит для проверки того, почему что-то идет не так при отправке почты, но я думаю, что довольно сложно написать полное доказательство.

Сначала получите интерфейс командной строки на вашем компьютере, запустив Terminal. Затем продолжайте выполнять следующие команды, одну за другой.

Откройте сеанс telnet для порта 25 сервера smtp вашего провайдера / сети

telnet name_or_ip_of_smtp_server 25

поздоровайтесь плюс интернет-имя вашего провайдера / сети, например abc.com

EHLO name_of_your_network

требуется адрес возврата from =, <и> являются частью команды

MAIL FROM:<your_email_adress>

указать одно или несколько направлений, <и> являются частью команды

RCPT TO:<destination_email_address>
RCPT TO:<second_destination_email_address>
RCPT TO:<etc_destination_email_address>

скажите серверу, что хотите начать отправку данных

DATA

Теперь сервер должен ответить, вы можете начать отправлять почту и перейти в режим данных.

your data
more data
etc

теперь заканчивайте данные точкой, как только символ на линии

.

сервер возвращается в командный режим, чтобы вы могли выйти

QUIT

13

Это сработало для меня, было написано с учетом Lion, но работает для Mountain Lion. Кстати, это использует Gmail, так что если вы не ...

Вам не нужно ничего скачивать! (просто настройте учетную запись Gmail)

http://www.anujgakhar.com/2011/12/09/using-macosx-lion-command-line-mail-with-gmail-as-smtp/

Настроить Postfix для Gmail SMTP Редактировать файл /etc/postfix/main.cf

sudo vim /etc/postfix/main.cf

и добавьте следующее ниже закомментированных релеохостов:

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_sasl_mechanism_filter = plain

Создайте пароль sasl_password, если он еще не существует

sudo vim /etc/postfix/sasl_passwd

и введите следующее: -

[smtp.gmail.com]:587 username@gmail.com:password

Запустите следующие команды

sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
sudo launchctl stop org.postfix.master
sudo launchctl start org.postfix.master

И вы сделали ....
Теперь вы должны иметь возможность отправлять электронные письма из командной строки, например, отправлять содержимое каталога в виде дерева на адрес электронной почты

tree /var/www/somefolder | mail -s "contents" your@yourdomain.com

PS: я получил это, чтобы работать отлично при запуске этого вручную из терминала или в сценариях. Однако в этот момент я застрял с проблемой, что письма никогда не отправляются, когда launchd запускает скрипт. Я думаю, что это проблема с запуском настройки работы.
Джонни

Я получил это работает. См. Apple.stackexchange.com/questions/92406/…
Джонни

+1 Спасибо за добавление. Действительно помог мне. Все, что мне действительно нужно, это запись relayhost в main.conf (это мой собственный SMTP-сервер в моей локальной сети).
boot13

3
Выше может быть устаревшим. Мне нужно было добавить «smtp_sasl_mechanism_filter = plain» в соответствии со stackoverflow.com/a/26451135/197789, чтобы заставить его работать. В противном случае я получил ошибку «общего сбоя».
Фон


0

Возможно, вы захотите проверить postfixconf, который включает и настраивает OS X для отправки электронных писем из командной строки (используя ваш ввод).

Он основан на конфигурации постфикса, которая хорошо документирована в Интернете здесь , здесь и здесь .


-3

Поскольку он основан на Unix, вы можете использовать команду sendmail .


-1: sendmail - это команда SMTP-сервера
vartec
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.