メール送信アクション
次に、アクションのコードを見てみましょう。
メール送信の実行は、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で受信すると次のようになります。