Отправка письма из shell
Как отправить письмо с вложением из оболочки UNIX? Есть несколько вариантов, я рассмотрю самые простые, – системными средствами и сторонним ПО.
mail + uuencode
Почти наверняка самый рабочий способ на любой системе.
~> ( echo "body text message" ; echo ; cat file.txt | uuencode file.txt ) | mail -s 'Subject' to@domain.tld
в почтовый ящик придет сообщение в виде:
To: to@domain.tld Subject: Subject Message-Id: <20111205165235.0DB932ECAC@dom.tld> Date: Mon, 5 Dec 2011 16:52:35 +0000 (UTC) From: sender@domain.tld (sender) body text message begin 644 file.txt M+W-B:6XO;61M9G,@+7,@-#`Y-DT@+6D@,3`R-"`M=R!M>7-Q;#IM>7-Q;"`M M<"`W-S<@;60P("]M>7-Q;%]T;7`*(R,M+2TM+2TC(PT*26YC;W)R96-T(&EN ... M;F1E>"YP:'`[(&-D("T[(&QS("UL82`D:2]I;F1E>"YP:'`[(&1O;F4*(R,M )+2TM+2TC(PH* ` end
Плюсы: универсальный способ, не требует установки дополнительного ПО
Минусы: не все почтовые клиенты понимают этот формат и письмо возможно придется раскодировывать. Если вы пользуетесь почтой Гугла (GMail) – вам повезло, такой формат он понимает и файл можно будет скачать как обычный прикрепленный файл.
mail + base64
~> cat file.txt | base64 | mail -s 'Subject' to@dom.tld ~> cat file.txt | uuencode -m file.txt | mail -s 'Subj' to@dom.tld
Плюсы: файл в письме отправится
Минусы: письмо наверняка будет не понято почтовым клиентом и вложение будет просто выведено в виде текста, который нужно дополнительно распаковывать. GMail такие письма не понимает.
sendmail
~> ( cat header ; cat ssh.txt | base64 ) | /usr/sbin/sendmail -t ~> ( cat header ; cat ssh.txt | uuencode -m ssh.txt ) | /usr/sbin/sendmail -t ~> ~> ( cat header ; cat ssh.txt | uuencode ssh.txt ) | /usr/sbin/sendmail -t # это не правильно, но GMail понимает и такой формат
В файл header предварительно внесены необходимые заголовки:
~> cat header Subject: With attachment From: me@dom.tld To: to@domain.tld Content-Type: text/plain; charset=UTF-8 Content-Disposition: attachment; filename="file.txt" Content-Transfer-Encoding: base64
Здесь мы явно указываем кодировку файла (UTF-8), имя файла, которое будет показываться в письме (может не совпадать с именем файла, который мы кодируем) и метод кодирования (base64). В третьем примере файл будет закодирован в uuencode, это тоже может вызвать сложности у почтовых клиентов. uuencode –m, в отличие от base64, помечает начало и конец закодированных данных, так же, как и просто uuencode. В первом случае начало данных будет помечено строкой:
begin-base64 644 file.txt
конец:
====
во втором случае:
begin 644 file.txt
конец:
end
Плюсы: письмо понимается большинством почтовых клиентов
Читать остальную часть заметки »Теги: attach, attachement, FreeBSD, linux, mail, shell, ssh, unix, вложение, консоль