参考ページ
・Python3でEメール送受信(今回のソースのベース)
・PythonでHTML解析
今回のテーマ
WiXが送信してきたフォームデータ(HTMLメール)を読解します。
のちにdb登録するためにこの加工が必要。
WiXとは
オンラインでWebサイトを作れるやつです。最近まで知らなかったけど依頼を請けて知った。コーポレートサイトなどの「独特のエッジはいらないからしっかりしたいい感じのやつをなるはやで!」みたいなサイトにはいいかもしれない。
こんなんメールが送られてくる
※くっそー!作ったけど文字化けるぜ!
しかも「=E5=B2=A1=E7=94=B0」でそのままググると、なかに書いてあるっぽいものが検索可能...(笑)
ここまで来たのに... 誰か助けて...
[9] =E5=B2=A1=E7=94=B0
[15] =E3=82=B9=E3=82=BF=E3=82=A4=E3=83=AB=E3=83=97=E3=83=A9=E3=82=B9
(...以下省略)
※QPRINTという文字コードらしい
ここで テキトーに組み合わせてたらうまい具合にできた。
これが変換できればいいんだが...。
※Gmailのセキュリティ
プログラムを実行して、ログインできねーぞー!みたいなエラーが出たら
「2段階認証を初期設定したうえでオフにする」。依頼されて、メールアドレスがすでに決まっている場合などに、そのメールアドレスの2段階認証プロセスの初期設定が済んでない可能性がある。
◎これか?
StackOverflow を読んで「quopri.decodestring()」を知り、
公式ドキュメント を読んで「quopri.decodestring()」がbytesを吐くことを知り、
ブログ を読んで「UTF-8 bytesからstr」を知った。
(スマートに書いてるけど相当行き来した)
ソース
import os,imaplib,quopri
from bs4 import BeautifulSoup
LOGIN_UID = "****@gmail.com"
LOGIN_PWD = "****"
def GetGmailMessage(fromaddress):
#コネクションの確立
gmail = imaplib.IMAP4_SSL("imap.gmail.com")
#ログイン
gmail.login(LOGIN_UID, LOGIN_PWD)
#メールボックス名を「inbox」に指定(※標準がinboxなので省略可能)
gmail.select("inbox")
#すべてのメールをたぐって、特定の送信先のメールをresに返す
res = gmail.search(None, "(ALL HEADER FROM {})".format(fromaddress))
#「res」をもう少し掘ったところにメールの集団があるのでそれを取得
mails = res[1][0].split()
#メッセージ数が0だった場合は処理終了
if len(mails)==0:
return()
#とりあえずデスクトップに「MailFile.log」というテキストを作成してうまく取れるか検証する
f = open("MailFile.log","w")
#各メールに対する処理
for mail in mails:
data = gmail.fetch(mail, '(RFC822)')[1][0][1]
soup = BeautifulSoup(data, "lxml")
for i,td in enumerate(soup.find_all("td")):
if td.string != None:
f.write("[" + str(i) + "] " + quopri.decodestring(td.string).decode('utf-8') + "\n")
f.write("\n")
#あとかたづけ
f.close()
return()
if __name__ == '__main__':
#「MailFile.txt」というテキストを作成する場所
os.chdir(r"C:\Users\Yoshitaka\Desktop")
#Gmailを受信(引数:どこからのメールを?)
GetGmailMessage(fromaddress = "****@powr.io")
つぎは?
SQLServerへのINSERTは「Pythonの環境構築とDBへのSQL実行例のメモ2016」で出来てるので、Excelにデータを落とすこの辺だね。PythonがInsertして、すぐさま最新データでReadしてPandasからExcelに吐くというのがいいと思う。そうすればその先の配布でWindowsに行こうがMac(MacのVBAはガタガタで使いものにならない)に行こうが大丈夫だ。