Как указать вложение кодировки в командной строке mutt?

Я пытаюсь отправить электронное письмо с вложением из Perl-скрипта.

Во-первых, я создаю вложение (xml-файл):

open(XMLFILE, ">:utf8", $xmlfile); print XMLFILE "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; print XMLFILE "<data>\n"; #print XMLFILE "...\n"; print XMLFILE "</data>\n"; close (XMLFILE); 

Я также попытался open(XMLFILE, ">", $xmlfile); с binmode XMLFILE, ":utf8"; ,

Затем я отправляю электронное письмо следующим образом:

 open(MUTT, "|/usr/bin/mutt -s \"TestSubject\" -a $xmlfile \"test\@example.com\""); binmode MUTT, ":utf8"; print MUTT ("TestBody"); close (MUTT); 

Тем не менее, как текстовая часть, так и вложение имеют Content-Type: text/plain; charset=iso-8859-1 Content-Type: text/plain; charset=iso-8859-1 .

Я также попытался open(MUTT, "|/usr/bin/mutt -e \"set file_charset=utf-8\" -a $xmlfile ... , но это дало мне Error in command line: file_charset: unknown variable .

Что я делаю не так?

Как насчет чего-то вроде этого:

 $ mutt -e "set content_type=text/html" Email address -s "subject" < test.html 

Измените его для того, что угодно content_type вы хотите. В Perl что-то вроде этого:

 open(MUTT, "|/usr/bin/mutt -e \"set content_type=text/xml\" -s \"TestSubject\" -a $xmlfile \"test\@example.com\""); 

Если вы не хотите использовать mutt вы можете использовать mail вместо этого:

 ### method #1 $ mail -a 'MIME-Version: 1.0' -a 'Content-Type: text/xml; charset=iso-8859-1' -a 'X-AUTOR: Some Guy' -s 'MTA STATUS: mail queue' <to user> -- -f <from user> < /tmp/eximrep.xml ### method #2 $ mail -a 'Content-type: text/xml; charset="us-ascii"' <to user> < /tmp/file.xml 

Вы также можете сделать это с помощью sendmail напрямую:

 ( echo "From: myuser@example.com" echo "To: user@example.net" echo "MIME-Version: 1.0" echo "Content-Type: multipart/mixed;" echo ' boundary="BOUNDARY"' echo "Subject: Test Message" echo "" echo "This is a MIME-encapsulated message" echo "--BOUNDARY" echo "Content-Type: text/plain" echo "" echo "This is what someone would see without an HTML capable mail client." echo "" echo "--BOUNDARY" echo "Content-Type: text/html" echo "" echo "<html> <body bgcolor='black'> <blockquote><font color='green'>GREEN</font> <font color='white'>WHITE</font> <font color='red'>RED</font></blockquote> </body> </html>" echo "--BOUNDARY--" ) | sendmail -t 

Рекомендации

  • Как отправить почту из командной строки linux, чтобы она отображалась как HTML для получателя?

Мне не удалось обновить версию mutt, но я нашел обходное решение – другие могут также найти это полезным.

Включение комментария со специальными символами позволяет perl и mutt выбирать правильную (utf-8) кодировку (вероятно, «ł» будет достаточно, но намерение становится понятным с символами умлаута):

В xml это выглядит так:

 <?xml ... ?> <?comment <!-- ł€èÄöÜß --> ?> <content> ... </content>