swiftmailerでメールを送る (Gmail, Yahoo!メール経由)

  • 4
    いいね
  • 0
    コメント

SMTP設定をその都度変えられるので、XAMPPに付属しているsendmailを使うよりも便利だと思います。

環境

  • Windows 10
  • PHP 7.1.4 (XAMPP 7.1.4)
  • Composer 1.4.2
  • swiftmailer 6.0.1

swiftmailerをインストール

(参照: Installation)

PowerShell
> composer require "swiftmailer/swiftmailer:^6.0"

Googleアカウントを使う

準備

メール送信に使いたいGoogleアカウントでログインした上で、下記のページを開きます。
https://myaccount.google.com/lesssecureapps

そして、「安全性の低いアプリの許可」を有効にします。

001.png

送信する

(参照: Basic Usage)
(参照: Encrypted SMTP)
(参照: GmailのSMTP設定)

<?php
require_once './vendor/autoload.php';

$from = '<Gmailアドレス>';

// 送信設定
$transport = (new Swift_SmtpTransport('smtp.gmail.com', 587, 'tls'))
    ->setUsername($from)
    ->setPassword('<Googleのパスワード>');

// 送信設定をもとにメール送信のインスタンスを作成
$mailer = new Swift_Mailer($transport);

// メッセージを作成
$message = (new Swift_Message('件名'))
    ->setFrom([$from => '送信者名 (省略可)'])
    ->setTo(['<送信先アドレス>'] => '受信者名 (省略可)')
    ->setBody("こんにちは!\nこれはテスト送信です。\nTLSで暗号化しています。");

// メールを送信する
if ($mailer->send($message)) {
    echo 'メールを送信しました。';
}

なお、公式ドキュメントで例示されているソースコードではnew Swift_Message()()で囲まれていないため、そのままコピペして実行するとエラーになります。
これはすでにIssueで指摘されています

-   new Swift_Message('件名')
+   (new Swift_Message('件名'))

Yahoo!アカウントを使う

送信する

(参照: Yahoo!メールのSMTP設定)

Yahoo!の場合、メールアドレスからドメインを除いたものがユーザー名となります。
また、TLSではなくSSLで、ポート番号もGmailとは異なるのでその部分だけ修正します。

抜粋
$username = '<ユーザー名>';
$from = $username . '@yahoo.co.jp';

// 送信設定
$transport = (new Swift_SmtpTransport('smtp.mail.yahoo.co.jp', 465, 'ssl'))
    ->setUsername($username)
    ->setPassword('<パスワード>');

注意: 暗号化されない

上のようにSSLで送信するよう設定していますが、なぜか@yahoo.co.jpでのメール送信は暗号化されません。

002.png

オレオレ証明書を作ってS/MIMEで暗号化することもできるようですが、どのみち本番環境では使わないのでこのままにしておきます。

その他