Я хочу отправить электронное письмо из сценария Linux Shell. Какая стандартная команда используется для этого и нужно ли мне устанавливать какие-либо специальные имена серверов?
Что здесь означает «мта», есть ли здесь полное имя или ссылка? Как новичок, это то, что я хочу знать. Поскольку у меня нет опыта для этого.
Zen
5
@Zen MTA расшифровывается как агент доставки почты. postfix, sendmail, qmail и т. д.
Francesco Laurita
@Zen по большей части можно рассматривать как MTA как SMTP или IMAP сервер.
user151841
1
Если вы не знаете, как установить / настроить и используете Ubuntu: sudo apt-get install mailutilsи выберите Интернет-сайт: почта отправляется и принимается напрямую через SMTP. ,
user1717828
86
Если вам нужен чистый и простой подход в bash, и вы не хотите использовать cat, echoи т. Д., Самым простым способом будет:
mail -s "subject here" email@address.com <<<"message"
<<<используется для перенаправления стандартного ввода. Он долгое время был частью bash.
echo -e "Несколько строк и табуляция \ t msg" | mail -s "subject" your@email.com
Pipo
cat << END...END | mail -s "subject" test@example.com
ulidtko
Эй, у меня отлично сработало, спасибо! Как мне указать несколько адресов для доставки?
E.Owen 06
1
@ E.Owen. Вы можете использовать опцию -t для отправки на несколько адресов, разделенных пробелами,
Джон
25
Если запущены и exim, и ssmtp, у вас могут возникнуть проблемы. Поэтому, если вы просто хотите запустить простой MTA, просто чтобы иметь простой SMTP-клиент для отправки уведомлений по электронной почте с просьбой о настойчивости, вы должны сначала очистить предварительно установленный MTA, например exim или postfix, и переустановить ssmtp.
Тогда это довольно просто, настраивая только 2 файла (revaliases и ssmtp.conf) - см. Ssmtp doc -, и использование в вашем сценарии bash или bourne похоже:
#!/bin/sh
SUBJECT=$1
RECEIVER=$2
TEXT=$3
SERVER_NAME=$HOSTNAME
SENDER=$(whoami)
USER="noreply"[[-z $1 ]]&& SUBJECT="Notification from $SENDER on server $SERVER_NAME"[[-z $2 ]]&& RECEIVER="another_configured_email_address"[[-z $3 ]]&& TEXT="no text content"
MAIL_TXT="Subject: $SUBJECT\nFrom: $SENDER\nTo: $RECEIVER\n\n$TEXT"
echo -e $MAIL_TXT | sendmail -t
exit $?
Очевидно, не забудьте открыть выход вашего брандмауэра на порт smtp (25).
Где я могу изменить номер порта в этом скрипте? На моем сервере порт smtp работает через 8181.
Manix 01
Я бы не стал этого делать в этой оболочке, иначе вы рано или поздно застрянете. Вы можете сделать это в файле конфигурации: см. Unix.stackexchange.com/a/132731
hornetbzz
1
Почему вводятся символы новой строки, если я делаю простое эхо $ MAIL_TXT?
KernelPanic
1
@Marko: Пожалуйста, посмотрите man echo с опцией -e: включить интерпретацию
проголосовано против, поскольку сценарий может вызывать одновременно несколько процессов. Это может привести к повреждению / неправильному файлу tmp. Кроме того, файл / tmp не перезаписывается каждый раз, когда он используется - он фактически увеличивается с каждым электронным письмом, содержащим все предыдущие электронные письма внутри. Не хорошо.
Taterhead
1
Первая запись в / tmp / mailtest - это перезапись, поэтому она удалит все, что было там ранее. Тем не менее, этот метод не идеален по другим причинам, которые вы описали.
Саймон
8
Как правило, вы хотите использовать mailкоманду для отправки своего сообщения с помощью локального MTA (который либо доставит его с помощью SMTP в пункт назначения, либо просто пересылает его на какой-нибудь более мощный SMTP-сервер, например, у вашего интернет-провайдера). Если у вас нет локального MTA (хотя для UNIX-подобных систем его пропускать немного необычно), вы можете использовать какой-нибудь минималистичный MTA, например ssmtp .
ssmtpдовольно легко настроить. По сути, вам просто нужно указать, где находится SMTP-сервер вашего провайдера:
# The place where the mail goes. The actual machine name is required# no MX records are consulted. Commonly mailhosts are named mail.domain.com# The example will fit if you are in domain.com and you mailhub is so named.
mailhub=mail
Другой вариант заключается в использовании одного из мириадов сценариев , которые просто подключиться к SMTP - серверу напрямую и попытаться отправить сообщение там, например, SMTP-AUTH-Email-Script , SMTP-кли , SendEmail и т.д.
Измените somehost, someportи someaccount@somedomainна фактические значения, которые вы бы использовали. В этом примере не выполняется ни шифрование, ни аутентификация.
Это mailделает команда (кто бы мог подумать ;-). Откройте оболочку и введите, man mailчтобы получить страницу руководства для mailкоманды со всеми доступными параметрами.
Я сделал это, но нет возможности указать сервер для использования
appshare.co 01
1
Это часть конфигурации вашего локального агента передачи почты, например, Sendmail или Postfix.
DarkDust 01
2
Вам даже не нужен MTA. Протокол SMTP достаточно прост, чтобы напрямую записать его на ваш SMTP-сервер. Вы даже можете общаться через SSL / TLS, если у вас установлен пакет OpenSSL. Проверьте это сообщение: https://33hops.com/send-email-from-bash-shell.html
Выше приведен пример того, как отправлять текстовые / html-сообщения электронной почты, которые будут работать сразу после установки. Если вы хотите добавить вложения, все может стать немного сложнее, вам нужно будет кодировать двоичные файлы base64 и вставлять их между границами. Это хорошее место для начала расследования: http://forums.codeguru.com/showthread.php?418377-Send-Email-w-attachments-using-SMTP
В Linux для отправки вложения можно использовать почтовую утилиту с опцией «-a». Просмотрите страницы руководства, чтобы прочитать об этой опции. Например, следующий код отправит вложение:
mail -s "ЭТО ТЕМА" -a attachment.txt name@domain.com <<< "Привет, дружище, пожалуйста, найдите отчеты об ошибках."
Добро пожаловать в SO. Спасибо за ответ. Пожалуйста, прочтите информацию о том, как написать хороший ответ, и внесите соответствующие изменения. Наслаждайтесь ТАК ;-)
smtp_sasl_security_options, который в конфигурации будет пустым , чтобы гарантировать, что не используются несовместимые с Gmail параметры безопасности .
добавьте тело письма по вашему желанию, нажмите Enter, затем нажмите ctrl + d для правильного завершения
если он не работает, проверьте все шаги еще раз и проверьте, включено ли " менее безопасное приложение" в вашем Gmail
затем перезапустите постфикс, если вы измените что-либо в этом
для сценария оболочки создайте файл .sh и добавьте команду из 6 шагов в качестве требования
например только для образца
#!/bin/bash
REALVALUE=$(df /| grep /| awk '{ print $5}'| sed 's/%//g')
THRESHOLD=80if["$REALVALUE"-gt "$THRESHOLD"];then
mail -s 'Disk Space Alert' mailid@domainname.com << EOF
Your root partition remaining free space is critically low.Used: $REALVALUE%
EOF
fi
Сценарий отправляет электронное письмо, когда использование диска превышает процент, указанный параметром THRESHOLD (здесь 80%).
Разве имя этого ответа не должно быть «ОТПРАВИТЬ ПОЧТУ С LINUX НА Recever@domain.com ЧЕРЕЗ GMAIL»?
Кэмерон Хадсон,
1
вы можете использовать команду «email» или «emailx».
(1) $ vim /etc/mail.rc # или # vim /etc/nail.rc
set from = xxx@xxx.com #set smtp = smtp.exmail.gmail.com #gmail's smtp server set smtp-auth-user = xxx@xxx.com #sender's email addressset smtp-auth-password = xxxxxxx #get from gmail, not your email account passwdset smtp-auth=login
Потому что, если оно не будет отправлено с авторизованной учетной записи, электронное письмо попадет в список нежелательной почты.
(2) $ echo "Пожалуйста, не забудьте удалить неиспользуемые темы!" | mail -s "ненужные темы" -a a.txt developer@xxx.com # отправить пользователю группы 'developer@xxxx.com'
Ответы:
Если сервер правильно настроен, например, у него есть работающий MTA, вы можете просто использовать команду mail.
Например, чтобы отправить содержимое файла, вы можете сделать это:
man mail
Больше подробностей.источник
sudo apt-get install mailutils
и выберите Интернет-сайт: почта отправляется и принимается напрямую через SMTP. ,Если вам нужен чистый и простой подход в bash, и вы не хотите использовать
cat
,echo
и т. Д., Самым простым способом будет:<<<
используется для перенаправления стандартного ввода. Он долгое время был частью bash.источник
cat << END
...END | mail -s "subject" test@example.com
Если запущены и exim, и ssmtp, у вас могут возникнуть проблемы. Поэтому, если вы просто хотите запустить простой MTA, просто чтобы иметь простой SMTP-клиент для отправки уведомлений по электронной почте с просьбой о настойчивости, вы должны сначала очистить предварительно установленный MTA, например exim или postfix, и переустановить ssmtp.
Тогда это довольно просто, настраивая только 2 файла (revaliases и ssmtp.conf) - см. Ssmtp doc -, и использование в вашем сценарии bash или bourne похоже:
Очевидно, не забудьте открыть выход вашего брандмауэра на порт smtp (25).
источник
Другой вариант для сценария bash:
/tmp/mailtest
перезаписывается каждый раз при использовании этого сценария.источник
Как правило, вы хотите использовать
mail
команду для отправки своего сообщения с помощью локального MTA (который либо доставит его с помощью SMTP в пункт назначения, либо просто пересылает его на какой-нибудь более мощный SMTP-сервер, например, у вашего интернет-провайдера). Если у вас нет локального MTA (хотя для UNIX-подобных систем его пропускать немного необычно), вы можете использовать какой-нибудь минималистичный MTA, например ssmtp .ssmtp
довольно легко настроить. По сути, вам просто нужно указать, где находится SMTP-сервер вашего провайдера:Другой вариант заключается в использовании одного из мириадов сценариев , которые просто подключиться к SMTP - серверу напрямую и попытаться отправить сообщение там, например, SMTP-AUTH-Email-Script , SMTP-кли , SendEmail и т.д.
источник
Признав, что вы хотите использовать какой-то smtp-сервер, вы можете:
Измените
somehost
,someport
иsomeaccount@somedomain
на фактические значения, которые вы бы использовали. В этом примере не выполняется ни шифрование, ни аутентификация.источник
mailx
не устанавливается?Это
mail
делает команда (кто бы мог подумать ;-). Откройте оболочку и введите,man mail
чтобы получить страницу руководства дляmail
команды со всеми доступными параметрами.источник
Вам даже не нужен MTA. Протокол SMTP достаточно прост, чтобы напрямую записать его на ваш SMTP-сервер. Вы даже можете общаться через SSL / TLS, если у вас установлен пакет OpenSSL. Проверьте это сообщение: https://33hops.com/send-email-from-bash-shell.html
Выше приведен пример того, как отправлять текстовые / html-сообщения электронной почты, которые будут работать сразу после установки. Если вы хотите добавить вложения, все может стать немного сложнее, вам нужно будет кодировать двоичные файлы base64 и вставлять их между границами. Это хорошее место для начала расследования: http://forums.codeguru.com/showthread.php?418377-Send-Email-w-attachments-using-SMTP
источник
В Linux для отправки вложения можно использовать почтовую утилиту с опцией «-a». Просмотрите страницы руководства, чтобы прочитать об этой опции. Например, следующий код отправит вложение:
mail -s "ЭТО ТЕМА" -a attachment.txt name@domain.com <<< "Привет, дружище, пожалуйста, найдите отчеты об ошибках."
источник
ОТПРАВИТЬ ПОЧТУ ИЗ LINUX В GMAIL
ИСПОЛЬЗОВАНИЕ POSTFIX
1: установить программное обеспечение
Debian и Ubuntu:
OpenSUSE:
Fedora:
CentOS:
Arch Linux:
FreeBSD:
в конфигурации выберите поддержку SASL
2. Настройте Gmail.
/ И т.д. / постфикса. Создайте или отредактируйте файл паролей:
Я использую vim, вы можете использовать любой редактор файлов, например, nano, cat ...
> Ubuntu, Fedora, CentOS, Debian, OpenSUSE, Arch Linux:
Добавь это
где пользователь заменяет ваше имя почты, а пароль - ваш пароль Gmail
Сохраните и закройте файл и сделайте его доступным только для root: потому что это конфиденциальный контент, который содержит ваш пароль
> FreeBSD:
каталог / usr / local / etc / postfix.
Добавьте строку:
Сохраните и сделайте доступным только root:
3. Конфигурация Postfix
файл конфигурации main.cf
6 параметров, которые мы должны установить в Postfix
Ubuntu, Arch Linux, Debian:
редактировать
измените следующие значения:
smtp_sasl_security_options, который в конфигурации будет пустым , чтобы гарантировать, что не используются несовместимые с Gmail параметры безопасности .
сохранить и закрыть
как и для
OpenSUSE:
Modify
также требуется настройка файла master.cf
изменить:
как раскомментируя эту строку (удалите #)
сохранить и закрыть
Fedora, CentOS:
Modify
FreeBSD:
изменить:
сохраните и закройте это
4. Обработать файл паролей:
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
для freeBSD
4.1) Перезапустить постфикс
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
для FreeBSD:
Добавить
сохранить, затем запустить, чтобы начать
5. Включите "менее безопасные приложения" в Gmail, используя ссылку ниже.
https://support.google.com/accounts/answer/6010255
6. Отправьте тестовое электронное письмо.
нажмите Ввод
добавьте тело письма по вашему желанию, нажмите Enter, затем нажмите ctrl + d для правильного завершения
если он не работает, проверьте все шаги еще раз и проверьте, включено ли " менее безопасное приложение" в вашем Gmail
затем перезапустите постфикс, если вы измените что-либо в этом
для сценария оболочки создайте файл .sh и добавьте команду из 6 шагов в качестве требования
например только для образца
Сценарий отправляет электронное письмо, когда использование диска превышает процент, указанный параметром THRESHOLD (здесь 80%).
источник
вы можете использовать команду «email» или «emailx».
(1) $ vim /etc/mail.rc # или # vim /etc/nail.rc
Потому что, если оно не будет отправлено с авторизованной учетной записи, электронное письмо попадет в список нежелательной почты.
(2) $ echo "Пожалуйста, не забудьте удалить неиспользуемые темы!" | mail -s "ненужные темы" -a a.txt developer@xxx.com # отправить пользователю группы 'developer@xxxx.com'
источник