web-dev-qa-db-ja.com

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_が得られました。

私は何が間違っているのですか?

4
Martin Hennings

Muttバージョンを更新できませんでしたが、回避策を見つけました。他の人もこれが役立つと思うかもしれません。

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

Xmlでは、これは次のようになります。

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

いつものように、優れた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で許可されている文字(「レジュメ」など)を使用して、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
jazmit

このようなものはどうですか:

$ 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

参考文献

2
slm