linuxのシステムから送られるメールの文字コードをUTF-8にしたいと思っています。

sendmailのデフォルトの文字コードを変えれば良いのだと思いますが、どのようにすれば良いでしょうか?

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

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/11/03 16:34:56
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:JULY No.2

回答回数966ベストアンサー獲得回数247

ポイント289pt

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

他4件のコメントを見る
id:JULY

> Userminというのは、webminの一種なんでしょうか?

Webmin の兄弟ソフト、というと分かりやすいかな。

Webmin がサーバの管理者向けなのに対し、Usermin は、そのサーバのユーザ向けで、例えば、ユーザ自身が自分のパスワードを変更するための Web インタフェースが用意されていたりします。

vacation プログラムは、歴史はとても古いのですが、近頃はあまり使われず、確かにディストリビューションに標準で添付される事は少ないですね。文字通り「休暇中」である事を告げるためのもので、同じ相手からのメールに対しては、一定期間は応答しない、といった機能があったりします。昔は、メーリングリストに vacation が送ったメールが入ってきて、その vacation を使った人が叩かれる、といった話がありました。

2012/11/05 11:04:29
id:hhashimo

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

2012/11/05 21:43:14

その他の回答2件)

id:oil999 No.1

回答回数1728ベストアンサー獲得回数320

ポイント210pt

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

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

他3件のコメントを見る
id:hhashimo

Webminのメールエイリアス設定で、指定したファイルを読み込んで自動返信する機能があります。linuxの機能なので、特定のスクリプトは使用していません。

しかし、読み込んだファイルがUTF-8でもsendmailにはiso-8859-1で送られているため文字化けしているようです。

この機能を使う限り、iso-8859-1で強制的に送信されるようなので、別プログラムの使用を考えいます。

2012/11/02 04:34:13
id:hhashimo

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

2012/11/03 16:33:22
id:JULY No.2

回答回数966ベストアンサー獲得回数247ここでベストアンサー

ポイント289pt

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

他4件のコメントを見る
id:JULY

> Userminというのは、webminの一種なんでしょうか?

Webmin の兄弟ソフト、というと分かりやすいかな。

Webmin がサーバの管理者向けなのに対し、Usermin は、そのサーバのユーザ向けで、例えば、ユーザ自身が自分のパスワードを変更するための Web インタフェースが用意されていたりします。

vacation プログラムは、歴史はとても古いのですが、近頃はあまり使われず、確かにディストリビューションに標準で添付される事は少ないですね。文字通り「休暇中」である事を告げるためのもので、同じ相手からのメールに対しては、一定期間は応答しない、といった機能があったりします。昔は、メーリングリストに vacation が送ったメールが入ってきて、その vacation を使った人が叩かれる、といった話がありました。

2012/11/05 11:04:29
id:hhashimo

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

2012/11/05 21:43:14
id:pigmon88 No.3

回答回数501ベストアンサー獲得回数25

ポイント1pt

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

id:hhashimo

私が読むにはそれで問題ないですが、不特定多数の顧客用なので、それでは困ります。

2012/11/03 16:25:55
  • id:orz66
    自動返信メールはVacationというプログラムで動いているはずなので
    エリアスの元のユーザーのホームディレクトリに.vacation.msgとかないでしょうか?
    無かった場合.forwaordというファイルがあればvi等で開くと.vacation.msgのファイルパス
    が書かれているはずです。

    文字コードを任意のものに変換する場合は
    nkfという漢字コード変換プログラムを使うか、直接.vacation.msgを編集するかです。

    nkfの場合
    http://centossrv.com/postfix-vacation.shtml


    直接編集の場合
    Content-type: text/plain; charset=UTF-8 ←追加

    http://www.atmarkit.co.jp/flinux/rensai/qmail14/qmail14b.html
    (この記事のMTAはqmailですが、vacationの理屈は同じはずです。)

    全て予想なのでコメント欄から失礼します。
  • id:hhashimo
    情報ありがとうございます。どうもウチのサーバーにはvacationがインストールされていないようで、関連ディレクトリもファイルも見当たりませんでした。
    webminはどうもそれとは別の機能を使ってるようですね。

    ただ、vacationをインストールすれば、別のperlやphpのプログラムを使わなくても文字コードを指定した自動返信が可能なようなので、それも検討します。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません