Centos

如何在 mutt 命令行中指定附件編碼?

  • July 22, 2018

我正在嘗試從 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.

我也試過open(MUTT, "|/usr/bin/mutt -e \"set file_charset=utf-8\" -a $xmlfile ...了,但這給了我一個Error in command line: file_charset: unknown variable.

我究竟做錯了什麼?

像往常一樣,優秀的 Arch wiki 有答案(https://wiki.archlinux.org/index.php/Mutt)。逐字引用:

電子郵件字元編碼

使用 Mutt 時,必須指定兩個級別的字元集:

  1. 用於編寫電子郵件的文本編輯器必須將其保存為所需的編碼。
  2. 然後 Mutt 將檢查電子郵件並根據您在 send_charset 變數中指定的優先級確定更合適的編碼。預設值:“us-ascii:iso-8859-1:utf-8”。

因此,如果您編寫的電子郵件包含 ISO-8859-1 中允許的字元(如“簡歷”),但沒有特定於 Unicode 的字元,那麼 Mutt 會將編碼設置為 ISO-8859-1。

要避免這種行為,請在 muttrc 中設置變數:

set send_charset="us-ascii:utf-8"

甚至

set send_charset="utf-8"

將使用從左側開始的第一個兼容字元集。由於 UTF-8 是 US-ASCII 的超集,因此將其放在 UTF-8 前面並沒有什麼壞處,它可以確保舊 MUA 在看到電子郵件標題中的字元集時不會感到困惑。

您可以從命令行執行此操作,而不是通過 muttrc 預先添加

-e 'set send_charset="utf-8"'

到命令標誌。

像這樣的東西怎麼樣:

$ 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

參考

引用自:https://unix.stackexchange.com/questions/79262