Як надіслати електронний лист із командного рядка?


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, Правильно, він використовує довге ім'я користувача облікового запису та власне генеровану ".local" адресу Mac для формування "Від". Я використовую це весь час для отримання повідомлень електронною поштою для мене та мого персоналу з процесів сценаріїв оболонки. 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 для надсилання електронної пошти з командного рядка.

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

Пропоную два з них 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щоб я могла мати її на всіх своїх Маках.

Тоді вам потрібен ~/.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

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

15

Найбільш основний спосіб надсилання пошти - через сеанс telnet із smtp-сервером вашого провайдера / мережі. Після того, як ви зв’язалися з сервером і після кожної команди, сервер відповість, чи приймає команду чимось на кшталт "250 ОК", чи ні, з повідомленням про помилку.

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

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

Відкрийте сеанс телнету для порту 25 smtp-сервера вашого провайдера / мережі

telnet name_or_ip_of_smtp_server 25

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

EHLO name_of_your_network

a з = ​​повернення потрібне, <і> є частиною команди

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

Це працювало для мене, це було написано на увазі Лева, але працює для Гірського Лева. До речі, для цього використовується 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: У мене це чудово спрацьовує під час запуску цього вручну з терміналу або в сценаріях. Однак на даний момент я застрягла з проблемою, що листи не надсилаються ніколи, коли запускається сценарій. Я думаю, це проблема з налаштуванням запущеної роботи.
Джонні

У мене це працює. Дивіться apple.stackexchange.com/questions/92406/…
Jonny

+1 Дякуємо, що додали це. Дійсно мені допомогли. Все, що мені справді було потрібно, це запис ретранслятора в main.conf (це мій власний SMTP-сервер у моїй локальній мережі).
boot13

3
Зазначене може бути застарілим. Я повинен був зробити додати «smtp_sasl_mechanism_filter = рівнину» , як на 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.