メール送信アクション
次に、アクションのコードを見てみましょう。
メール送信の実行は、Stashに必要な値を設定した後でEmail用のビューにforwardします。今回の例ではリンクなどから呼び出されるsendアクションと、実際のメール送信を行うemailアクションを定義します。
sub email :Private {
my ( $self, $c ) = @_;
# (1)メール送信に必要な値を設定
$c->stash->{email} = {
to => 'test1@example.com',
from => 'test2@example.org',
subject => 'Email Test',
body => 'Catalyst::View::Emailを使った送信テスト',
};
# (2)送信実行
$c->forward($c->view('Email'));
}
sub send :Local {
my ( $self, $c ) = @_;
# (3)送信実行
$c->forward('/email');
# (4)送信エラー判定
if (scalar(@{$c->error})) {
$c->error(0);
$c->response->body('送信失敗');
} else {
$c->response->body('送信成功');
}
}
emailアクションは、外部から直接呼ばれないアクションのため「Private」として定義しています。このアクションでは、次のような処理を実装しています。
(1)メール送信に必要な値を設定
ここでは、Stashのemail以下に送信先(to)や送信元(from)、そしてSubjectや本文などを定義しています。先ほど説明したデフォルト値もここで上書きできます。
(2)送信実行(Catalyst::View::Email呼び出し)
Catalyst::View::Emailにforwardすることで、Catalyst::View::Emailの処理を実行します。このPrivateアクションを呼び出すには、Webクライアントから呼び出されるアクションが必要になりますが、ここではsendアクションにその処理を定義しました。
(3)送信実行(emailアクション呼び出し)
メール送信を行うためのアクションをforwardで呼び出しています。送信に成功したかどうかは、コンテキストオブジェクトのerrorの値で判断できます。
(4)送信エラー判定
ここでは、送信結果が成功したかどうかをレスポンスとして返しています。$c->error(0)により送信結果画面でCatalystのエラー表示画面が出ないように制御しています。
サンプル実行
準備ができたら組み込みサーバを起動し、次のアドレスにアクセスしてください。
http://<ホスト名またはIPアドレス><:Port>/
ここでEmail送信のリンクをクリックすると、プログラムで指定したアドレスにメールを送信します。例えば、Gmailで受信すると次のようになります。
