Отправка почты с помощью оболочки Scipt не работает

Мне нужно отправить письмо о развертывании приложения с использованием сценария оболочки. Для этого я только что создал сценарий оболочки и протестировал его с помощью

#!/bin/bash

TO_ADDRESS="[email protected]"
FROM_ADDRESS="[email protected]"
SUBJECT="Test mail"
BODY="hai friend, this mail is automated from shell script for Release automation."

echo ${BODY}| mail -s ${SUBJECT} ${TO_ADDRESS} -- -r ${FROM_ADDRESS}

Но при запуске этого скрипта он печатается так:

You have new mail in /var/spool/mail/jaykay

И файл с именем jaykay создается в /var/spool/mail/

  • Почему это происходит?

  • Как я могу отправить письмо с помощью сценария оболочки?

И выходной файл выглядит так

From jaykay Wed Aug 20 04:08:53 2014
Return-Path: <jaykay>
Received: (from jaykay@localhost)
    by e7021.com (8.14.4/8.14.4/Submit) id s7K98rdu004168;
    Wed, 20 Aug 2014 04:08:53 -0500
From: Jini K Johny <jaykay>
Message-Id: <[email protected]>
Date: Wed, 20 Aug 2014 04:08:53 -0500
To: [email protected], -r, --, [email protected]
Subject: Test mail
User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

hai friend, this mail is automated from shell script for Release automation.

person JayKay    schedule 20.08.2014    source источник
comment
вам не хватает } в последней строке ${FROM_ADDRESS.   -  person Édouard Lopez    schedule 20.08.2014
comment
вы уже настроили почтовый сервер? Например, OpenSmtpd cise.ufl.edu/~bn0/mail_tutorial.html   -  person Édouard Lopez    schedule 20.08.2014
comment
@ÉdouardLopez, это была опечатка, теперь обновлено. спасибо за обзор.   -  person JayKay    schedule 20.08.2014


Ответы (1)


Ваша фундаментальная проблема заключается в том, что вы должны правильно цитировать. По сути, это дубликат вопроса, который задают здесь каждый день.

Без кавычек второй токен в $SUBJECT интерпретируется как адрес для отправки.

  • Электронное письмо отправлено для доставки на mail (второе слово в "Test mail").

  • Адрес недоступен, поэтому вы получаете сообщение об отказе.

  • Сообщение о возврате доставляется на ваш почтовый ящик.

  • Ваша оболочка уведомляет вас о том, что в папке «Входящие» есть новое сообщение.

Кроме того, кажется, что ваша версия mail не понимает параметр --, поэтому он воспринимается как еще один адрес для отправки. (Я полагаю, вы получите сообщение об отказе от этого.) Поскольку параметр -r также интерпретируется как просто еще один адрес для отправки, вы получаете одну копию (например, Bcc:) исходящего сообщения в почтовом ящике, который вы пытались указать в $FROM_ADDRESS.

Исправить, конечно, несложно:

#!/bin/bash

TO_ADDRESS="[email protected]"
FROM_ADDRESS="[email protected]"
SUBJECT="Test mail"
BODY="hai friend, this mail is automated from shell script for Release automation."

echo "${BODY}" | mail -s "${SUBJECT}" "${TO_ADDRESS}"  # -- -r "${FROM_ADDRESS}"

(Кудрявые здесь на самом деле не нужны, но я сохранил их, так как они были в вашем коде.)

Например. этот недавний ответ содержит рекомендации о том, когда и как именно вам нужно цитировать.

Программа mail на самом деле представляет собой довольно тонкую оболочку; вместо этого вы могли бы сделать что-то подобное;

/usr/lib/sendmail -oi -t -f "$FROM_ADDRESS" <<____HERE
From: My Name <$FROM_ADDRESS>
To: Your Name <$TO_ADDRESS>
Subject: $SUBJECT

$BODY
____HERE

... где путь к /usr/lib/sendmail, вероятно, будет чем-то другим во многих системах.

(Чтобы получить бонусные очки k00lness, добавьте X-Mailer: Look, I can put anything I like here!)

Я предполагаю, что вы имели в виду sendmail -f "$FROM_ADDRESS", который устанавливает адрес отправителя конверта (не -r, который я нигде не могу найти в документации).

person tripleee    schedule 20.08.2014
comment
На выходе никаких изменений. :( - person JayKay; 20.08.2014
comment
Что в /var/spool/mail/jaykay? Я предполагаю, что вы получаете сообщение о возврате или автоматический ответ по какой-то другой причине, и сообщение о возврате говорит вам, почему. - person tripleee; 20.08.2014
comment
Предполагать, что опция -r ошибочна, я не могу найти для нее никакой документации. Вы имели в виду -f? - person tripleee; 20.08.2014
comment
я в новинку с этим скриптом оболочки. :( - person JayKay; 20.08.2014
comment
Но от и до разные, и почта не доставляет. - person JayKay; 20.08.2014
comment
Давайте продолжим обсуждение в чате. - person tripleee; 20.08.2014