PythonでGmailの添付ファイルのペイロードを取得し、io.BytesIOに保存してSlackにSlackerモジュールのfiles.uploadを利用して投稿しようとしていますが、正しいファイルとして表示されません。
例えばpdfの場合、ファイルをテキストとして開くと%%EOFしか保存されておらず、jpegもテキストとして開くと文字化けが見られます。
Heroku上での運用なので一時的にファイルを作って投稿後にまた消すというようなこともできないようなのでBytesIOを使っているのですが、適切に投稿される方法が他にあるのでしょうか。それともBytesIOの編集が足らないのでしょうか。
エラーメッセージは表示されていません。
python
1#ファイルをgetします 2 def GetSentence(self, service, TheID):#本文と添付ファイルとを詳らかに取得する 3 #raw (1) rawフォーマットでメールを取得 4 data = service.users().messages().get(userId='me', id=TheID, format='raw').execute() 5 raw_data = base64.urlsafe_b64decode(data['raw']) 6 # (2) Emailを解析する 7 eml = email.message_from_bytes(raw_data) 8 # (3) 本文を取得 9 body = "" 10 files = {} 11 for part in eml.walk(): # (4)テキスト部分の処理 12 if part.get_content_type() == 'text/plain': # (5) 13 s = part.get_payload(decode=True) 14 if isinstance(s, bytes): 15 charset = part.get_content_charset() or 'iso-2022-jp' # (6) 16 s = s.decode(str(charset), errors="replace") 17 for daylist in daylists: 18 tmpday = daylist 19 body += s 20 21 else:#ここから問題の添付ファイルの処理 22 attach_fname = part.get_filename() 23 if not attach_fname: 24 continue 25 tmpfile = io.BytesIO(part.get_payload(decode=True)) 26 decodefname = email.header.decode_header(attach_fname) 27 files[decodefname[0][0]] = tmpfile 28 # (7) 本文と添付ファイルをリターン 29 return body,files
python
1#ファイルをslackに投稿します 2 def mail_reminder2(message): 3 t_now = datetime.datetime.now(JST) 4 mails = mail_get(t_now - datetime.timedelta(hours=2), t_now - datetime.timedelta(hours=1)) 5 if mails: 6 slack.chat.post_message('channel',f'{len(mails)}件のメールがあります',as_user=True) 7 for mail in mails: 8 for key in mail['Files']: 9 tmptmp = slack.files.upload(channels='channel',content=mail['Files'][key],filename=key,thread_ts=ts_illius.body['ts']) 10 print(tmptmp) 11 mail['Files'][key].close() 12 13 else: 14 message.send('ないです')
return
1#上のプログラムのprint(tmptmp)です 2{"ok": true, "file": {"id": "FJ62CN5TQ", "created": 1556022549, "timestamp": 1556022549, "name": "ファイル名.pdf", "title": "ファイル名", "mimetype": "text/plain", "filetype": "text", "pretty_type": "\u30d7\u30ec\u30fc\u30f3\u30c6\u30ad\u30b9\u30c8", "user": "UHBKJHM1T", "editable": true, "size": 6, "mode": "snippet", "is_external": false, "external_type": "", "is_public": false, "public_url_shared": false, "display_as_bot": false, "username": "", "url_private": "https://files.slack.com/files-pri/TG3417JHR-PJ62C3NR2/______________pdf.pdf", ...... 3
1%%EOF
jpeg
1GbNWUBBAD+19BAD+1A@(gBAD+8EBAD+1FʤBAD+8C0BAD+93BAD+91VLqBAD+B7BAD+0BAD+81@^E3BAD+59]BAD+9BAD+83TBAD+82BAD+99sBAD+8ABAD+82ExBAD+9*ƀ-BAD+B4`IBAD+AABAD+5 NNsBAD+AABAD+1M#BAD+BEBAD+17BAD+8FBAD+A5LBAD+8IBAD+9BAD+4PBAD+91ydBAD+1S0BAD+8DBAD+BEQUBAD+BCTBAD+1D@$BAD+9CBAD+10wBAD+8CBAD+B5{BAD+12%BAD+92BAD+ABBAD+96lBAD+93BAD+ABoBAD+5BAD+8BAD+0BAD+156BAD+BAto-BAD+BBwBAD+EhBAD+246p 2WBAD+92BAD+19O"BAD+91n9$BAD+8ABAD+9CθBAD+80e?'ښȌ~~BAD+BFBAD+9|BAD+6ɌBAD+91BAD+9FJBAD+8D#BAD+94BAD+8FBAD+99BAD+89?\BAD+10BAD+EBAD+0BAD+1UdBAD+9CBAD+B5F~BAD+94BAD+B7BAD+86$iHBAD+B7`(BAD+FҀ%BAD+88BAD+0=BAD+9%BAD+EP敤 cTBAD+90BAD+CPEӹBAD+AB;3M|8BAD+15#]BAD+BBBAD+13BAD+4UBAD+ALBAD+BqBAD+9ABAD+2/BAD+8C!?BAD+1]j(BAD+97o(BAD+8ABAD+80?BAD+19 3........................
回答1件
あなたの回答
tips
プレビュー