muttコマンドラインで添付ファイルのエンコーディングを指定する方法は?

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

私も試してみましたが、open(MUTT, "|/usr/bin/mutt -e \"set file_charset=utf-8\" -a $xmlfile ...それは私にError in command line: file_charset: unknown variable

私は何が間違っていましたか?

答え1

いつものように、素晴らしいArch wikiに答えがあります(https://wiki.archlinux.org/index.php/Mutt)。そのまま引用:

電子メール文字エンコード

Muttを使用するときは、2つのレベルの文字セットを指定する必要があります。

  1. 電子メールを作成するために使用されるテキストエディタは、それを必須エンコーディングとして保存する必要があります。
  2. その後、Muttは電子メールを調べ、send_charset変数に指定した優先順位に基づいてどのエンコーディングがより適切かを決定します。既定値: "us-ascii:iso-8859-1:utf-8"。

したがって、ISO-8859-1で許可されている文字(「resume」など)が含まれているが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"'

コマンドフラグに。

答え2

次のようなものはどうですか?

$ 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: [email protected]"
echo "To: [email protected]"
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

引用する

答え3

muttバージョンを更新できませんでしたが、解決策が見つかりました。他の人もこの方法が役に立ちます。

特殊文字を含むコメントを含めると、Perlとmuttが正しい(utf-8)エンコーディングを選択できます(おそらく「ł」で十分ですが、ウムラウト文字を使用すると意図がより明確になります)。

XMLでは、次のようになります。

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

関連情報