[debian-users 00690] mail コマンドのcharset
こんにちは。 mailコマンドですが、今ある2台のdebianで異なるcharsetで送信されます。 1台の方は Content-Type: text/plain; charset="ANSI_X3.4-1968" もう一台の方は Content-Type: text/plain; charset="UTF-8" 送信コマンドは mail -s "xxxxxxxx" foo@sendto.address です。 localeは LANG=C です。 特に問題ではないのですが、どこの何を参照してcharsetを決めているのでしょ うか? 野村 -- ************** Nomura Technical Management Office ************** Tomoo Nomura nomura@tmo.co.jp http://www.tmo.co.jp/ Phone: +81-78-797-0240 Fax: +81-50-5329-9329 Guitar Salon TMO http://www.tmo.co.jp/salon/ ****************************************************************
mailコマンドが/usr/bin/mailで、それがbsd-mailxだという前提です。 確認はこのコマンドで。 $ update-alternatives --display mailx または $ ls -l /usr/bin/mail /etc/alternatives/mail From: Tomoo Nomura <nomurat@tmo.co.jp> Subject: [debian-users 00690] mail コマンドのcharset Date: Fri, 27 Nov 2020 09:41:37 +0900
1台の方は Content-Type: text/plain; charset="ANSI_X3.4-1968" もう一台の方は Content-Type: text/plain; charset="UTF-8"
送信コマンドは mail -s "xxxxxxxx" foo@sendto.address です。
再現実験をしてもらうのであれば、メール本文も固定のほうがよいでしょう。 (でも、今回はあまり影響ないかも?) $ echo abcd | mail -s 以下略
localeは LANG=C です。
localeコマンドを実行してみてください。 私の環境ではこんな感じ。 $ locale LANG=ja_JP.UTF-8 LANGUAGE= LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8" LC_ALL= $ この状態で、無指定のmailコマンドでUTF-8、LC_ALL=CでANSI_X3.4-1968に なりました。
特に問題ではないのですが、どこの何を参照してcharsetを決めているのでしょ うか?
manページをみてみるとか。 mail(1)の、“Character sets and MIME”あたり、でしょうか。 https://manpages.debian.org/buster/bsd-mailx/mail.1.en.html#Character_sets_a... “ANSI_X3.4-1968”で検索してもよいのかも。 -- 喜瀬“冬猫”浩
KISE Hiroshi 様 ありがとうございました。とりあえず、 LC_ALL=en_US.UTF-8 を入れればUTF-8になりました。 LANG=Cでしたが、その他は LC_MONETARY=en_US.utf8 LC_PAPER=en_US.utf8 LC_MEASUREMENT=en_US.utf8 LC_TIME=en_US.utf8 LC_NUMERIC=en_US.utf8 としていたので、UTF-8になると思っていたのですが、LC_ALLが必要だったよう です。 ただ、もう一台の方は LC_ALL= でもcharset=UTF-8になってます。 bsd-mailxのバージョンは同じで、8.1.2-0.201808 です。 う〜ん。 ただし、utf-8となる側のマシンのpostfixはansiとなる側のマシンにrelayして 発信しています。そこで、uft-8となる側のマシンから直接発信してみました。 すると、ansiとなり2台の結果は同じになりました。 結論、postfixがrelayで受け取ったメールはutf-8となり、直接発するメールは ansiとなるようです。postfixの設定になにかありそうです。いずれにしろ、 LC_ALL=en_US.UTF-8をいれればどちらもutf-8になるようです。 postfixを調べてみます。 ありがとうございました。 野村 On 11/27/20 10:46 PM, KISE Hiroshi wrote:
mailコマンドが/usr/bin/mailで、それがbsd-mailxだという前提です。 確認はこのコマンドで。 $ update-alternatives --display mailx または $ ls -l /usr/bin/mail /etc/alternatives/mail
From: Tomoo Nomura <nomurat@tmo.co.jp> Subject: [debian-users 00690] mail コマンドのcharset Date: Fri, 27 Nov 2020 09:41:37 +0900
1台の方は Content-Type: text/plain; charset="ANSI_X3.4-1968" もう一台の方は Content-Type: text/plain; charset="UTF-8"
送信コマンドは mail -s "xxxxxxxx" foo@sendto.address です。
再現実験をしてもらうのであれば、メール本文も固定のほうがよいでしょう。 (でも、今回はあまり影響ないかも?)
$ echo abcd | mail -s 以下略
localeは LANG=C です。
localeコマンドを実行してみてください。 私の環境ではこんな感じ。
$ locale LANG=ja_JP.UTF-8 LANGUAGE= LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8" LC_ALL= $
この状態で、無指定のmailコマンドでUTF-8、LC_ALL=CでANSI_X3.4-1968に なりました。
特に問題ではないのですが、どこの何を参照してcharsetを決めているのでしょ うか?
manページをみてみるとか。 mail(1)の、“Character sets and MIME”あたり、でしょうか。
https://manpages.debian.org/buster/bsd-mailx/mail.1.en.html#Character_sets_a...
“ANSI_X3.4-1968”で検索してもよいのかも。
-- ************** Nomura Technical Management Office ************** Tomoo Nomura nomura@tmo.co.jp http://www.tmo.co.jp/ Phone: +81-78-797-0240 Fax: +81-50-5329-9329 Guitar Salon TMO http://www.tmo.co.jp/salon/ ****************************************************************
下森です。 postfixの設定というより動いてるプロセスのユーザーの環境設定によるんじゃないですかね? postfixってユーザーがあるのかどうかも知らないですけど。 On Sun, 29 Nov 2020 06:50:45 +0900 Tomoo Nomura <nomurat@tmo.co.jp> wrote:
結論、postfixがrelayで受け取ったメールはutf-8となり、直接発するメールは ansiとなるようです。postfixの設定になにかありそうです。いずれにしろ、 LC_ALL=en_US.UTF-8をいれればどちらもutf-8になるようです。 postfixを調べてみます。
-- SHITAMORI Akira <sitamo@gmail.com>
mailコマンド(bas-mailx)がContent-Typeヘッダを追加しているか、について。 mailコマンドは一時ファイル /tmp/R* を作成しているので、次のようにすれば 確認できそうです。 $ echo abcd | env LC_ALL=ja_JP.UTF-8 strace -s 255 -e trace=write mail -s hoge foobar@example.com write(3, "abcd\n", 5) = 5 write(4, "To: foobar@example.com\nSubject: hoge\nMIME-Version: 1.0\nContent-Type: text/plain; charset=\"UTF-8\"\nContent-Transfer-Encoding: 8bit\n\nabcd\n", 135) = 135 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=675303, si_uid=121, si_status=0, si_utime=0, si_stime=0} --- +++ exited with 0 +++ $ さらに、私の環境で LC_ALL=en_US.UTF-8 で試したところ、 write(4, "To: foobar@example.com\nSubject: hoge\nMIME-Version: 1.0\nContent-Type: text/plain; charset=\"ANSI_X3.4-1968\"\nContent-Transfer-Encoding: 8bit\n\nabcd\n", 144) = 144 となりました。これ、ロケールの設定によるようです。 $ locale -a C C.UTF-8 POSIX ja_JP.utf8 $ /etc/locale.genを編集してen_US.UTF-8を有効にし、“locale-gen”を 実行したあとに再度上記のmailコマンドを実行したところ、 write(4, "To: foobar@example.com\nSubject: hoge\nMIME-Version: 1.0\nContent-Type: text/plain; charset=\"UTF-8\"\nContent-Transfer-Encoding: 8bit\n\nabcd\n", 135) = 135 になりました。 ソースコードをみてみました。Content-Typeを扱うのはパッチ部分のみ? https://salsa.debian.org/debian/bsd-mailx/-/blob/master/debian/patches/33-Ad... + const char* const cs = nl_langinfo(CODESET); + ADDHEADER("MIME-Version", "1.0"); + ADDHEADER("Content-Type", "text/plain; charset=\"%s\"", + cs && *cs ? cs : "ANSI_X3.4-1968"); + ADDHEADER("Content-Transfer-Encoding", "8bit"); 不明なロケールのときに ANSI_X3.4-1968 を付けるようです。 -- 喜瀬“冬猫”浩
participants (3)
-
KISE Hiroshi -
SHITAMORI Akira -
Tomoo Nomura