The symfony Cookbook

Eメールを送信する方法

You are currently browsing
the website for symfony 1

Visit the Symfony2 website


About

You are currently reading "The symfony Cookbook" which is licensed under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License license.

Master symfony

Be trained by SensioLabs experts (2 to 6 day sessions -- French or English).
trainings.sensiolabs.com

Books on symfony

Learn more about symfony with the official guides.
books.sensiolabs.com

L'audit Qualité par SensioLabs

200 points de contrôle de votre applicatif web.
audit.sensiolabs.com

Chapter Content

概要

インストール方法

設定

Eメールをレンダリングする

HTML Eメールを送信する

マルチパート対応のEメールを送信する

異なる接続設定を利用する

Google MailのSMTPサーバーを利用する

埋め込み画像

添付

受信者のリスト

タスクからEメールを送信する

ドキュメントを入手する

symfony training
Be trained by symfony experts
May 29: Paris (Web Development with Symfony2 - Français)
May 31: Paris (Mastering Symfony2 - Français)
Jun 06: Paris (Introduction to Symfony2 - Français)
Jun 06: Paris (Introduction to Symfony2 - English)
Jun 06: Paris (Going Further with Symfony2 - English)
and more...

Search


powered by google
You are currently browsing "The symfony Cookbook" in Japanese for the 1.1 version - Switch to version: - Switch to language:
Creative Commons License This work is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
Translation of this work into another language is explicitly allowed.
This version of symfony is not maintained anymore.
If some of your projects still use this version, consider upgrading as soon as possible.

概要

メールの送信はWeb開発者の日常のタスクです。symfony 1.1ではSwift Mailerを利用してこのタスクを簡単にできます。

Swift Mailerはメールに関するあなたのニーズを120%カバーするよく考えられたフル機能のPHP5オブジェクトライブラリです。

タグづけされたSVNリポジトリで利用可能で、ライブラリは更新されるので、あなたのプロジェクトが壊れることはありません。新しいバージョンに切り替えるかはあなたしだいです(訳注:Swift Mailer 4のライセンスがGPL3に変更されたという誤解がありましたがLGPLのままです)。

symfonyプロジェクトからメールを送信する方法はとてもシンプルです。Eメールの内容をレンダリングするパーシャルもしくはコンポーネントを作り、柔軟な方法で送信するためにSwiftを利用します。

インストール方法

既にあなたのプロジェクトがSVNを利用しているのであれば、svn:externalsプロパティを使ってインストールできます:

$ cd /path/to/symfony/project
$ mkdir -p lib/vendor
$ cd lib/vendor
$ svn propedit svn:externals .

次の行を追加します:

swift http://swiftmailer.svn.sourceforge.net/svnroot/swiftmailer/tags/php5/3.3.3/lib/

そして実行します:

$ svn update

あなたのプロジェクトがSVNを利用していない場合、タグをチェックアウトしてSuversionの作業コピーを入手できます。

$ cd /path/to/symfony/project
$ mkdir -p lib/vendor
$ cd lib/vendor
$ svn checkout http://swiftmailer.svn.sourceforge.net/svnroot/swiftmailer/tags/php5/3.3.3/lib/ swift

クラスのオートローディング機能のキャッシュをクリアし、インストール作業は終了です。

設定

メール固有の設定はありません。

プロジェクトを柔軟に保つためには、決め打ちされたEメールアドレスを維持するためにapp.yml設定ファイルを使います。 この方法では、環境に対応して異なる送信者/受信者のアドレスを持つことができます。 また変更することが必要になる場合、プロジェクトのすべてのコードを掘り起こす必要はありません。変更する場所はとても明快です。

Eメールをレンダリングする

symfony 1.1 RC2に関しては、アクションからレンダリングされたパーシャルもしくはコンポーネントを簡単に取得できます:

$mailBody = $this->getPartial('mailBody', array('name' => 'John Doe'));

もしくは

$mailBody = $this->getComponent('mail', 'mailBody', array('name' => 'John Doe'));

HTML Eメールを送信する

Swiftを利用して次のようにメールを送信します:

try
{
  // メーラーとメッセージオブジェクトを作る
  $mailer = new Swift(new Swift_Connection_NativeMail());
  $message = new Swift_Message('Mail\'s subject', $mailBody, 'text/html');
 
  // 送信する
  $mailer->send($message, $mailTo, $mailFrom);
  $mailer->disconnect();
}
catch (Exception $e)
{
  $mailer->disconnect();
 
  // ここでエラーを扱う
}

