メールを送信する - Catalyst::View::Email -
お問い合わせフォームや登録ユーザへの更新通知など、Webアプリケーションからメール送信を行う機会は頻繁にあります。Catalystには、メールを送るためのモジュールとしてCatalyst::View::Emailが公開されています。このモジュールは、メールデータ(MIME)作成にEmail::MIME::Creatorを、メール配送にEmail::Sender::Simpleを使用しています。
このほかにも、プラグインとしてはCatalyst::Plugin::Email::JapaneseやCatalyst::Plugin::Emailなどがあります。
この3種類では、MIME作成とメール送信で使用しているモジュールの組み合わせはすべて異なっています。それぞれ使用しているモジュールは次のようになります。
モジュール/プラグイン | MIME作成 | メール送信 |
Catalyst::View::Email | Email::MIME::Creator | Email::Sender::Simple |
Catalyst::Plugin::Email | Email::MIME::Creator | Email::Send |
Catalyst::Plugin::Email::Japanese | MIME::Lite::TT::Japanese | MIME::Lite::TT::Japanese |
Catalyst::Plugin::Email::Japaneseは、Catalyst::Plugin::Emailを単純に日本語対応させたものではなく、内部的には全く別の仕組みとなっています。また、上記のMIME::Lite::TT::Japaneseは、MIME::Liteにテンプレート機能を追加したモジュールですが、これ1つでMIME作成とメール送信の両方の機能を持っています。ただしTLSを使用したSMTP送信など、単純ではないケースに対応しづらい問題があります。
Catalyst::Plugin::EmailとCatalyst::View::Emailでは、メール送信モジュールが異なっています。Email::Sender::Simpleは、CPANの説明文によれば「古くて、しばしば問題のある」Email::Sendを置き換えるために開発されたモジュールとあります。
上記のような理由から、本記事ではCatalyst::View::Emailを採用することにしました。
Catalyst::View::Email
それでは、さっそくこのモジュールをインストールしてみましょう。次のようなコマンドでインストールできます。
# perl -MCPAN -e 'install Catalyst::View::Email'
プラグインとは異なり、ビューモジュールとして実装されているため、最初にジェネレータを使用してメール送信用のビューを作成します。
$ ./EmailSample/script/emailsample_create.pl view Email Email
▼
exists "/home/test/EmailSample/script/../lib/EmailSample/View" exists "/home/test/EmailSample/script/../t" created "/home/test/EmailSample/script/../lib/EmailSample/View/Email.pm" created "/home/test/EmailSample/script/../t/view_Email.t"
Catalyst::View::Emailで指定可能なパラメータ
Catalyst::View::Emailの設定値をアプリケーションクラスで登録してみましょう。基本的な設定は次のようになります。
__PACKAGE__->config( name => 'EmailSample', default_view => 'TT', # Catalyst::View::Emailの設定 'View::Email' => { # (1)Stashのキー名 stash_key => 'email', # (2)MIME関連のデフォルト値 default => { content_type => 'text/plain', charset => 'utf-8', encoding => 'base64' }, # (3)メール配送の設定 sender => { mailer => 'Sendmail', mailer_args => { sendmail => '/usr/lib/sendmail', } }, }, );
(1)モジュールがStashから設定値を参照するためのキー名
コントローラからビューに値を渡すためにStash経由で行いますが、そのキー名を指定するためのパラメータがstash_keyとなります。デフォルト値はemailです。
(2)メールのデフォルト値
default以下に設定する値は、その名前の通りデフォルト値を指定します。現在は次の3つの値が設定可能となっています。
パラメータ名 | 説明 |
content_type | メール本文の種類。ヘッダのContent-Typeに指定される |
charset | 文字セット。Content-Typeにも設定される |
encoding | 本文のエンコード。Content-Transfer-Encodingに指定される |
このモジュールも他のCPANモジュールと同様に、さまざまなモジュールを利用することでメール送信を実現しています。上記のパラメータは、Email::MIME::Creatorのcreateメソッドに引数として渡されます。
また、上記3つの値については実行時に変更することも可能です。
(3)メール配送方法の設定
(2)ではメールヘッダや本文などについての設定値でしたが、sender以下にはメール配送モジュールの指定と、それらに渡す引数データについて指定します。
mailerには、Email::Sender::Transportネームスペース以下のメール配送モジュール名を指定します。
上記の例では、Email::Sender::Transport::Sendmailを使用し、その引数としてsendmailによってsendmailプログラムのパスを指定しています。
指定可能なモジュールには、次のものがあります。
モジュール名 | 説明 |
Sendmail | sendmailプログラムで配送 |
SMTP | SMTPにより配送 |
Mbox | サーバ上のmboxに配送 |
Maildir | サーバ上のmaildirに配送 |
また、Email::Sender::Transport::SMTPを使用する場合のパラメータには次のようなものがあります。
パラメータ名 | 説明 |
host | SMTPサーバのホスト名 |
port | SMTPサーバのポート番号 |
ssl | SSL上で通信する場合には1、それ以外の場合には0 |
sasl_username | SASLのユーザ名 |
sasl_password | SASLのパスワード |
SMTPサーバがSASL(Simple Authentication and Security Layer)認証を使う場合には、それらのユーザ名とパスワードを指定します。