teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

エラーログの追加

2021/01/15 06:22

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,3 +1,6 @@
1
+ ※エラーログを追記しました。
2
+ function.phpの「error_reporting(0);」を削除したらエラーログが出ました。
3
+
1
4
  PHPMailerライブラリを利用して、
2
5
  メールの送信キューをプログラムで組んでいました。
3
6
  ※送信タスクに格納して、バックエンドで1分おきに動作して、送信タスクがあれば送信
@@ -26,6 +29,7 @@
26
29
 
27
30
  何卒よろしくお願い致します。
28
31
 
32
+
29
33
  ```php
30
34
  送信前
31
35
  debug level 3; message: Connection: opening to ssl://smtp.gmail.com:465, timeout=300, options=array()
@@ -33,6 +37,8 @@
33
37
  debug level 2; message: SERVER -> CLIENT: 220 smtp.gmail.com ESMTP t18sm6074337pfl.138 - gsmtp
34
38
  debug level 1; message: CLIENT -> SERVER: EHLO exsample.com
35
39
  debug 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
40
+
41
+ Fatal 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
36
42
  ```
37
43
 
38
44
  ```php

3

ログの有無の追加と誤字の修正

2021/01/15 06:22

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -11,13 +11,15 @@
11
11
  そこで、問題の切り分けのため、初歩的ですが...
12
12
 
13
13
  $mail->send();の前後に、echoで出力しました。
14
- 結果はデバッグロにある通り、「送信前」しかありませんでした。
14
+ 結果はデバッグロにある通り、「送信前」しかありませんでした。
15
15
 
16
16
  分かったことは、
17
17
  「送信後」まで到達していないことでした。
18
18
 
19
19
  昨日までは正常に動作していたのに...
20
+
20
21
  デバックログを確認しても理由が分かりませんでした。
22
+ また、 echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";のログもありません。
21
23
 
22
24
  デバックのログと、PHPMailerのプログラムコードは以下になります。
23
25
  アドバイス等ありましたら教えて頂けますでしょうか。
@@ -56,16 +58,15 @@
56
58
  $result = $stmt->fetchall();
57
59
  foreach($result as $row){
58
60
 
59
- // インスタンスを生成(引数に true を指定して例外 Exception を有効に)
61
+ // インスタンスを生成
60
62
  $mail = new PHPMailer(true);
61
- //文字コードの設定
63
+
62
64
  $mail->CharSet = "UTF-8";
63
65
 
64
66
  //サーバの設定
65
- //$mail->SMTPDebug = SMTP::DEBUG_SERVER; // デバグの出力を有効に(テスト環境での検証用)
66
67
  $mail->SMTPDebug = 3;
67
68
  $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str<br>";};
68
- $mail->isSMTP(); // SMTP を使用
69
+ $mail->isSMTP();
69
70
  $mail->Host = 'smtp.gmail.com';
70
71
  $mail->SMTPAuth = true;
71
72
  $mail->AuthType = 'XOAUTH2';

2

PHPコードを追加と、問題点の追加

2021/01/15 05:46

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,18 +1,31 @@
1
1
  PHPMailerライブラリを利用して、
2
2
  メールの送信キューをプログラムで組んでいました。
3
- ※バックエンドで1分おきに動作
3
+ 送信タスクに格納して、バックエンドで1分おきに動作して、送信タスクがあれば送信
4
4
 
5
5
  突然、メールが送信されなくなりました。
6
6
  送信されないので、当然ながら受信はされません。
7
7
 
8
- ログを確認ても理由が分かりません。
8
+ 送信されないと判断理由は、DBを確認すると、
9
+ 格納されていた送信タスクからレコードが削除されなくなったからです。
9
10
 
11
+ そこで、問題の切り分けのため、初歩的ですが...
12
+
13
+ $mail->send();の前後に、echoで出力しました。
14
+ 結果はデバッグロゴにある通り、「送信前」しかありませんでした。
15
+
16
+ 分かったことは、
17
+ 「送信後」まで到達していないことでした。
18
+
19
+ 昨日までは正常に動作していたのに...
20
+ デバックログを確認しても理由が分かりませんでした。
21
+
10
- デバックのログと、一部のプログラムコードは以下になります。
22
+ デバックのログと、PHPMailerのプログラムコードは以下になります。
11
23
  アドバイス等ありましたら教えて頂けますでしょうか。
12
24
 
13
25
  何卒よろしくお願い致します。
14
26
 
15
27
  ```php
28
+ 送信前
16
29
  debug level 3; message: Connection: opening to ssl://smtp.gmail.com:465, timeout=300, options=array()
