人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

linuxのシステムから送られるメールの文字コードをUTF-8にしたいと思っています。
sendmailのデフォルトの文字コードを変えれば良いのだと思いますが、どのようにすれば良いでしょうか?

なお、管理システムはwebminを使っていますので、webmin上から設定可能なのであれば、それでも構いません。webminの言語設定はJapanese(JA_JP,UTF-8)です。

ズバリお答え頂いた方には400pt差し上げます。
よろしくお願いします。

●質問者: hhashimo
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● oil999
●210ポイント

sendmailにデフォルト文字コードという概念はありません。
UTF-8の日本語テキストを渡したいのであれば、BASE64エンコードしてsendmailに渡す必要があります。

Perlでしたら以下の記事が参考になるでしょう。
http://ugawalab.miyakyo-u.ac.jp/m6/fukuchi/blog/2008/10/mimebase64sendmailutf8.html


hhashimoさんのコメント
ご回答頂きましてありがとうございます。 Perlやphp等から送るメールではなくて、sendmailのメールエイリアスを使用した linuxのシステムの自動返信メールなのですが、それでも上記記事は参考になるのでしょうか?

hhashimoさんのコメント
さらに調べたところ、どうもwebminやlinux単体では出来なくて、メールエイリアスの設定で別プログラムに転送してから返信しないと文字コードは変えられないようですね。

oil999さんのコメント
「linuxのシステムの自動返信メール」という意味がよく分からないのですが、通常はエイリアスの先に何らかの返信用のスクリプトを書いてあるはずです。 たとえばPerlであれば、以下の記事が参考になるでしょう。 http://2nd.scoutroll.net/pg/perl/auto_mail.html

hhashimoさんのコメント
Webminのメールエイリアス設定で、指定したファイルを読み込んで自動返信する機能があります。linuxの機能なので、特定のスクリプトは使用していません。 しかし、読み込んだファイルがUTF-8でもsendmailにはiso-8859-1で送られているため文字化けしているようです。 この機能を使う限り、iso-8859-1で強制的に送信されるようなので、別プログラムの使用を考えいます。

hhashimoさんのコメント
vacationというunixの拡張プログラムがあるようなので、それを使うか、フリーのphpのプログラムを使う予定です。

2 ● JULY
●289ポイント ベストアンサー

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 のメールになり、受信した側が今時のメールソフトであれば、文字化けなどせず、正しく表示できる事が期待できます。


hhashimoさんのコメント
ご返答ありがとうございます。 自動返信はショッピングサイトの顧客に対するもので、ショッピングサイトがphpで出来ていて、私もphpの方が馴染みがあるとから、別プログラムを使う場合は、phpを 考えていますが、基本は同じでしょうから参考にいたします。

hhashimoさんのコメント
vacationというunixの拡張プログラムがあるようなので、それを使うか、フリーのphpのプログラムを使う予定です。

JULYさんのコメント
補足があります。 メールの本文を UTF-8 でそのまま送る時のメールヘッダは、私の回答だと Content-Type だけに読めてしまいますが、正しくは、次の3つのヘッダです。 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit > vacationというunixの拡張プログラムがあるようなので、それを使うか、 > フリーのphpのプログラムを使う予定です。 決まった文章だけなら、vacation が簡単ですね。ヘッダ部分の日本語を Base64 エンコード済みの文字列で記述して、前述のおまじないのヘッダを書いて、本文を UTF-8、という .vacation.msg を用意すれば OK のはずです。Usermin からも vacation の設定ができたと思います。ただ、Usermin で vacation のメッセージを保存した時に、UTF-8 で保存できるかどうか、確認していません。 php での日本語メールだと、玉石混淆に都市伝説もあるので、注意が必要だと思います。 例えば、oil999 さんが紹介した、Perl を使った、メールヘッダの Base64 エンコードですが、php だと mb_encode_mimeheader という関数があります。しかし、これで意図したように変換されるようにするために、ああだ、こうだ、という話があって、下記のサイトに、検証結果がありました。 http://www.cpa-lab.com/tech/0153 php の日本語メール送信用ライブラリとして、多機能ではありますが、qdmail というライブラリが強力のようです。 http://hal456.net/qdmail/

hhashimoさんのコメント
情報ありがとうございます。 Userminというのは、webminの一種なんでしょうか? 私の環境では、似たようなことは出来ますが、vacationとは異なるようです。(vacationのファイルが見当たらない) phpでなくてはならない理由もないので、情報の多いperlでやろうかとも考えています。

JULYさんのコメント
> Userminというのは、webminの一種なんでしょうか? Webmin の兄弟ソフト、というと分かりやすいかな。 Webmin がサーバの管理者向けなのに対し、Usermin は、そのサーバのユーザ向けで、例えば、ユーザ自身が自分のパスワードを変更するための Web インタフェースが用意されていたりします。 vacation プログラムは、歴史はとても古いのですが、近頃はあまり使われず、確かにディストリビューションに標準で添付される事は少ないですね。文字通り「休暇中」である事を告げるためのもので、同じ相手からのメールに対しては、一定期間は応答しない、といった機能があったりします。昔は、メーリングリストに vacation が送ったメールが入ってきて、その vacation を使った人が叩かれる、といった話がありました。

hhashimoさんのコメント
色々情報がありがとうございます。Vacation、便利そうなんで標準で欲しいところなんですけどね。

3 ● pigmon88
●1ポイント

メールの文字コードはメールクライアントの設定に依存します。だからお使いのメーラーでutf-8に設定するだけです。


hhashimoさんのコメント
私が読むにはそれで問題ないですが、不特定多数の顧客用なので、それでは困ります。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