質問編集履歴

4

エラーログの追加

2021/01/15 06:22

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,9 @@
1
+ ※エラーログを追記しました。
2
+
3
+ function.phpの「error_reporting(0);」を削除したらエラーログが出ました。
4
+
5
+
6
+
1
7
  PHPMailerライブラリを利用して、
2
8
 
3
9
  メールの送信キューをプログラムで組んでいました。
@@ -54,6 +60,8 @@
54
60
 
55
61
 
56
62
 
63
+
64
+
57
65
  ```php
58
66
 
59
67
  送信前
@@ -68,6 +76,10 @@
68
76
 
69
77
  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
70
78
 
79
+
80
+
81
+ 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
82
+
71
83
  ```
72
84
 
73
85
 

3

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

2021/01/15 06:22

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  $mail->send();の前後に、echoで出力しました。
26
26
 
27
- 結果はデバッグロにある通り、「送信前」しかありませんでした。
27
+ 結果はデバッグロにある通り、「送信前」しかありませんでした。
28
28
 
29
29
 
30
30
 
@@ -36,8 +36,12 @@
36
36
 
37
37
  昨日までは正常に動作していたのに...
38
38
 
39
+
40
+
39
41
  デバックログを確認しても理由が分かりませんでした。
40
42
 
43
+ また、 echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";のログもありません。
44
+
41
45
 
42
46
 
43
47
  デバックのログと、PHPMailerのプログラムコードは以下になります。
@@ -114,11 +118,11 @@
114
118
 
115
119
 
116
120
 
117
- // インスタンスを生成(引数に true を指定して例外 Exception を有効に)
121
+ // インスタンスを生成
118
122
 
119
123
  $mail = new PHPMailer(true);
120
124
 
121
- //文字コードの設定
125
+
122
126
 
123
127
  $mail->CharSet = "UTF-8";
124
128
 
@@ -126,13 +130,11 @@
126
130
 
127
131
  //サーバの設定
128
132
 
129
- //$mail->SMTPDebug = SMTP::DEBUG_SERVER; // デバグの出力を有効に(テスト環境での検証用)
130
-
131
133
  $mail->SMTPDebug = 3;
132
134
 
133
135
  $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str<br>";};
134
136
 
135
- $mail->isSMTP(); // SMTP を使用
137
+ $mail->isSMTP();
136
138
 
137
139
  $mail->Host = 'smtp.gmail.com';
138
140
 

2

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

2021/01/15 05:46

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  メールの送信キューをプログラムで組んでいました。
4
4
 
5
- ※バックエンドで1分おきに動作
5
+ 送信タスクに格納して、バックエンドで1分おきに動作して、送信タスクがあれば送信
6
6
 
7
7
 
8
8
 
@@ -12,11 +12,35 @@
12
12
 
13
13
 
14
14
 
15
+ 送信されないと判断した理由は、DBを確認すると、
16
+
17
+ 格納されていた送信タスクからレコードが削除されなくなったからです。
18
+
19
+
20
+
21
+ そこで、問題の切り分けのため、初歩的ですが...
22
+
23
+
24
+
25
+ $mail->send();の前後に、echoで出力しました。
26
+
27
+ 結果はデバッグロゴにある通り、「送信前」しかありませんでした。
28
+
29
+
30
+
31
+ 分かったことは、
32
+
33
+ 「送信後」まで到達していないことでした。
34
+
35
+
36
+
37
+ 昨日までは正常に動作していたのに...
38
+
15
- ログを確認しても理由が分かりません。
39
+ デバックログを確認しても理由が分かりませんでした
16
-
17
-
18
-
40
+
41
+
42
+
19
- デバックのログと、一部のプログラムコードは以下になります。
43
+ デバックのログと、PHPMailerのプログラムコードは以下になります。
20
44
 
21
45
  アドバイス等ありましたら教えて頂けますでしょうか。
22
46
 
@@ -28,6 +52,8 @@
28
52
 
29
53
  ```php
30
54
 
55
+ 送信前
56
+
31
57
  debug level 3; message: Connection: opening to ssl://smtp.gmail.com:465, timeout=300, options=array()
32
58
 
33
59
  debug level 3; message: Connection: opened
@@ -44,11 +70,69 @@
44
70
 
45
71
  ```php
46
72
 
