Как отправить HTML-сообщение с помощью оболочки script?
Отправка HTML-почты с помощью оболочки script
Ответ 1
Сначала вам нужно составить сообщение. Голый минимум состоит из этих двух заголовков:
MIME-Version: 1.0
Content-Type: text/html
... и соответствующий текст сообщения:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
</head>
<body>
<p>Hello, world!</p>
</body>
</html>
После этого вы можете передать соответствующую информацию команде mail:
body = '...'
echo $body | mail \
-a "From: [email protected]" \
-a "MIME-Version: 1.0" \
-a "Content-Type: text/html" \
-s "This is the subject" \
[email protected]
Это упрощённый пример, так как вам также необходимо позаботиться о кодировках, кодировках, максимальной длине строки... Но это в основном идея.
В качестве альтернативы вы можете написать script в Perl или PHP, а не в простой оболочке.
Update
Оболочка script представляет собой текстовый файл с окончанием строки Unix, который начинается с строки shebang, которая сообщает оболочке, что интерпретатор должен передать файл, выполнить некоторые команды на языке, который интерпретатор понимает и имеет разрешение на выполнение (в Unix - атрибут файла). Например, скажем, вы сохраняете следующее как hello-world
:
#!/bin/sh
echo Hello, world!
Затем вы назначаете разрешение на выполнение:
chmod +x hello-world
И вы можете, наконец, запустить его:
./hello-world
Что бы это ни было, это не связано с первоначальным вопросом. Вы должны ознакомиться с базовыми сценариями оболочки, прежде чем выполнять с ним сложные задачи. Здесь вы найдете пару ссылок о bash, популярной оболочке:
http://www.gnu.org/software/bash/manual/html_node/index.html
Ответ 2
Теги включают "sendmail", поэтому здесь можно использовать следующее решение:
(
echo "From: [email protected] "
echo "To: [email protected] "
echo "MIME-Version: 1.0"
echo "Content-Type: multipart/alternative; "
echo ' boundary="some.unique.value.ABC123/server.xyz.com"'
echo "Subject: Test HTML e-mail."
echo ""
echo "This is a MIME-encapsulated message"
echo ""
echo "--some.unique.value.ABC123/server.xyz.com"
echo "Content-Type: text/html"
echo ""
echo "<html>
<head>
<title>HTML E-mail</title>
</head>
<body>
<a href='http://www.google.com'>Click Here</a>
</body>
</html>"
echo "------some.unique.value.ABC123/server.xyz.com--"
) | sendmail -t
Обертка для sendmail может облегчить эту работу, например mutt:
mutt -e 'set content_type="text/html"' [email protected] -s "subject" < message.html
Ответ 3
До сих пор я нашел два быстрых способа в cmd linux
- Использовать почту старой школы
mail -s "$(echo -e "This is Subject\nContent-Type: text/html")" [email protected] < mytest.html
- Использовать mutt
mutt -e "my_hdr Content-Type: text/html" [email protected] -s "subject" < mytest.html
Ответ 4
Другим вариантом является sendEmail script http://caspian.dotconf.net/menu/Software/SendEmail/, он также позволяет вам установить тип сообщения как html и включить файл как тело сообщения. Подробнее см. Ссылку.
Ответ 5
Другая опция - msmtp.
Вам нужно настроить свой .msmtprc с чем-то вроде этого (например, используется gmail):
account default
host smtp.gmail.com
port 587
from [email protected]
tls on
tls_starttls on
tls_trust_file ~/.certs/equifax.pem
auth on
user [email protected]
password <password>
logfile ~/.msmtp.log
Затем просто позвоните:
(echo "Subject: <subject>"; echo; echo "<message>") | msmtp <[email protected]>
в script
Обновление. Для почты HTML вы также должны помещать заголовки, поэтому вы можете сделать такой файл:
From: [email protected]
To: [email protected]
Subject: Important message
Mime-Version: 1.0
Content-Type: text/html
<h1>Mail body will be here</h1>
The mail body <b>should</b> start after one blank line from the header.
И напишите ему как
cat email-template | msmtp [email protected]
То же самое можно сделать и с помощью командной строки, но может быть проще использовать файл.
Ответ 6
shell send html email - Форумы UNIX и Linux
http://www.unix.com/shell-programming-scripting/80973-shell-send-html-email.html
Отправка электронной почты из оболочки script - Сценарии оболочки
Ответ 7
cat > mail.txt <<EOL
To: <email>
Subject: <subject>
Content-Type: text/html
<html>
$(cat <report-table-*.html>)
This report in <a href="<url>">SVN</a>
</html>
EOL
А потом:
sendmail -t < mail.txt
Ответ 8
Mime header и from, to address также может быть включен в html файл сам.
Команда
cat cpu_alert.html | /usr/lib/sendmail -t
cpu_alert.html образец файла.
From: [email protected]
To: [email protected]
Subject: CPU utilization heigh
Mime-Version: 1.0
Content-Type: text/html
<h1>Mail body will be here</h1>
The mail body should start after one blank line from the header.
Пример кода доступен здесь: http://sugunan.net/git/slides/shell/cpu.php
Ответ 9
Вот мой (данная "почта" настроена правильно):
scanuser @owncloud: ~ $ vi sendMailAboutNewDocuments.sh
mail -s "You have new mail" -a "Content-type: text/html" -a "From: [email protected]" $1 << EOF
<html>
<body>
Neues Dokument: $2<br>
<a href="https://xxx/index.php/apps/files/?dir=/Post">Hier anschauen</a>
</body>
</html>
EOF
сделать исполняемый файл:
chmod +x sendMailAboutNewDocuments.sh
затем позвоните:
./sendMailAboutNewDocuments.sh [email protected] test.doc
Ответ 10
Используя CentOS 7 по умолчанию mailx (отображается как heirloom-mailx), я упростил это до простого использования текстового файла с требуемыми заголовками и статической границей для многочастной/смешанной и многочастной/альтернативной установки.
Я уверен, что вы можете выяснить, multipart/related, если вы хотите с той же настройкой.
test.txt:
--000000000000f3b2150570186a0e
Content-Type: multipart/alternative; boundary="000000000000f3b2130570186a0c"
--000000000000f3b2130570186a0c
Content-Type: text/plain; charset="UTF-8"
This is my plain text stuff here, in case the email client does not support HTML or is blocking it purposely
My Link Here <http://www.example.com>
--000000000000f3b2130570186a0c
Content-Type: text/html; charset="UTF-8"
<div dir="ltr">
<div>This is my HTML version of the email</div>
<div><br></div>
<div><a href="http://www.example.com">My Link Here</a><br></div>
</div>
--000000000000f3b2130570186a0c--
--000000000000f3b2150570186a0e
Content-Type: text/csv; charset="US-ASCII"; name="test.csv"
Content-Disposition: attachment; filename="test.csv"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_jj5qmzqz0
Границы определяют составные сегменты.
Идентификатор границы, который не имеет тире в конце, является начальной точкой сегмента.
Тот, с двумя чертами в конце, является конечной точкой.
В этом примере есть часть в главном разделе multipart/mixed для multipart/alternative.
Многоэлементный/альтернативный метод в основном говорит: "Откат к этому, ЕСЛИ приоритетная часть не выполняется" - в этом примере HTML-клиенты обычно воспринимают приоритет как HTML. Если почтовый клиент не отображает HTML, он возвращается к простому тексту.
Метод multipart/mixed, который инкапсулирует все это сообщение, в основном говорит, что здесь разный контент, отображающий оба.
В этом примере я разместил вложение в виде файла CSV на электронную почту. Вы увидите, что вложение подключается с помощью base64 в приведенной ниже команде.
Я добавил в качестве примера вложение, вам нужно будет настроить тип контента в соответствии с вложением и указать, будет ли он встроенным или нет.
X-Attachment-Id необходим для некоторых провайдеров, случайным образом идентифицируйте установленный вами идентификатор.
Команда для отправки по почте это:
echo -e "'cat test.txt; openssl base64 -e < test.csv'\n--000000000000f3b2150570186a0e--\n" | mailx -s "Test 2 $( echo -e "\nContent-Type: multipart/mixed; boundary=\"000000000000f3b2150570186a0e\"" )" -r [email protected] [email protected]
Как вы можете видеть в строке темы mailx, я статически вставляю многослойную границу, это первый заголовок, который увидит почтовый клиент.
Затем идет сбрасывание содержимого test.txt.
Что касается вложения, я использую openssl (который является довольно стандартным в системах) для преобразования файлового вложения в base64.
Кроме того, я добавил оператор закрытия границ в конце этого эха, чтобы обозначить конец сообщения.
Это работает вокруг проблем семейной реликвии и практически без сценариев.
Вместо этого эхо может быть фидом или любым другим количеством методов.
Ответ 11
Используйте CLI для массовой рассылки, эффективный и мощный инструмент для отправки динамических электронных писем в список рассылки с помощью одной простой команды: bulkmail mail
!
Ответ 12
В дополнение к правильному ответу от mdma, вы также можете использовать команду mail следующим образом:
mail [email protected] -s"Subject Here" -a"Content-Type: text/html; charset=\"us-ascii\""
Вы получите то, что ищете. Не забудьте указать <HTML>
и </HTML>
в письме. Вот быстрый скрипт, который я использую для отправки ежедневного отчета в формате HTML:
#!/bin/sh
(cat /path/to/tomorrow.txt mysql -h mysqlserver -u user -pPassword Database -H -e "select statement;" echo "</HTML>") | mail [email protected] -s"Tomorrow orders as of now" -a"Content-Type: text/html; charset=\"us-ascii\""