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
_が得られました。
私は何が間違っているのですか?
Muttバージョンを更新できませんでしたが、回避策を見つけました。他の人もこれが役立つと思うかもしれません。
特殊文字を含むコメントを含めると、Perlとmuttは正しい(utf-8)エンコーディングを選択できます(おそらく「ł」で十分ですが、umlaut文字を使用すると意図が明確になります)。
Xmlでは、これは次のようになります。
<?xml ... ?>
<?comment <!-- ł€èÄöÜß --> ?>
<content>
...
</content>
いつものように、優れたArch wikiには答えがあります( https://wiki.archlinux.org/index.php/Mutt )。逐語的に引用する:
電子メールの文字エンコード
Muttを使用する場合、指定する必要のある文字セットには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: [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