Introduction

ブログ内検索

  • このサイトの記事を検索 by Google

おすすめの一冊!

無料ブログはココログ

« Pocket (Read It Later) の Read リストが見つからない | トップページ | iTunes ライブラリが認識されず »

2012-05-23

Linux で日本語メール

Linux 上の Perl スクリプトで日本語メールを送信するのに半日かかったので、メモ。

落とし穴は、Subject の MIME エンコードでした。


まず、本文は Unicode で書いておくのが簡単かと思います。
UTF-8N (BOM 無しの UTF8)で書いておいて、ヘッダには、
Content-Type: text/plain; charset="utf-8"
と指定しておくのが楽。 あとはパイプで /usr/sbin/sendmail に食わせれば OK. ただし、日本語の Subject は UTF-8 で書いておいても化けます。 なぜなら、ヘッダは "Content-Type" の範疇じゃないから。 ヘッダはいわゆる MIME エンコードをしておく必要があります。 MIME エンコードは、Encode::MIME::Header でできます。 具体的に言うと、次のコードでできます。
use Encode qw(encode); $subject = encode('MIME-Header-ISO_2022_JP', $hogehoge);
たぶん、スクリプト先頭で、
use utf8;
をしておく必要があるかもしれません。 最終的には次のようなコードを使いました。
#!/usr/bin/env perl use strict; use warnings; use utf8; use Encode qw(encode); my $text = sub { open my $fh, '<', "./hogehoge.txt" or die $!; local $/ = undef; my $s = <$fh>; close $fh or die; return $s; }->(); my $email = sub { use Email::Simple; return Email::Simple->new($text); }->(); $email->header('To') = 'hogehoge@example.com'; $email->header('Subject') = encode('MIME-Header-ISO_2022_JP', $title); { open $fh, '|-', '/usr/sbin/sendmail -t' or die $!; print $fh $email->as_string; close $fh or die $!; }
ご参考まで。

« Pocket (Read It Later) の Read リストが見つからない | トップページ | iTunes ライブラリが認識されず »