下記のメール本文から〇〇〇の中身を取得したいです。
現在下記の方法、正規表現で文字列を取得しておりますが、
ただ文字数が変化する場合がありますので、取得精度は高くないです。
〇〇〇Bは毎回固定です。
11.0MB,1.0GB,111.0GB、1111.0GBなど変化しますが、**の間変化はないです。
そのため本文の前後の文字数が変化しても**の間にある文字をより良い制度で取得する方法ありますでしょうか。
一部取得部分
#本文からcapacityを取得 capacity=(re.findall('reached *.*MB', body))[0][9:] print(capacity)
メール本文内容
Hello, Please note that your Webtest Spot device (id: 12345) has reached *11.0MB* today.
取得結果
11.0MB
メール本文取得CODE
#メール本文からメールアドレス取得---------------------------------------- import imaplib, re, email, six, dateutil.parser import base64 mail=imaplib.IMAP4_SSL('imap.gmail.com',993) #SMTPは993,POPは995 mail.login('example@','1213') mail.select('example') #メールボックスの選択 #UNSEEN未読メールを読み込む # type,data=mail.search(None,'UNSEEN') #メールボックス内にあるすべてのデータを取得ALL #特定のメールUNSEEN未読メールを読み込む term = u"alert".encode("utf-8") mail.literal = term type,data=mail.search("utf-8", "UNSEEN SUBJECT") for i in data[0].split(): #data分繰り返す ok,x=mail.fetch(i,'RFC822') #メールの情報を取得 #文字コード指定 ms=email.message_from_string(x[0][1].decode('iso-2022-jp')) #パースして取得 #差出人を取得 ad=email.header.decode_header(ms.get('From')) ms_code=ad[0][1] if(ms_code!=None): address=ad[0][0].decode(ms_code) address+=ad[1][0].decode(ms_code) else: address=ad[0][0] # #タイトルを取得 # sb=email.header.decode_header(ms.get('Subject')) # ms_code=sb[0][1] # if(ms_code!=None): # sbject=sb[0][0].decode(ms_code) # else: # ms_code=sb[1][1] # sbject=sb[1][0].decode(ms_code) #本文を取得 if ms.is_multipart(): for payload in ms.get_payload(): if payload.get_content_type() == "text/plain": body = payload.get_payload() else: if ms.get_content_type() == "text/plain": body = ms.get_payload() #メールの日時を取得 #time = dateutil.parser.parse(ms.get('Date')).strftime("%Y-%m-%d %H:%M") #time_comment = dateutil.parser.parse(ms.get('Date')).strftime("%Y-%m-%d %H:%M") #print(time) #出力 print(body) #print(address) # #Data confirm null確認 if not body: print('NULL') else: mail.close() mail.logout() # #body文字コードを元に戻すbase64 # body_decode=(base64.b64decode(body).decode()) # print(body_decode) # id=(re.findall('(\w+): ([-\w\s@.]+)', body))[1][1] # print(id) #本文からcapacityを取得 capacity=(re.findall('reached *.*MB', body))[0][9:] print(capacity)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/29 06:58