1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WiXが送信してきたHTMLメールを読解する

Last updated at Posted at 2016-03-26

参考ページ

Python3でEメール送受信(今回のソースのベース)
PythonでHTML解析

今回のテーマ

WiXが送信してきたフォームデータ(HTMLメール)を読解します。
のちにdb登録するためにこの加工が必要。

WiXとは

オンラインでWebサイトを作れるやつです。最近まで知らなかったけど依頼を請けて知った。コーポレートサイトなどの「独特のエッジはいらないからしっかりしたいい感じのやつをなるはやで!」みたいなサイトにはいいかもしれない。

こんなんメールが送られてくる

(ヒギィ...!)
image

※くっそー!作ったけど文字化けるぜ!

しかも「=E5=B2=A1=E7=94=B0」でそのままググると、なかに書いてあるっぽいものが検索可能...(笑)
ここまで来たのに... 誰か助けて...

MailFile.txt
[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という文字コードらしい

ここで テキトーに組み合わせてたらうまい具合にできた。
これが変換できればいいんだが...。
image

※Gmailのセキュリティ

プログラムを実行して、ログインできねーぞー!みたいなエラーが出たら

image

2段階認証を初期設定したうえでオフにする」。依頼されて、メールアドレスがすでに決まっている場合などに、そのメールアドレスの2段階認証プロセスの初期設定が済んでない可能性がある。

2段階認証プロセスを有効にする
image

こっちも有効じゃないとダメだ(設定変更後、3分ぐらい必要)
image

◎これか?

StackOverflow を読んで「quopri.decodestring()」を知り、
公式ドキュメント を読んで「quopri.decodestring()」がbytesを吐くことを知り、
ブログ を読んで「UTF-8 bytesからstr」を知った。
(スマートに書いてるけど相当行き来した)

ソース

Gmail.py
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はガタガタで使いものにならない)に行こうが大丈夫だ。

image

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?