Email パッケージの使用方法
email パッケージでメールを送るために必要な項目は、次の 3 つだけです。
- '送信者' のアドレス。
- 受信者のアドレス。
- 最後に大事な項目として、送りたいメッセージ
メールを送ってみましょう。
// インスタンスを生成する
$email = Email::forge();
// 送信者のアドレスを指定する
$email->from('my@email.me', 'My Name');
// 受信者のアドレスを指定する
$email->to('receiver@elsewhere.co.uk', 'Johny Squid');
// 表題を指定する
$email->subject('This is the subject');
// 送信者のアドレスを複数指定する場合
$email->to(array(
'example@mail.com',
'another@mail.com' => 'With a Name',
));
// 本文を指定する。
$email->body('This is my message');
この時点で、メールを送信する準備ができました。
例外
メールを送信する際、次の 2 種類の例外が発生する可能性があります。
- \EmailValidationFailedException: 1 つ以上のメールアドレスがバリデーションを通過しない場合に投げられます。
- \EmailSendingFailedException: ドライバの例外でメール送信出来なかった場合
下記の例では、これらの例外を扱う方法を示します。
try
{
$email->send();
}
catch(\EmailValidationFailedException $e)
{
// バリデーションが失敗したとき
}
catch(\EmailSendingFailedException $e)
{
// ドライバがメールを送信できなかったとき
}
HTML メール。
HTML メールの送信も、普通のメールの送信とあまり変わりません:
// HTML の本文を指定する
$email->html_body(\View::forge('email/template', $email_data));
/** デフォルトでは、この機能は HTML から代替テキストも生成します。
また、本文中のファイルを添付します (http://... のようなパスでないならば) 。 **/
// オプションで、代替テキストを指定する。
$email->alt_body('This is my alt body, for non-html viewers.');
添付ファイル
Email パッケージは、通常の添付とインラインの 2 種類の添付方法をサポートします。 メールの本文中に使いたい場合は、インライン添付を用います。例えば、図を挿入して、オフラインでも表示できるようにしたいときなどです。 ただし、受信側のメーラーによっては対応していないことに注意してください。
// 添付ファイルを追加する
$email->attach(DOCROOT.'dir/my_img.png');
// インライン添付を追加する
// HTML に挿入するために cid を追加する
$email->attach(DOCROOT.'dir/my_img.png', true, 'cid:my_conten_id');
テキストファイルを添付することもできます:
$contents = file_get_contents($my_file);
$email->string_attach($contents, $filename);
デフォルトでは、HTML 中の画像は自動的に添付されます。ただし、ローカルにあるファイルのみです。 どのように動作するかは、下記の HTML を見てください。
<!-- これは添付される -->
<img src="path/to/my/file.png" />
<!-- これは添付されない -->
<img src="http://remote_host/file.jpeg" />
<!-- これは添付されない -->
<img src="cid:my_conten_id" />
最後のタグ (cid:) も、自動的には添付されません。この例では、インライン添付を用いて、自分自身で添付する必要があります。
優先度
メールの優先度を変更するには、priority メソッドを使用します。
$email->priority(\Email::P_HIGH);
パイプライン
パイプラインは、一度に複数のメールを送信できる機能です。
$email->pipelining($true);
一度有効にすれば、同じメールサーバーの接続を再利用して複数メールの構築や送信を行うために、同じ $email
オブジェクトを使うことができます。
メールサーバーのホスティング会社がパイプラインを許可しているか、
またメールの最大送信数がどれだけなのかを考慮しなくてはいけません。
今のところ、 SMTP ドライバのみがパイプラインをサポートしています。