min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

PHPからGmailを飛ばしたい → PHP Mailer【SMTP Error: Could not authenticate】が出たら

ハピタス登録で1,000円分になるURL

その買うを、もっとハッピーに。|ハピタス

 

PHP Mailer超便利

ここからダウンロード。

github.com

min117.hatenablog.com

 

zipでダウンロードして、自宅サーバに配置した。

phpファイルから require(末尾ソース)して実行したけどエラー。

SMTP Error: Could not authenticate】が出てしまった。

このサイトの手順どおりに2段階認証を有効にすれば治るんだろうけど、うちの場合はすでに2段階認証は有効にしてるんだよな。

 

アプリパスワードを設定して解消

2段階認証が有効な状態でSMTP Error: Could not authenticate】を解消するにはGmailの管理画面からアプリパスワードを設定すればいいらしい。Googleのヘルプどおりにやったら解消した。以下ヘルプの文章丸写し。

アプリパスワードを作成、使用する

重要:アプリパスワードを作成するには、Googleアカウントの2段階認証プロセスが必要です。
2段階認証プロセスを使用していて、ログインしようとすると「パスワードが間違っています」というエラーが表示される場合は、アプリパスワードを試してみてください。
Googleアカウントに移動します。
[セキュリティ]を選択します。

[Googleへのログイン]で[2段階認証プロセス]を選択します。
ページの下部にある[アプリパスワード]を選択します。
アプリパスワードを使用する場所がすぐにわかる名前を入力します。
[生成]を選択します。
画面上の手順に沿って、アプリパスワードを入力します。
アプリパスワードは、デバイスで生成される16桁のコードです。
[完了]を選択します。

「アプリ名」にテキトーな名前を入れて右下の作成を押して生成されたこのアプリパスワードを自前のアプリ(今回の場合は末尾のPHPソースコード)に入れろということらしい。

入れたので実行してみる。

$ php myGmail.php

おっしゃ!メール飛んだ~

ソース

生成されたパスワードは(下記ソースの)16行目に入れている。

$ vim myGmail.php

めっちゃ簡単。これでサーバfedoraからPHPコマンドやソースでGmailを飛ばせるぅ!

 

<?php

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';

$mail = new PHPMailer(true);

try {
    //Gmail 認証情報
    $host = 'smtp.gmail.com';
    $username = 'test@gmail.com'; // example@gmail.com
    $password = 'this isis dumy desu';
    //差出人
    $from = 'test@gmail.com';
    $fromname = 'testphp';

    //宛先
    $to = 'test@gmail.com';
    $toname = 'testout';

    //件名・本文
    $subject = 'testです';
    $body = 'test本文です';

    //メール設定
    $mail->SMTPDebug = 2; //デバッグ
    $mail->isSMTP();
    $mail->SMTPAuth = true;
    $mail->Host = $host;
    $mail->Username = $username;
    $mail->Password = $password;
    $mail->SMTPSecure = 'tls';
    $mail->Port = 587;
    $mail->CharSet = "utf-8";?

    $mail->Encoding = "base64";
    $mail->setFrom($from, $fromname);

    $mail->addAddress($to, $toname);
    $mail->Subject = $subject;?
    $mail->Body    = $body;
    $mail->send();
    echo '成功';
} catch (Exception $e) {
    echo '失敗: ', $mail->ErrorInfo;
}
?>

clock-up.hateblo.jp