質問編集履歴
1
コードの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -42,7 +42,7 @@
|
|
42
42
|
|
43
43
|
def create_message(sender, to, subject, message_text,
|
44
44
|
|
45
|
-
thread_id=
|
45
|
+
thread_id=None, reply_to=None, past_message=None):
|
46
46
|
|
47
47
|
if past_message:
|
48
48
|
|
@@ -98,6 +98,22 @@
|
|
98
98
|
|
99
99
|
|
100
100
|
|
101
|
+
### Thread IDを取得する
|
102
|
+
|
103
|
+
def get_thread_list(service, user_id, query):
|
104
|
+
|
105
|
+
return service.users().threads().list(userId=user_id, q=query).execute()
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
### メッセージの中身を取得する
|
110
|
+
|
111
|
+
def get_thread(service, user_id, thread_id):
|
112
|
+
|
113
|
+
return service.users().threads().get(userId=user_id, id=thread_id).execute()
|
114
|
+
|
115
|
+
|
116
|
+
|
101
117
|
def main():
|
102
118
|
|
103
119
|
creds = None
|
@@ -134,15 +150,57 @@
|
|
134
150
|
|
135
151
|
service = build('gmail','v1',credentials=creds)
|
136
152
|
|
153
|
+
|
154
|
+
|
155
|
+
##### 一発目(threadが立っていない)のときにコメントアウト #####
|
156
|
+
|
157
|
+
query = 'in:sent' # 自分が送信したThreadを検索
|
158
|
+
|
159
|
+
thread_list = get_thread_list(service,'me',query) # jsonをdictionaryにdumpしたものが帰ってくる
|
160
|
+
|
161
|
+
thread_id = thread_list['threads'][0]['id']
|
162
|
+
|
163
|
+
print(thread_id) # 検索の最初のThreadのthreadIdが出力される
|
164
|
+
|
165
|
+
thread = get_thread(service,'me',thread_id)
|
166
|
+
|
167
|
+
latest_message = thread['messages'][-1]['payload'] # threadの一番最後のメッセージオブジェクトを取得
|
168
|
+
|
169
|
+
latest_msg_body = base64.urlsafe_b64decode(latest_message['body']['data']).decode() # base64形式なのでstringにdecodeする
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
###ついでに、ここからReplyするメッセージIDをHeaderから取得しておく
|
174
|
+
|
175
|
+
for att in latest_message['headers']:
|
176
|
+
|
177
|
+
if att['name'] == 'Message-Id':
|
178
|
+
|
179
|
+
message_id = att['value']
|
180
|
+
|
181
|
+
break
|
182
|
+
|
183
|
+
##### コメントアウトおわり ######
|
184
|
+
|
185
|
+
|
186
|
+
|
137
|
-
sender = '*
|
187
|
+
sender = '******@******'
|
138
|
-
|
188
|
+
|
139
|
-
to = '
|
189
|
+
to = '######@######'
|
140
190
|
|
141
191
|
subject = 'Gmail API test'
|
142
192
|
|
193
|
+
# message_text = 'This mail is sent via the Gmail API' # 1回目(reply_toとthread_idは定義しない)
|
194
|
+
|
143
|
-
message_text = 'This mail is test for sending to the same thread'
|
195
|
+
message_text = 'This mail is test for sending to the same thread' # 2回目
|
196
|
+
|
144
|
-
|
197
|
+
# message_text = 'This mail is test for sending to the same thread (2nd)' #3回目
|
198
|
+
|
199
|
+
|
200
|
+
|
145
|
-
message = create_message(sender, to, subject, message_text)
|
201
|
+
# message = create_message(sender, to, subject, message_text) # 一発目のみ
|
202
|
+
|
203
|
+
message = create_message(sender, to, subject, message_text, thread_id, message_id, latest_msg_body)
|
146
204
|
|
147
205
|
send_message(service, 'me', message)
|
148
206
|
|
@@ -156,21 +214,11 @@
|
|
156
214
|
|
157
215
|
|
158
216
|
|
159
|
-
こちらのリンクを参考にしてみたのですが、
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
An error ocurred: <HttpError 404 when requesting https://gmail.googleapis.com/gmail/v1/users/me/messages/send?alt=json returned "Requested entity was not found.". Details: "[{'message': 'Requested entity was not found.', 'domain': 'global', 'reason': 'notFound'}]">
|
166
|
-
|
167
|
-
```
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
今回の目的『任意のメール内のスレッドIDに返信メールを送る』を達成するためには、どのようにしたらいいのでしょうか。
|
172
|
-
|
173
|
-
自分の書いたコードに不足している情報やエラーの解決方法などが分かる方がいたら教えていただきたいです。
|
217
|
+
こちらのリンクを参考にしてみたのですが、メッセージIDを指定して実行しても新着メールとして届いてしまいます。。
|
218
|
+
|
219
|
+
メッセージIDで検索し、その中の最新のスレッドIDに返信をするには何か設定が足りないのでしょうか。
|
220
|
+
|
221
|
+
もしわかる方いたら教えてください。
|
174
222
|
|
175
223
|
|
176
224
|
|