PHPプログラミング

最終更新日:
公開日:

レシピ

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メソッドを使って任意の値を設定することも可能なため、必要に応じて活用してください。