sendmailのデフォルトの文字コードを変えれば良いのだと思いますが、どのようにすれば良いでしょうか?
なお、管理システムはwebminを使っていますので、webmin上から設定可能なのであれば、それでも構いません。webminの言語設定はJapanese(JA_JP,UTF-8)です。
ズバリお答え頂いた方には400pt差し上げます。
よろしくお願いします。
linuxのシステムの自動返信メールなのですが、
であれば、その自動返信のプログラムで適切な文字コードで出力する、というのが基本です。
oil999 さんの回答の通り、sendmail 自体にデフォルトの文字コード、という概念はありません。渡された内容をそのまま送り出すだけです。
で、Base64 でのエンコードについて書かれていますが、これは、メールのヘッダ部に関しては ASCII コードしか使えないため、ASCII 以外の文字が含まれる場合に、Base64 でエンコードするのが一般的です(Quoted-pritable というエンコード方法もありますが、受信側が対応していない事があるので、Base64 の方が堅いです)。
しかし、本文部分に関しては、ヘッダ部に文字コードを宣言すると、任意の文字コードを記述する事ができます。
Perlによるメール送信スクリプト: m6 BLOG
oil999 さんが紹介されているページの続きで、実際の Perl スクリプトが書かれていますが、この中にある、
print SENDMAIL "Content-Type: text/plain; charset=iso-2022-jp\n";
この部分ですが、ここでは ISO-2022-JP、いわゆる 7bit JIS を指定しています。この行の前をさかのぼると、
# 本文を JIS 変換 $encoded_body = Jcode::convert($body, 'jis');
という記述が見つかります。送るメールの本文の内容を Jcode で JIS に変換した上で、メールのヘッダ部で、その文字コードを宣言しています。
つまり、「Content-Type: text/plain; charset=utf8」というヘッダにして、本文を UTF-8 で出力すれば UTF-8 のメールになり、受信した側が今時のメールソフトであれば、文字化けなどせず、正しく表示できる事が期待できます。
sendmailにデフォルト文字コードという概念はありません。
UTF-8の日本語テキストを渡したいのであれば、BASE64エンコードしてsendmailに渡す必要があります。
Perlでしたら以下の記事が参考になるでしょう。
http://ugawalab.miyakyo-u.ac.jp/m6/fukuchi/blog/2008/10/mimebase64sendmailutf8.html
Webminのメールエイリアス設定で、指定したファイルを読み込んで自動返信する機能があります。linuxの機能なので、特定のスクリプトは使用していません。
しかし、読み込んだファイルがUTF-8でもsendmailにはiso-8859-1で送られているため文字化けしているようです。
この機能を使う限り、iso-8859-1で強制的に送信されるようなので、別プログラムの使用を考えいます。
vacationというunixの拡張プログラムがあるようなので、それを使うか、フリーのphpのプログラムを使う予定です。
linuxのシステムの自動返信メールなのですが、
であれば、その自動返信のプログラムで適切な文字コードで出力する、というのが基本です。
oil999 さんの回答の通り、sendmail 自体にデフォルトの文字コード、という概念はありません。渡された内容をそのまま送り出すだけです。
で、Base64 でのエンコードについて書かれていますが、これは、メールのヘッダ部に関しては ASCII コードしか使えないため、ASCII 以外の文字が含まれる場合に、Base64 でエンコードするのが一般的です(Quoted-pritable というエンコード方法もありますが、受信側が対応していない事があるので、Base64 の方が堅いです)。
しかし、本文部分に関しては、ヘッダ部に文字コードを宣言すると、任意の文字コードを記述する事ができます。
Perlによるメール送信スクリプト: m6 BLOG
oil999 さんが紹介されているページの続きで、実際の Perl スクリプトが書かれていますが、この中にある、
print SENDMAIL "Content-Type: text/plain; charset=iso-2022-jp\n";
この部分ですが、ここでは ISO-2022-JP、いわゆる 7bit JIS を指定しています。この行の前をさかのぼると、
# 本文を JIS 変換 $encoded_body = Jcode::convert($body, 'jis');
という記述が見つかります。送るメールの本文の内容を Jcode で JIS に変換した上で、メールのヘッダ部で、その文字コードを宣言しています。
つまり、「Content-Type: text/plain; charset=utf8」というヘッダにして、本文を UTF-8 で出力すれば UTF-8 のメールになり、受信した側が今時のメールソフトであれば、文字化けなどせず、正しく表示できる事が期待できます。
> Userminというのは、webminの一種なんでしょうか?
Webmin の兄弟ソフト、というと分かりやすいかな。
Webmin がサーバの管理者向けなのに対し、Usermin は、そのサーバのユーザ向けで、例えば、ユーザ自身が自分のパスワードを変更するための Web インタフェースが用意されていたりします。
vacation プログラムは、歴史はとても古いのですが、近頃はあまり使われず、確かにディストリビューションに標準で添付される事は少ないですね。文字通り「休暇中」である事を告げるためのもので、同じ相手からのメールに対しては、一定期間は応答しない、といった機能があったりします。昔は、メーリングリストに vacation が送ったメールが入ってきて、その vacation を使った人が叩かれる、といった話がありました。
色々情報がありがとうございます。Vacation、便利そうなんで標準で欲しいところなんですけどね。
メールの文字コードはメールクライアントの設定に依存します。だからお使いのメーラーでutf-8に設定するだけです。
私が読むにはそれで問題ないですが、不特定多数の顧客用なので、それでは困ります。
> Userminというのは、webminの一種なんでしょうか?
2012/11/05 11:04:29Webmin の兄弟ソフト、というと分かりやすいかな。
Webmin がサーバの管理者向けなのに対し、Usermin は、そのサーバのユーザ向けで、例えば、ユーザ自身が自分のパスワードを変更するための Web インタフェースが用意されていたりします。
vacation プログラムは、歴史はとても古いのですが、近頃はあまり使われず、確かにディストリビューションに標準で添付される事は少ないですね。文字通り「休暇中」である事を告げるためのもので、同じ相手からのメールに対しては、一定期間は応答しない、といった機能があったりします。昔は、メーリングリストに vacation が送ったメールが入ってきて、その vacation を使った人が叩かれる、といった話がありました。
色々情報がありがとうございます。Vacation、便利そうなんで標準で欲しいところなんですけどね。
2012/11/05 21:43:14