メールを送信する - 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)認証を使う場合には、それらのユーザ名とパスワードを指定します。