マルチパート対応のEメールを送信する

Eメールクライアントの中にはHTMLメールをまったく利用できないものがあります。 その場合はHTMLとプレーンテキストの両方でメールを提供するとよいでしょう。

try
{
  // メーラーとメッセージオブジェクトを作る
  $mailer = new Swift(new Swift_Connection_NativeMail());
  $message = new Swift_Message('Test mail subject');
 
  // メッセージ部分をレンダリングする
  $mailContext = array('name' => 'John Doe');
  $message->attach(new Swift_Message_Part($this->getPartial('mail/mailHtmlBody', $mailContext), 'text/html'));
  $message->attach(new Swift_Message_Part($this->getPartial('mail/mailTextBody', $mailContext), 'text/plain'));
 
  // 送信する
  $mailer->send($message, $mailTo, $mailFrom);
  $mailer->disconnect();
}
catch (Exception $e)
{
  $mailer->disconnect();
 
  // エラーを扱う
}

異なる接続設定を利用する

Swiftオブジェクトを作るとき、異なるSwift_Connectionオブジェクトを利用できます。

Google MailのSMTPサーバーを利用する

Gmailアカウントを使いたいのはなぜでしょうか?

制限は?

Swiftのオブジェクトを設定する方法は次の通りです:

$connection = new Swift_Connection_SMTP('smtp.gmail.com', 465, Swift_Connection_SMTP::ENC_SSL);
$connection->setUsername('romain@gmail.com');
$connection->setPassword('SuperSecurePassword');
 
$mailer = new Swift($connection);

埋め込み画像

メールに画像を埋め込むには、内容をレンダリングするために、埋め込みオブジェクトからメールに依存するURLを取得する必要があります。これを行う方法の例は次の通りです。

// メーラーとメッセージオブジェクトを作成する
$mailer = new Swift(new Swift_Connection_NativeMail());
$message = new Swift_Message('Test mail subject');
 
// インラインの画像
$images = array();
$images['symfony'] = new Swift_Message_Image(new Swift_File(sfConfig::get('sf_web_dir').'/images/symfony.gif'));
$images['swift']   = new Swift_Message_Image(new Swift_File(sfConfig::get('sf_web_dir').'/images/swift.jpg'));
 
$imageReferences = array();
foreach ($images as $name => $image)
{
  $imageReferences[$name] = $message->attach($image);
}
 
// メッセージ部分をレンダリングする
$mailContext = array('name' => 'John Doe', 'images' => $imageReferences);
$message->attach(new Swift_Message_Part($this->getPartial('mail/mailHtmlBody', $mailContext), 'text/html'));
$message->attach(new Swift_Message_Part($this->getPartial('mail/mailTextBody', $mailContext), 'text/plain'));
 
// 送信する
$mailer->send($message, $mailTo, $mailFrom);
$mailer->disconnect();

これで次のように、コンポーネント/パーシャルテンプレートでこれらの添付写真を簡単に表示できます:

<img src="<?php echo $images['symfony']; ?>" alt="Symfony Project" />
<img src="<?php echo $images['swift']; ?>" alt="Swift Mailer" />

簡単でしたね?

添付

あなたの期待通り、メールにドキュメントを添付するのもシンプルです:

$message->attach(new Swift_Message_Attachment(new Swift_File($file), $filename, $mime_type));

受信者のリスト

メール用に複数の受信者もしくはCCを利用したい場合がよくあります。これはSwift_RecipientListクラスを利用して行われます。

$recipients = new Swift_RecipientList();
$recipients->addTo($to);
$recipients->addCc($cc);
$recipients->addBcc($bcc);

ループでEメールを送信する場合、$recipientsリストを->flush()することをお忘れなく。さもなければ、なぜ誰かが同じメーリングリストの500ものコピーを受け取ったのか説明しなければならないばつのわるい思いをすることになります。

タスクからEメールを送信する

sfActionメソッドが使えないことを除いて処理方法はアクションから行う方法とまったく同じです。

sfAction::getPartial()sfAction::getComponent()メソッドの代わりにPartialHelperget_partial()get_component()関数を使う必要があります。

ドキュメントを入手する

SwiftMailerの公式サイトはドキュメントチュートリアルの金鉱です。

そしてもちろん、必要であれば完全なAPIリファレンスが利用できます。

Questions & Feedback

If you find a typo or an error, please register and open a ticket.

If you need support or have a technical question, please post to the official user mailing-list.