※エラーログを追記しました。
function.phpの「error_reporting(0);」を削除したらエラーログが出ました。
PHPMailerライブラリを利用して、
メールの送信キューをプログラムで組んでいました。
※送信タスクに格納して、バックエンドで1分おきに動作して、送信タスクがあれば送信
突然、メールが送信されなくなりました。
送信されないので、当然ながら受信はされません。
送信されないと判断した理由は、DBを確認すると、
格納されていた送信タスクからレコードが削除されなくなったからです。
そこで、問題の切り分けのため、初歩的ですが...
$mail->send();の前後に、echoで出力しました。
結果はデバッグログにある通り、「送信前」しかありませんでした。
分かったことは、
「送信後」まで到達していないことでした。
昨日までは正常に動作していたのに...
デバックログを確認しても理由が分かりませんでした。
また、 echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";のログもありません。
デバックのログと、PHPMailerのプログラムコードは以下になります。
アドバイス等ありましたら教えて頂けますでしょうか。
何卒よろしくお願い致します。
php
1送信前 2debug level 3; message: Connection: opening to ssl://smtp.gmail.com:465, timeout=300, options=array() 3debug level 3; message: Connection: opened 4debug level 2; message: SERVER -> CLIENT: 220 smtp.gmail.com ESMTP t18sm6074337pfl.138 - gsmtp 5debug level 1; message: CLIENT -> SERVER: EHLO exsample.com 6debug level 2; message: SERVER -> CLIENT: 250-smtp.gmail.com at your service, [*.*.*.*] 250-SIZE 35882577 250-8BITMIME 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-CHUNKING 250 SMTPUTF8 7 8Fatal error: Uncaught League\OAuth2\Client\Provider\Exception\IdentityProviderException: invalid_grant in /home/***/***.com/public_html/***/***/PHPMailer/vendor/league/oauth2-google/src/Provider/Google.php:118 Stack trace: #0 /home/***/***.com/public_html/***/***/PHPMailer/vendor/league/oauth2-client/src/Provider/AbstractProvider.php(628): League\OAuth2\Client\Provider\Google->checkResponse(Object(GuzzleHttp\Psr7\Response), Array) #1 /home/***/***.com/public_html/***/***/PHPMailer/vendor/league/oauth2-client/src/Provider/AbstractProvider.php(537): League\OAuth2\Client\Provider\AbstractProvider->getParsedResponse(Object(GuzzleHttp\Psr7\Request)) #2 /home/***/***.com/public_html/***/***/PHPMailer/vendor/phpmailer/phpmailer/src/OAuth.php(115): League\OAuth2\Client\Provider\AbstractProvider->getAccessToken(Object(League\OAuth2\Client\Grant\RefreshToken), Array) #3 /home/***/***.com/public_html/***/***/PHPMailer/vendor/phpmailer/phpmailer/src/OAuth.php(128): PHPMailer\PHPM in /home/***/***.com/public_html/***/***/PHPMailer/vendor/league/oauth2-google/src/Provider/Google.php on line 118
php
1<?php 2use PHPMailer\PHPMailer\PHPMailer; 3use PHPMailer\PHPMailer\SMTP; 4use PHPMailer\PHPMailer\Exception; 5use PHPMailer\PHPMailer\OAuth; 6 7// Alias the League Google OAuth2 provider class 8use League\OAuth2\Client\Provider\Google;// ### 追加 ### 9 10require(dirname(__FILE__). '/PHPMailer/vendor/autoload.php'); 11 12//mbstring の日本語設定 13mb_language("$MAILLANGUAGE"); 14mb_internal_encoding("UTF-8"); 15date_default_timezone_set("$TIMEZONE"); 16 17try { 18$sql = "SELECT * FROM q"; 19$stmt = $pdo1 -> query($sql); 20$result = $stmt->fetchall(); 21foreach($result as $row){ 22 23// インスタンスを生成 24$mail = new PHPMailer(true); 25 26$mail->CharSet = "UTF-8"; 27 28//サーバの設定 29$mail->SMTPDebug = 3; 30$mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str<br>";}; 31$mail->isSMTP(); 32$mail->Host = 'smtp.gmail.com'; 33$mail->SMTPAuth = true; 34$mail->AuthType = 'XOAUTH2'; 35$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; 36$mail->Port = 465; 37 38// ### OAUTH2 の設定 ### 39$google_email = $row['From']; 40$clientId = $row['Gid'];// 41$clientSecret = $row['Gsecret']; 42$refreshToken = $row['Gtoken']; 43 44$provider = new Google( 45[ 46'clientId' => $clientId, 47'clientSecret' => $clientSecret, 48] 49); 50 51$mail->setOAuth( 52new OAuth( 53[ 54'provider' => $provider, 55'clientId' => $clientId, 56'clientSecret' => $clientSecret, 57'refreshToken' => $refreshToken, 58'userName' => $google_email, 59] 60) 61); 62// ### OAUTH2 の設定 ここまで ### 63 64//差出人アドレス(Gmail のアドレス), 差出人名 65$mail->setFrom($google_email, mb_encode_mimeheader($TITLE)); 66$mail->addAddress($row['To'], mb_encode_mimeheader("")); 67$mail->addReplyTo($ReplyToEMAIL, mb_encode_mimeheader("")); 68 69//コンテンツ設定 70$mail->isHTML(false); // HTML形式を指定 71$mail->Subject = mb_encode_mimeheader($row['Title']); 72$mail->Body = mb_convert_encoding($row['Body'],"UTF-8","UTF-8"); 73 74echo "送信前"; 75 76$mail->send(); //送信 77 78echo "送信後"; 79 80//キューを消す 81$sql = "DELETE FROM q WHERE Id=?"; 82$stmt = $pdo1->prepare($sql); 83$array = array($row['Id']); 84$stmt -> execute($array); 85} 86}catch (Exception $e) { 87echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; 88} 89?>
回答1件
あなたの回答
tips
プレビュー