2010-04-07 2 views
48

Мне нужно отправить электронное письмо с html-форматом. У меня есть только командная строка linux и команда «mail».Как отправить HTML-письмо с помощью командной строки linux

В настоящее время использует:

echo "To: [email protected]" > /var/www/report.csv 
echo "Subject: Subject" >> /var/www/report.csv 
echo "Content-Type: text/html; charset=\"us-ascii\"" >> /var/www/report.csv 

echo "<html>" >> /var/www/report.csv 
mysql -u ***** -p***** -H -e "select * from users LIMIT 20" dev >> /var/www/report.csv 
echo "</html>" >> /var/www/report.csv 

mail -s "Built notification" [email protected] < /var/www/report.csv 

Но в моем почтовом агенте я получаю только обычный/текст.

alt text

+0

Читатели ответов на этот вопрос остерегайтесь: есть несколько различных программ, называемых 'mail', например,' реликвия-mailx' и 'BSD-mailx' на Debian Jessie , Если команда «mail» из ответа здесь не работает для вас, вероятно, вы используете неправильную «почту». Обратитесь к менеджеру пакетов вашего дистрибутива, чтобы установить правильный пакет, и используйте конкретное имя этого двоичного файла (например, 'bsd-mailx' на Debian), чтобы решить эту проблему. Подробнее об этом здесь: http://heirloom.sourceforge.net/mailx_history.html –

ответ

1

вы должны использовать «добавить» режим перенаправления >> вместо >

+0

извините, это старый код. Я исправил это. –

+8

Я думаю, что это был комментарий, а не ответ. –

2

Попробуйте с:

echo "To: [email protected]" > /var/www/report.csv 
echo "Subject: Subject" >> /var/www/report.csv 
echo "MIME-Version: 1.0" >> /var/www/report.csv 
echo "Content-Type: text/html; charset=\"us-ascii\"" >> /var/www/report.csv 
echo "Content-Disposition: inline" >> /var/www/report.csv 

echo "<html>" >> /var/www/report.csv 
mysql -u ***** -p***** -H -e "select * from users LIMIT 20" dev >> /var/www/report.csv 
echo "</html>" >> /var/www/report.csv 

mail -s "Built notification" [email protected] < /var/www/report.csv 
+0

Это не работает. $ lsb_release -a Distributor ID: \t Ubuntu Описание: \t Ubuntu 10.04.4 LTS выпуска: \t 10,04 Codename: \t осознанных – lrkwz

+0

@Simone, это не работает отлично из-за порядка ** MIME-Version * * и ** Content-Tye **. Вы должны поместить эту информацию до ** Subject ** для работы с большинством вкусов unix/linux. –

5

Проблема в том, что при перенаправлении файла в «почте», как это, он используется только для тела сообщения. Все заголовки, которые вы вставляете в файл, будут отправляться в тело.

Try:

mail --append="Content-type: text/html" -s "Built notification" [email protected] < /var/www/report.csv 

--append позволяет добавлять произвольные заголовки к почте, в котором вы должны указать тип содержимого и контент-расположение. Не нужно встраивать заголовки To и в ваш файл или указывать их с помощью --append, так как вы неявно устанавливаете их в командной строке уже (-s является объектом, а [email protected] автоматически становится To).

+1

не имеют этой опции в моей почтовой команде mail: недопустимая опция - a Использование: mail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] to-addr .. [- sendmail-options ...] mail [-iInNv] -f [имя] mail [-iInNv] [-u user] –

+0

Меня нет, какая версия/unix поддерживает эту опцию? – nylund

+0

@nylund: 'mail (GNU Mailutils 2.2)'. это выключено ubuntu 12.04, но будет и в более старых версиях, учитывая, что этот ответ уже почти 3 года. –

45

Это работает для меня:

echo "<b>HTML Message goes here</b>" | mail -s "$(echo -e "This is the subject\nContent-Type: text/html")" [email protected] 
+5

не работает для меня ... чистые решения ниже – ftravers

+0

работали над OS X 10.8.4 – jobwat

+0

Я бы сказал, что это ошибка в реализации почты OSX, хотя ее нужно сочетать с другими ошибками, которые можно использовать. Я уверен, что вокруг будет несколько веб-скриптов, которые не будут правильно проверять возврат каретки в том, что они вставляют в строки темы. – mc0e

35

Моя версия почты не --append и слишком умна для echo -e \n -trick (он просто заменяет \ п с пространством). Это, однако, -a:

mail -a "Content-type: text/html" -s "Built notification" [email protected] < /var/www/report.html 
+0

