18日目 メールを送信する

Author:Shogo Kawahara <Twitter: @ooharabucyou>
Date:2010-12-18

メールを送信する

単純にメールを送信する機能としては、 opMailSend::execute() を利用する方法があります。

opMailSend::execute('Subject', 'to@sns.example.com', opConfig::get('admin_mail_address'), 'Body');

opMailSend::execute() は至ってシンプルです。

  • 第1引数には、メールの Subject を文字列で指定します。日本語文字コードについての変換は自動的に行われます。
  • 第2引数には、メールの送信先を指定します。
  • 第3引数には、メールの送信元を指定します。
    • 管理画面で設定した、SNS管理者のメールアドレスは opConfig::get('admin_mail_address') で取得することができます。
  • 第4引数には、本文を指定します。日本語文字コードについての変換は自動的に行われます。

メールテンプレートの利用

SNS上から送られる通知メールの多くは、ある程度の定型文をもったもので、 かつSNS管理者がその内容を編集できる方が望ましいことが多くあります。

OpenPNE3では、プラグインからテンプレートを作成して、 送信の際に利用することができます。

テンプレートの定義

テンプレートは $your_plugin_dir/config/mail_template.yml で定義を行います。

テンプレートの Subject および 本文は Twig の書式で記述します。

Note

Twig

基本的なルール

  • 変数は {{ }} で囲む。
  • 変数がインスタンスであった場合 . でメンバ変数を呼ぶことができる。
  • 条件分岐は、 {% if 変数 %} ... {% endif %}
  • 繰り返しは、 {% for in 配列 %} ... {% endfor %}

詳しくは以下を確認してください。

$your_plugin_dir/config/mail_template.yml

pc:                                # PC向け
  hello:                           # テンプレート名
    caption: "ハローメール"        # 管理画面で表示されるテンプレート名
    configurable: true             # true にすると管理画面から送受信設定を行うことができる
    title_configurable: true       # true にすると Subject を変更できます。
    sample:                        # デフォルトテンテンプレート
      ja_JP:                       # 日本語
        - "こんにちは"             # デフォルトのSubject
        - |                        # 本文
          {{ name }} さんこんにちは!あいさつのメールです
    variables:
      name: "受信者のニックネーム" # 管理画面で表示される変数の説明

mobile:                            # モバイル向け 以下 PC向けと同様
  hello:
    caption: "ハローメール"
    configurable: true
    title_configurable: true
    sample:
      ja_JP:
        - "こんにちは"
        - |
          {{ name }} さんこんにちは!あいさつのメールです
    variables:
      name: "受信者のニックネーム"

設定ファイルを設置したら、キャッシュを削除しましょう。

$ cd $openpne_dir
$ php symfony cc

この設定により、テンプレートの内容を管理画面の「メール設定」 -> 「メール通知テンプレート設定」 からテンプレートを編集することができます。

../_images/s18-1.png

テンプレートの利用

// member_id=1 のMember インスタンスを作成
$member = Doctrine::getTable('Member')->find(1);

// メールアドレスを取得 (配列)
foreach ($member->getEmailAddresses() as $to)
{
  // 送信
  opMailSend::sendTemplateMail('hello', $to, opConfig::get('admin_mail_address'), array('name' => $member->getName()));
}

opMailSend::sendTemplateMail() は以下のように使います。

  • 第1引数には、テンプレート名を指定します。
  • 第2引数には、メールの送信先を指定します。
  • 第3引数には、メールの送信元を指定します。
  • 第4引数には、テンプレートに利用するパラメータを配列で指定します。

送信先メールアドレスがモバイル向けの場合、モバイル向けのテンプレートを送ります。

また明日

明日は、メールの受信について取り扱います。