73
+ <?php
74
+
75
+ use PHPMailer\PHPMailer\PHPMailer;
76
+
77
+ use PHPMailer\PHPMailer\SMTP;
78
+
79
+ use PHPMailer\PHPMailer\Exception;
80
+
81
+ use PHPMailer\PHPMailer\OAuth;
82
+
83
+
84
+
85
+ // Alias the League Google OAuth2 provider class
86
+
87
+ use League\OAuth2\Client\Provider\Google;// ### 追加 ###
88
+
89
+
90
+
91
+ require(dirname(__FILE__). '/PHPMailer/vendor/autoload.php');
92
+
93
+
94
+
95
+ //mbstring の日本語設定
96
+
97
+ mb_language("$MAILLANGUAGE");
98
+
99
+ mb_internal_encoding("UTF-8");
100
+
101
+ date_default_timezone_set("$TIMEZONE");
102
+
103
+
104
+
105
+ try {
106
+
107
+ $sql = "SELECT * FROM q";
108
+
109
+ $stmt = $pdo1 -> query($sql);
110
+
111
+ $result = $stmt->fetchall();
112
+
113
+ foreach($result as $row){
114
+
115
+
116
+
117
+ // インスタンスを生成(引数に true を指定して例外 Exception を有効に)
118
+
119
+ $mail = new PHPMailer(true);
120
+
121
+ //文字コードの設定
122
+
123
+ $mail->CharSet = "UTF-8";
124
+
125
+
126
+
127
+ //サーバの設定
128
+
129
+ //$mail->SMTPDebug = SMTP::DEBUG_SERVER; // デバグの出力を有効に(テスト環境での検証用)
130
+
47
131
  $mail->SMTPDebug = 3;
48
132
 
49
133
  $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str<br>";};
50
134
 
51
- $mail->isSMTP();
135
+ $mail->isSMTP(); // SMTP を使用
52
136
 
53
137
  $mail->Host = 'smtp.gmail.com';
54
138
 
@@ -60,4 +144,110 @@
60
144
 
61
145
  $mail->Port = 465;
62
146
 
147
+
148
+
149
+ // ### OAUTH2 の設定 ###
150
+
151
+ $google_email = $row['From'];
152
+
153
+ $clientId = $row['Gid'];//
154
+
155
+ $clientSecret = $row['Gsecret'];
156
+
157
+ $refreshToken = $row['Gtoken'];
158
+
159
+
160
+
161
+ $provider = new Google(
162
+
163
+ [
164
+
165
+ 'clientId' => $clientId,
166
+
167
+ 'clientSecret' => $clientSecret,
168
+
169
+ ]
170
+
171
+ );
172
+
173
+
174
+
175
+ $mail->setOAuth(
176
+
177
+ new OAuth(
178
+
179
+ [
180
+
181
+ 'provider' => $provider,
182
+
183
+ 'clientId' => $clientId,
184
+
185
+ 'clientSecret' => $clientSecret,
186
+
187
+ 'refreshToken' => $refreshToken,
188
+
189
+ 'userName' => $google_email,
190
+
191
+ ]
192
+
193
+ )
194
+
195
+ );
196
+
197
+ // ### OAUTH2 の設定 ここまで ###
198
+
199
+
200
+
201
+ //差出人アドレス(Gmail のアドレス), 差出人名
202
+
203
+ $mail->setFrom($google_email, mb_encode_mimeheader($TITLE));
204
+
205
+ $mail->addAddress($row['To'], mb_encode_mimeheader(""));
206
+
207
+ $mail->addReplyTo($ReplyToEMAIL, mb_encode_mimeheader(""));
208
+
209
+
210
+
211
+ //コンテンツ設定
212
+
213
+ $mail->isHTML(false); // HTML形式を指定
214
+
215
+ $mail->Subject = mb_encode_mimeheader($row['Title']);
216
+
217
+ $mail->Body = mb_convert_encoding($row['Body'],"UTF-8","UTF-8");
218
+
219
+
220
+
221
+ echo "送信前";
222
+
223
+
224
+
225
+ $mail->send(); //送信
226
+
227
+
228
+
229
+ echo "送信後";
230
+
231
+
232
+
233
+ //キューを消す
234
+
235
+ $sql = "DELETE FROM q WHERE Id=?";
236
+
237
+ $stmt = $pdo1->prepare($sql);
238
+
239
+ $array = array($row['Id']);
240
+
241
+ $stmt -> execute($array);
242
+
243
+ }
244
+
245
+ }catch (Exception $e) {
246
+
247
+ echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
248
+
249
+ }
250
+
251
+ ?>
252
+
63
253
  ```

1

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

2021/01/15 05:32

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,9 @@
6
6
 
7
7
 
8
8
 
9
- 突然、送信ができなくなりました。
9
+ 突然、メールが送信されなくなりました。
10
+
11
+ 送信されないので、当然ながら受信はされません。
10
12
 
11
13
 
12
14