SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Webアプリケーションフレームワーク「Catalyst」入門

初めてのCatalyst入門(15)
Perl Catalystでメール送信を実装しよう

メール送信を便利にするビューモジュール

テンプレートを使用してメールを送信する - Catalyst::View::Email::Template -

 さて、上記の例ではメール本文に表示する値を、直接プログラムで指定していますが、フォーマットをちょっと変更する場合でも実装を修正しなければならないため、非常に面倒です。

 このような場合には、Catalyst::View::Email::Templateを使用すると、テンプレートを使用してメール本文を作成できるようになります。

 使用するテンプレートエンジンには自分の使い慣れたモジュールを使用できます。この例ではTemplate Toolkitを使用します。

Catalyst::View::Email::Template

 このモジュールは、Catalyst::View::Emailに含まれているので、別途インストールする必要はありません。このモジュールについても、ジェネレータを使用してメール送信用のビューを作成します。

[リスト7]Email::TemplateのViewを作成する
$ ./EmailSample/script/emailsample_create.pl view Email::Template Email::Template

 ▼

created "/home/test/EmailSample/script/../lib/EmailSample/View/Email"
 exists "/home/test/EmailSample/script/../t"
created "/home/test/EmailSample/script/../lib/EmailSample/View/Email/Template.pm"
created "/home/test/EmailSample/script/../t/view_Email-Template.t"

Catalyst::View::Email::Templateで指定可能なパラメータ

 Catalyst::View::Email::Templateの設定値もアプリケーションクラスで登録してみましょう。送信部分などの設定はEmailビューと同じです。

[リスト8]Catalyst::View::Email::Templateの設定(EmailSample.pmの一部)
__PACKAGE__->config(
  name => 'EmailSample',
  default_view => 'TT',
  # Catalyst::View::Email::Templateの設定
  'View::Email::Template' => {
    # (1)メールテンプレートファイルのディレクトリパスprefix
    template_prefix => 'email',
    stash_key => 'email',
    default => {
      content_type => 'text/plain',
      charset => 'utf-8',
      # (2)メールテンプレートの処理に使用するビューモジュール
      view => 'TT',
    },
    sender => {
      mailer => 'Sendmail',
      mailer_args => {
        sendmail => '/usr/lib/sendmail',
      },
    },
  },
);

 先ほどの基本的な設定パラメータはCatalyst::View::Emailと同じですが、テンプレートに関するパラメータには次のようなものがあります。

(1)メールテンプレートファイルのディレクトリパスprefix

 Webページなどの通常のテンプレートディレクトリと区別するために、通常のパス以下につけるprefixを指定します。例えば、テンプレートのパスが「~/EmailSample/root」であり、template_prefixの値がemailの場合、このビューモジュールでは、「~/EmailSample/root/email」以下のディレクトリを探しに行きます。

(2)メールテンプレートの処理に使用するビューモジュール

 Catalyst::View::Email::Templateでは、テンプレートエンジンとして、Catalystのビューモジュールになっているものであれば、それらを使用できます。上記の例では、Template Toolkitを使用した、Catalyst::View::TTを利用するように設定されています。

メール送信アクション

 テンプレートを使用したメール送信のコードを見てみましょう。

 メール送信の実行は、先ほどと同様にPriavteアクションとして定義したemail2アクションを使用します。今回の例では、contactアクションでメール本文に差し込むためのタイトルと本文を指定してsend2アクションにPOSTで送信します。send2アクションでは、このemail2アクションを使用してメール送信を行います。

[リスト9]入力フォーム表示とメール送信アクション(Root.pmの一部)
sub contact :Local {
  my ( $self, $c ) = @_;
}

sub email2 :Private {
  my ( $self, $c ) = @_;
  $c->stash->{email} = {
    to => 'test1@example.com',
    from => 'test2@example.org',
    subject => 'Contact from user',
    # (1)テンプレートファイルの指定
    template => 'send2.tt',
  };
  # (2)メールテンプレートに渡す値
  $c->stash->{title} = $c->req->params->{title};
  $c->stash->{contents} = $c->req->params->{contents};
  # 送信実行
  $c->forward($c->view('Email::Template'));
}
 
sub send2 :Local {
  my ( $self, $c ) = @_;
  # 送信実行
  $c->forward('/email2');

  # 送信エラー判定
  if (scalar(@{$c->error})) {
    $c->error(0);
    $c->response->body('送信失敗');
  } else {
    $c->response->body('送信成功');
  }
}

 contactアクションでは、単に入力フォームを表示するだけなので、アクション側のロジックは記述していません。また、send2アクションについては先ほどとほぼ同じです。

 ここではメール送信を行うemail2アクションについて見ていきます。メール送信に関する設定値などは、Catalyst::View::Emailと同じ値を使用しています。

(1)メールテンプレートファイルの指定

 使用するメールテンプレートファイルを指定します。パラメータ名はtemplateになります。先ほどtemplate_prefixにemailを指定したので、このテンプレートファイルへのパスは、「~/EmailSample/root/email/send2.tt」になります。

(2)メールテンプレートに渡すパラメータを設定

 これまで何度も出てきたCatalyst::View::TTと同じく、Stashに対してテンプレートで使用する値を登録します。この例では、contactアクションでPOSTした、titleとcontentsの値を設定しています。

 メールテンプレートファイルでは変数を使用できますが、その変数を指定するために、Stashに登録しています。上記の例では、入力フォームから受け取った、subjectとcontentsの値を登録しています。

次のページ
まとめ

この記事は参考になりましたか?

Webアプリケーションフレームワーク「Catalyst」入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 花田 善仁(ハナダ ヨシヒト)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5970 2011/06/20 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー