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"'
コマンドフラグに。