WindowsPCでPythonを通してGmailにアクセスし未読のメールをダウンロードさせる事が出来ます。
ただしgoogleのアカウントの方にも設定が必要になります。
https://myaccount.google.com/security
ここで設定を変更します。
2022年5月以前は「安全性の低いアプリを許可」をすれば良かっただけですが
以降は「2段階認証」をして「アプリパスワード」を入手し、それをPythonに入力しなければならなくなったようです。
まずは「2段階認証」を設定します。
この2段階認証とはGoogleにログインする度にスマホへSNSメッセージでGoogle確認コードが送られてくるので、それを入力する必要になるシステムです。
なのでスマホの電話番号を登録する必要があります。
スマホが無い人はスマホを入手してから試してください。
2段階認証が設定できたらアプリパスワードを取得します。
「アプリ パスワードを生成するアプリとデバイスを選択してください。」とされる文字の下にある「アプリを選択」のプルダウンメニューから「メール」を
「デバイスを選択」のプルダウンメニューから「Windows パソコン」を選択し、右下にある生成ボタンを押します。
そうするとアプリ パスワードが作られるので、これを使ってGmailを取得する時のパスワードとして利用します。
PythonでGmailに来たメールを読み込んで.emlファイルにしてダウンロードする方法
import imaplib
import email
import sys, codecs
from email.header import decode_header
#-----------------------------------
UserName="****@gmail.com"
AppPass="******************"
LabelName='***/***'
#-----------------------------------
def get_content(msg):
charset = msg.get_content_charset()
payload = msg.get_payload(decode=True)
try:
if payload:
if charset:
return payload.decode(charset)
else:
return payload.decode()
else:
return ""
except:
return payload # デコードできない場合は生データにフォールバック
#-----------------------------------
gmail = imaplib.IMAP4_SSL("imap.gmail.com",'993')
gmail.login(UserName ,AppPass)
gmail.select("Notes")
gmail.select(LabelName)
typ, data = gmail.search(None, "(UNSEEN)")
#typ, data = gmail.search(None, "(ALL)")
print("メール読み込み開始")
i=0
#取得したメール一覧の処理
for num in data[0].split():
try:
typ, d = gmail.fetch(num, '(RFC822)')
msg = email.message_from_bytes(d[0][1])
header = decode_header(msg.get('Subject'))
msg_subject = header[0][0]
msg_encoding = header[0][1] or 'ISO-2022-JP'
try:
fr=str(msg_subject.decode(msg_encoding))
except:
fr='gmail'+str(i)
pass
fr=fr.replace('$','$')
fr=fr.replace('.','.')
fr=fr.replace('<','<')
fr=fr.replace('>','>')
fr=fr.replace('@','@')
fr=fr.replace('%','%')
fr=fr.replace(':',':')
fr=fr.replace('?','?')
fr=fr.replace('|','|')
fr=fr.replace('"','')
fr=fr.replace("'",'')
fr=fr.replace(' ','_')
fr=fr.replace('/','/')
fr=fr.replace('*','*')
fr=fr.replace('+','+')
fr=fr.replace('-','ー')
fr=fr.replace('\\','¥')
fr=fr.replace('\r\n','')
fr=fr.replace('\n','')
#print(str(i+1)+"個目 "+fr)
#print(fr)
#exit()
f=codecs.open(Path+fr+str(i+1)+".eml","w","utf-8")
print(get_content(msg))
f.write(get_content(msg))
f.close()
i=i+1
#break
except:
i=i+1
pass
#終了処理
gmail.close()
gmail.logout()
UserNameにGmailのアドレスを入力
AppPassにアプリパスワードを入力します。
LabelNameにはGmailの中から取得したいラベルの物を指定します。