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つのレベルの文字セットを指定する必要があります。
- 電子メールを作成するために使用されるテキストエディタは、それを必須エンコーディングとして保存する必要があります。
- その後、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>