отправка файла с использованием sendmail

У меня есть сценарий оболочки, который использует функцию sendmail для отправки электронной почты, код выглядит следующим образом

mailalert(){
sendmail -F Sender-Name -it <<END_MESSAGE
To: Recipient@example.com
Subject: Subject

Message
END_MESSAGE
}

Он запускается всякий раз, когда я вызываю эту функцию. Теперь у меня есть текстовый файл, который я хочу отправить, используя sendmail в качестве вложения или в сообщении, которое он отправляет. Как я могу это сделать? Я перепробовал много хитростей, но ничего не получается. Пожалуйста помоги.

5
задан 14.04.2020, 20:01

5 ответов

Довольно странно, но я использовал другой подход, так как при использовании uuencode он начал выполняться, но курсор застрял на begin 644 /path/to/file, поэтому я использовал cat для отправки моего файла в теле сообщения.

file=/path/to/file
mailalert(){
sendmail -F Sender-Name -it <<END_MESSAGE
To: Recipient@example.com
Subject: Subject

$(cat $file)
END_MESSAGE
}

Приведенный выше код работал отлично, но когда я увидел сообщение в своем веб-браузере, все было в порядке. Но когда я увидел его в Thunderbird, он показывался неправильно. Это было как-то закодировано.

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

1
ответ дан 14.04.2020, 20:04

Введите uuencode /path/filename.txt | sendmail -s "subject" user@domain в своем терминале для отправки почты.

  • Заменить «путь» фактическим путем к каталогу, в котором находится файл для вложения.
  • Заменить «filename.ext» на фактическое имя файла и расширение.
  • Замените «тему» ​​на строку темы, которую вы хотите иметь в письме.
  • Заменить «user @ domain» на адрес электронной почты получателя.

Это фактический процесс отправки почты с вложением.

добавить uuencode /path/filename.txt перед командой sendmail в вашем скрипте. Я имею в виду изменить его как

mailalert(){
uuencode /path/filename.txt
sendmail -F Sender-Name -it <<END_MESSAGE
To: Recipient@example.com
Subject: Subject

Message
END_MESSAGE
}

надеюсь, что это может помочь вам.

3
ответ дан 14.04.2020, 20:02
  • 1
    @Tarun просто смотрят на здесь google.co.in/… – silly_cone 14.04.2020, 20:02
  • 2
    och! хорошо sudo apt-get install sharutils тогда попытка again.@Tarun – Community 14.04.2020, 20:03
  • 3
    Я попробовал подход, но при выполнении сценария он дает сообщение begin 644 /path/filename.txt, и курсор продолжает мигать. – hstdt 14.04.2020, 20:03
  • 4
    Спасибо за ответ. Я попробовал его, но это дает ошибку uuencode: not found. – Tai Le Anh 14.04.2020, 20:03

При отправке почты, даже из командной строки, лучше использовать программу, которая была разработана для этой цели, а не вызывать sendmail напрямую. Хороший универсальный клиент электронной почты для командной строки - mutt; в частности, он имеет флаг командной строки для прикрепления файлов, что позволяет избежать громоздкого использования uuencode:

echo Test | mutt -s Test -a image.jpg -- firas@fkraiem.org

Как обычно, см. man mutt для получения информации об использовании.

0
ответ дан 14.04.2020, 20:02

Я создал скрипт ниже, чтобы прикрепить файл CSV. Файл генерируется, но он неправильно усекает имя строки / столбца заголовка CSV, а также есть еще один файл, который прикрепляется к письму, а именно «ATT0001.txt» с каждым письмом. Что-то не так, что вы могли бы узнать здесь?

СЦЕНАРИЙ

(
echo "From:"$1;
echo "To:"$2;
echo "Subject:"$3;
echo "MIME-Version: 1.0";
echo "Content-Type:multipart/mixed; boundary=\"B835649000072104Jul07\"";

echo "--B835649000072104Jul07";
echo "Content-Type: text/html; charset=\"UTF-8\"";
echo "Content-Transfer-Encoding: 7bit";
echo "Content-Disposition: inline";
echo "";
echo "$4";

echo "--B835649000072104Jul07";
echo "Content-Type: text/csv";
echo "Content-Transfer-Encoding: base64";
echo "Content-Disposition: attachment; filename=\"$5\"";
base64 "$5"

echo "--B835649000072104Jul07";
) | sendmail -t
1
ответ дан 14.04.2020, 20:03

После поиска по многочисленным бесполезным страницам MAN и поиска в Google я, наконец, пришел к следующему решению:
Файл для отправки: test.csv

В Ubuntu у вас будет предоставлен uuencode (AIX). пакетом sharutils, который вам может понадобиться установить (эквивалент на Redhat - mutt).

uuencode test.csv test.csv | mail -v -s "Subject test" -r no-reply@mydomain.co.uk recepient@mydomain.co.uk

Самая большая проблема состояла в том, чтобы объединить sendmail и вложение и в то же время установить тему. Также в AIX у меня нет опции -a attachment, как предлагает страница LINUX Man.

Вы также можете использовать mailx вместо mail с точно такими же параметрами.

0
ответ дан 14.04.2020, 20:04
  • 1
    mutt не " equivalent" из uuencode. Кроме того, mailx должен всегда предпочитаться mail, поскольку последний нестандартен. – Kirill Titov 14.04.2020, 20:05

Теги

Похожие вопросы