最終更新日:
公開日:
レシピ
Swift Mailer
Swift Mailerの様々なメール設定
メール送信ライブラリ「Swift Mailer」を使った、送信するメールに関する様々な設定について解説します。
この記事のポイント
- Swift Mailerでメール本体に設定できることを確認する
- HTMLメールを送る
- メールにファイルを添付する
目次
柔軟で簡単なメールの設定
Swift Mailerライブラリを使ったメールについて、メール本体に設定できる項目について解説します。
Swift Mailerライブラリの公式サイトはこちら。
Swift Mailer公式サイト(英語)
基本的な設定
まずは基本的なメール設定に絞ってみていきます。
次のコードはメールに必要な件名、送信元、宛先、本文に加え、ファイルを添付した上で送信を行なっています。
swiftmailer.php
<?php
require_once 'vendor/autoload.php';
// 送信設定
$transport = new Swift_SmtpTransport('localhost', 25);
$transport->setUsername('username');
$transport->setPassword('password');
$mailer = new Swift_Mailer($transport);
// メール作成
$message = new Swift_Message();
// 件名
$message->setSubject('タイトル');
// 送信元の設定(送信元メールアドレスと送信者名)
$message->setFrom(['noreply@gray-code.com' => 'GRAYCODE']);
// 宛先(受信者のメールアドレスと受信者名)
$message->setTo(['taroyamada@sample.com'=>'Taro Yamada']);
// 本文
$message->setBody('<p>サイトは<a href="https://gray-code.com">こちら</a></p>', 'text/html');
// 添付ファイル
$message->attach(Swift_Attachment::fromPath('pic.jpg'));
// メール送信
$result = $mailer->send($message);
上記コードを実行し正常にメールが送信されると、指定した宛先では次のようなメール受け取ることができます。
送信元、宛先は複数設定することができます。
今回はHTMLメールを送っているので、「本文」のsetBodyメソッドの第2パラメータにContent-Typeである「text/html」を指定しています。
もし指定しなかった場合は、次のようにHTMLタグが通常テキストとして処理されてしまいます。
もし通常のテキストのみの送信であれば第2パラメータを省略するか、「text/plain」を指定してください。
設定できる項目
次に、Swift Mailerで設定できる項目を確認します。
項目名 | 説明 | アクセッサメソッド |
---|---|---|
Message-ID | メールID。一意のIDが自動的に割り振られる。 | getId、setId |
Return-Path | メールが送信できなかった時に通知がいく場所 | getReturnPath、detReturnPath |
From | メールの送信元 | getFrom、setFrom |
Sender | メールの送信元。「From」よりも優先されるため、送信元を強調したい場合に設定 | getSender、setSender |
To | 宛先。メール受信者 | getTo、setTo |
Cc (Carbon Copy) | To以外のメール受信先 | getCc、setCc |
Bcc (Blind Carbon Copy) | 受信者(To、Ccの人)には表示されないメールの受信先。 | getBcc、setBcc |
Reply-To | メールの返信先の指定 | getReplyTo、setReplyTo |
Subject | 件名 | getSubject、setSubject |
Date | 送信日時 | getDate、setDate |
Body | メール本文 | getBody、setBody |
Content-Type | メール本文のContent-Type。通常は「text/plain」か「text/html」を使う | getContentType、setContentType |
Content-Transfer-Encoding | メッセージのエンコード形式 | getEncoder、setEncoder |
見慣れないものも含め、結構多いですね。
試しに、作成したメッセージの情報をアクセッサメソッドで取得してみます。
swiftmailer.php
<?php
require_once 'vendor/autoload.php';
// 送信設定
$transport = new Swift_SmtpTransport('localhost', 25);
$transport->setUsername('username');
$transport->setPassword('password');
$mailer = new Swift_Mailer($transport);
// メール作成
$message = new Swift_Message();
// 件名
$message->setSubject('タイトル');
// 送信元の設定(送信元メールアドレスと送信者名)
$message->setFrom(['noreply@gray-code.com' => 'GRAYCODE']);
// 宛先(受信者のメールアドレスと受信者名)
$message->setTo(['taroyamada@sample.com'=>'Taro Yamada']);
// 本文
$message->setBody('<p>サイトは<a href="https://gray-code.com">こちら</a></p>', 'text/html');
// 添付ファイル
$message->attach(Swift_Attachment::fromPath('pic.jpg'));
// Message-ID
var_dump($message->getId());
// Return-Path
var_dump($message->getReturnPath());
// 送信日時
var_dump($message->getDate());
// Content-Type
var_dump($message->getContentType());
// メール送信
$result = $mailer->send($message);
それぞれ次のように出力されました。
出力結果
// Message-ID
string(46) "7b4f828d9ab2c7f84d5fea51cd97d206@gray-code.com"
// Return-Path
NULL
// 送信日時
object(DateTimeImmutable)#37 (3) { ["date"]=> string(26) "2017-12-06 10:24:03.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" }
// Content-Type
string(15) "multipart/mixed"
setIdメソッドやsetDateメソッドを使って任意の値を設定することも可能なため、必要に応じて活用してください。