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の中から取得したいラベルの物を指定します。