17
30
  debug level 3; message: Connection: opened
18
31
  debug level 2; message: SERVER -> CLIENT: 220 smtp.gmail.com ESMTP t18sm6074337pfl.138 - gsmtp
@@ -21,12 +34,94 @@
21
34
  ```
22
35
 
23
36
  ```php
37
+ <?php
38
+ use PHPMailer\PHPMailer\PHPMailer;
39
+ use PHPMailer\PHPMailer\SMTP;
40
+ use PHPMailer\PHPMailer\Exception;
41
+ use PHPMailer\PHPMailer\OAuth;
42
+
43
+ // Alias the League Google OAuth2 provider class
44
+ use League\OAuth2\Client\Provider\Google;// ### 追加 ###
45
+
46
+ require(dirname(__FILE__). '/PHPMailer/vendor/autoload.php');
47
+
48
+ //mbstring の日本語設定
49
+ mb_language("$MAILLANGUAGE");
50
+ mb_internal_encoding("UTF-8");
51
+ date_default_timezone_set("$TIMEZONE");
52
+
53
+ try {
54
+ $sql = "SELECT * FROM q";
55
+ $stmt = $pdo1 -> query($sql);
56
+ $result = $stmt->fetchall();
57
+ foreach($result as $row){
58
+
59
+ // インスタンスを生成(引数に true を指定して例外 Exception を有効に)
60
+ $mail = new PHPMailer(true);
61
+ //文字コードの設定
62
+ $mail->CharSet = "UTF-8";
63
+
64
+ //サーバの設定
65
+ //$mail->SMTPDebug = SMTP::DEBUG_SERVER; // デバグの出力を有効に(テスト環境での検証用)
24
66
  $mail->SMTPDebug = 3;
25
67
  $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str<br>";};
26
- $mail->isSMTP();
68
+ $mail->isSMTP(); // SMTP を使用
27
69
  $mail->Host = 'smtp.gmail.com';
28
70
  $mail->SMTPAuth = true;
29
71
  $mail->AuthType = 'XOAUTH2';
30
72
  $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
31
73
  $mail->Port = 465;
74
+
75
+ // ### OAUTH2 の設定 ###
76
+ $google_email = $row['From'];
77
+ $clientId = $row['Gid'];//
78
+ $clientSecret = $row['Gsecret'];
79
+ $refreshToken = $row['Gtoken'];
80
+
81
+ $provider = new Google(
82
+ [
83
+ 'clientId' => $clientId,
84
+ 'clientSecret' => $clientSecret,
85
+ ]
86
+ );
87
+
88
+ $mail->setOAuth(
89
+ new OAuth(
90
+ [
91
+ 'provider' => $provider,
92
+ 'clientId' => $clientId,
93
+ 'clientSecret' => $clientSecret,
94
+ 'refreshToken' => $refreshToken,
95
+ 'userName' => $google_email,
96
+ ]
97
+ )
98
+ );
99
+ // ### OAUTH2 の設定 ここまで ###
100
+
101
+ //差出人アドレス(Gmail のアドレス), 差出人名
102
+ $mail->setFrom($google_email, mb_encode_mimeheader($TITLE));
103
+ $mail->addAddress($row['To'], mb_encode_mimeheader(""));
104
+ $mail->addReplyTo($ReplyToEMAIL, mb_encode_mimeheader(""));
105
+
106
+ //コンテンツ設定
107
+ $mail->isHTML(false); // HTML形式を指定
108
+ $mail->Subject = mb_encode_mimeheader($row['Title']);
109
+ $mail->Body = mb_convert_encoding($row['Body'],"UTF-8","UTF-8");
110
+
111
+ echo "送信前";
112
+
113
+ $mail->send(); //送信
114
+
115
+ echo "送信後";
116
+
117
+ //キューを消す
118
+ $sql = "DELETE FROM q WHERE Id=?";
119
+ $stmt = $pdo1->prepare($sql);
120
+ $array = array($row['Id']);
121
+ $stmt -> execute($array);
122
+ }
123
+ }catch (Exception $e) {
124
+ echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
125
+ }
126
+ ?>
32
127
  ```

1

メールが送信できない状況を追記

2021/01/15 05:32

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -2,7 +2,8 @@
2
2
  メールの送信キューをプログラムで組んでいました。
3
3
  ※バックエンドで1分おきに動作。
4
4
 
5
- 突然、送信ができなくなりました。
5
+ 突然、メールが送信されなくなりました。
6
+ 送信されないので、当然ながら受信はされません。
6
7
 
7
8
  ログを確認しても理由が分かりません。
8
9