Работает на Ubuntu 14.04.1 LTS, почта набор для Bsd-mailx – kidmose

+0

Я использую таким образом 'echo \' curl -L www.google.es \ '| mail -a "Content-type: text/html" -s "содержимое веб-сайта" email @ email.com' вместо '<'. Для моего удобства я создаю сценарий/usr/local/bin, чтобы обойти большую часть команды. Я просто использую 'wmail url email' – erm3nda

16

сделать файл с именем tmp.html и поместить следующую строку в ней:

<b>my bold message</b> 

Затем вставьте все это в командной строке: (с скобкой и все).

(
    echo To: [email protected] 
    echo From: [email protected] 
    echo "Content-Type: text/html; " 
    echo Subject: a logfile 
    echo 
    cat tmp.html 
) | sendmail -t 

Письмо будет отправлено. И сообщение появилось как жирный, а не с тегами <b>.

Источник:
How to send a html email with the bash command "sendmail"?

4

На OS X (10.9.4) cat работы, и проще, если ваш адрес электронной почты уже в файле:

cat email_template.html | mail -s "$(echo -e "Test\nContent-Type: text/html")" [email protected] 
+1

work find in debian server –

2

С реликвией-mailx вы можете изменить Sendmail программу на крюке сценарий, замените заголовки там, а затем использовать Sendmail.

Сценарий я использую (~/bin/sendmail-hook):

#!/bin/bash 

sed '1,/^$/{ 
s,^\(Content-Type: \).*$,\1text/html; charset=utf-8,g 
s,^\(Content-Transfer-Encoding: \).*$,\18bit,g 
}' | sendmail [email protected] 

Этот сценарий изменяет значения в заголовке письма следующим образом:

  • Content-Type: в text/html; charset=utf-8
  • Content-Transfer-Encoding: к 8bit (не уверен, это действительно необходимо).

Чтобы отправить HTML электронной почты:

mail -Ssendmail='~/bin/sendmail-hook' \ 
    -s "Built notification" [email protected] < /var/www/report.csv 
+0

По какой-то причине я не могу заставить это работать в функции, но вы действительно можете использовать это как отдельный исполняемый файл. Это сработало, когда других предложений на этой странице не было. – bgStack15

+0

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

+0

[Не могу понять, как это сделать в чате или в PM.] Могу ли я указать свою почтовую команду ? '. mail -Ssendmail = '~/bin/sendmail-hook' -s "Subject" [email protected] bgStack15

0

бился с подобной проблемой (с почтой) в одном из post_receive крючков моего GIT и, наконец, я узнал, что Sendmail на самом деле работает лучше для такого рода вещи, особенно если вы знаете немного о том, как создаются электронные письма (и кажется, что вы знаете). Я знаю, что этот ответ приходит очень поздно, но, возможно, это будет полезно и другим. Я использовал оператор heredoc и использовал функцию, чтобы она расширила переменные, поэтому она также может запускать встроенные скрипты. Просто проверить это (Баш скрипт):

#!/bin/bash 
recipients=(
    '[email protected]' 
    '[email protected]' 
# '[email protected]' 
); 
sender='[email protected]'; 
subject='Oh, who really cares, seriously...'; 
sendmail -t <<-MAIL 
    From: ${sender} 
    `for r in "${recipients[@]}"; do echo "To: ${r}"; done;` 
    Subject: ${subject} 
    Content-Type: text/html; charset=UTF-8 

    <html><head><meta charset="UTF-8"/></head> 
    <body><p>Ladies and gents, here comes the report!</p> 
    <pre>`mysql -u ***** -p***** -H -e "SELECT * FROM users LIMIT 20"`</pre> 
    </body></html> 
MAIL 

ноты обратных кавычек в MAIL части, чтобы сгенерировать выходные и помнить, что <<- операторских полосы только нашивки (не пробела) с начала строки, так что в этом случае copy-paste не будет работать (вам нужно заменить углубление соответствующими вкладками). Или используйте оператор << и не делайте никаких отступов. Надеюсь, это поможет кому-то. Конечно, вы можете использовать backticks вне o MAIL part и сохранять вывод в какой-то переменной, которую позже можете использовать в части MAIL по вкусу и удобочитаемости. И я знаю, #!/bin/bash не всегда работает на каждой системе.

0

Я нашел очень простое решение: добавьте в почтовую команду модификатор -aContent-Type: text/html.

В вашем случае будет:

mail -aContent-Type:text/html -s "Built notification" [email protected] < /var/www/report.csv 
Смежные вопросы