MIME::Lite - メールを簡単に送信
MIME::Liteモジュールを使えばメールを簡単に送信することができます。
MIME::Liteはデフォルトでsenmailコマンドを利用するのでsendmailあるいはpostfixをインストールしておきましょう。
メールの送信方法にはいくつかの手法がありますが、sendmailコマンドでメールを送信するのが、メールのいろいろな問題に対処するのに簡単だと思います。
メールを送信する
メールを送信するには以下のようにします。マルチパートメッセージという形式で作成して、テキストや画像をアタッチして送信するのが簡単です。
use MIME::Lite; # マルチパートメッセージの作成 my $msg = MIME::Lite->new( From => 'me@myhost.com', To => 'you@yourhost.com', Cc => 'some@other.com, some@more.com', Subject => 'A message with 2 parts...', Type => 'multipart/mixed' ); # テキストを追加 $msg->attach( Type => 'TEXT', Data => "Here's the GIF file you wanted" ); # 画像を追加 $msg->attach( Type => 'image/gif', Path => 'aaa000123.gif', Filename => 'logo.gif', Disposition => 'attachment' ); # メールを送信 $msg->send;
- newメソッドで送信内容を作成します。
- atachメソッドでテキストや画像などのデータを追加します。
- sendメソッドでメールを送信します。
MIME::Liteで日本語のメールを送る
MIME::Liteで日本語のメールを送る場合は、エンコーディングについて考える必要があります。
次の二つのことを覚えましょう。
- ヘッダ部分のタイトル(Subject)はMIME-Header-ISO_2022_JPでエンコードします。
- 本文のテキストデータについてはISO-2022-JPでエンコードします。
UTF-8でのエンコーディングでもたいていの場合はよいかとは思うのですが、上記のエンコーディングを使っておくと安全です。
ソースコードはUTF-8で保存して、先頭ではutf8プラグマを有効にしましょう。
上記のサンプルを日本語送信用に書き直すと次のようになります。
use utf8; use MIME::Lite; use Encode 'encode'; # マルチパートメッセージの作成 my $msg = MIME::Lite->new( From => 'me@myhost.com', To => 'you@yourhost.com', Cc => 'some@other.com, some@more.com', Subject => encode('MIME-Header-ISO_2022_JP', 'メールタイトル'), Type => 'multipart/mixed' ); # テキストを追加 $msg->attach( Type => 'TEXT', Data => encode('ISO-2022-JP', 'メール本文のテキスト'), ); # 画像を追加 $msg->attach( Type => 'image/gif', Path => 'aaa000123.gif', Filename => 'logo.gif', Disposition => 'attachment' ); # メールを送信「 $msg->send;
UTF-8で送信する場合
2017年現在は、どうなっているのかはよくわかりませんが、UTF-8で送っちゃう場合も多いような気もしますので、そちらのサンプルも掲載しておきます。
use utf8; use MIME::Lite; use Encode 'encode'; # マルチパートメッセージの作成 my $msg = MIME::Lite->new( From => 'me@myhost.com', To => 'you@yourhost.com', Cc => 'some@other.com, some@more.com', Subject => encode('MIME-Header', 'メールタイトル'), Type => 'multipart/mixed' ); # テキストを追加 $msg->attach( Type => 'TEXT', Data => encode('UTF-8', 'メール本文のテキスト'), ); # 画像を追加 $msg->attach( Type => 'image/gif', Path => 'aaa000123.gif', Filename => 'logo.gif', Disposition => 'attachment' ); # メールを送信「 $msg->send;
Perlの文字コードについてわからない場合はEncodeモジュールの解説記事をご覧ください。
FAQ
MIME::Liteに関するFAQに答えます。
MIME::Liteは非推奨になっているようですが
MIME::Liteは簡単に使えますが、現在は非推奨になっています。
MIME::Liteは個人的にはもっとも使いやすいメール送信モジュールですが、コミュニティの意向に従う場合はEmail::Senderを使いましょう。
文字化けが発生します
UTF-8で表現できても「ISO-2022-JP」では表現できない文字があることが原因です。
このような場合はUTF-8でエンコーディングしてメールを送信するか、UTF-8で表現される文字を「ISO-2022-JP」に変換可能な文字に置換しましょう。