SHOEISHA iD

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

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

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

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

メールを送信する - Catalyst::View::Email -

 お問い合わせフォームや登録ユーザへの更新通知など、Webアプリケーションからメール送信を行う機会は頻繁にあります。Catalystには、メールを送るためのモジュールとしてCatalyst::View::Emailが公開されています。このモジュールは、メールデータ(MIME)作成にEmail::MIME::Creatorを、メール配送にEmail::Sender::Simpleを使用しています。

 このほかにも、プラグインとしてはCatalyst::Plugin::Email::JapaneseCatalyst::Plugin::Emailなどがあります。

 この3種類では、MIME作成とメール送信で使用しているモジュールの組み合わせはすべて異なっています。それぞれ使用しているモジュールは次のようになります。

各モジュール/プラグインが使用する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

 それでは、さっそくこのモジュールをインストールしてみましょう。次のようなコマンドでインストールできます。

[リスト3]Catalyst::View::Emailのインストール
# perl -MCPAN -e 'install Catalyst::View::Email'

 プラグインとは異なり、ビューモジュールとして実装されているため、最初にジェネレータを使用してメール送信用のビューを作成します。

[リスト4]EmailのViewを作成する
$ ./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の設定値をアプリケーションクラスで登録してみましょう。基本的な設定は次のようになります。

[リスト5]Catalyst::View::Emailの設定(EmailSample.pmの一部)
__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つの値が設定可能となっています。

default以下で設定可能なパラメータ
パラメータ名 説明
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プログラムのパスを指定しています。

 指定可能なモジュールには、次のものがあります。

Email::Sender::Transportで指定可能なモジュール
モジュール名 説明
Sendmail sendmailプログラムで配送
SMTP SMTPにより配送
Mbox サーバ上のmboxに配送
Maildir サーバ上のmaildirに配送

 また、Email::Sender::Transport::SMTPを使用する場合のパラメータには次のようなものがあります。

SMTPのパラメータ
パラメータ名 説明
host SMTPサーバのホスト名
port SMTPサーバのポート番号
ssl SSL上で通信する場合には1、それ以外の場合には0
sasl_username SASLのユーザ名
sasl_password SASLのパスワード

 SMTPサーバがSASL(Simple Authentication and Security Layer)認証を使う場合には、それらのユーザ名とパスワードを指定します。

次のページ
メール送信アクション

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

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

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5970 2011/06/20 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング