Pythonでヤフーメールを受信
Pythonでヤフーメールを受信
スクレイピングで確認メールが飛んできてそこからアクセスするときとかに必要だったので、とりあえず受信して最新メール取得するやつだけ作ってみた。
本当はクラスにして送信とかも作っておくといつか使うときが来ると思う。
このエラーは実際に見えている文字とコンピューター内部で扱う数値が違うので初心者が良く躓くことがある気がする。
本当はクラスにして送信とかも作っておくといつか使うときが来ると思う。
import os
import sys
import ssl
import imaplib
import email
from email.header import decode_header, make_header
def getSakubunLoginURL():
ret = "" #戻り値(ログインURL)
server = 'imap.mail.yahoo.co.jp' #yahooメール。
# メールアドレスとログインパスワード
usr = 'xxxx@yahoo.co.jp'
password = 'xxxxx'
try:
context = ssl.create_default_context()
imapclient = imaplib.IMAP4_SSL(server, 993, ssl_context=context)
imapclient.login(usr,password)
imapclient.select()
typ, data = imapclient.search(None, 'all')
data2 = data[0].split()
num = data2[len(data2)-1] #最新のやつだけ抽出
typ, data = imapclient.fetch(num, '(RFC822)')
email_message = email.message_from_bytes(data[0][1])
email_from = str(make_header(decode_header(email_message['From'])))
subject = str(make_header(decode_header(email_message['Subject'])))
# msg_encoding = 'iso-2022-jp'
msg_encoding = 'utf-8'
if email_message.is_multipart() == False: # シングルパート
byt = bytearray(email_message.get_payload(), msg_encoding)
body = byt.decode(encoding=msg_encoding)
else: # マルチパート
prt = email_message.get_payload()[0]
byt = prt.get_payload(decode=True)
body = byt.decode(encoding=msg_encoding)
print('from:', email_from,' subject:',subject)
print('------------------------------------------')
print(body)
ret = body[body.find("https"):] #本文からURL抽出
imapclient.close()
imapclient.logout()
except Exception as ee:
sys.stderr.write("*** error ***\n")
sys.stderr.write(str(ee) + '\n')
return ret
getSakubunLoginURL()
エンコードをiso-2022-jpでやると0xe3がアスキー文字の規定外になりエラーになってしまうのでutf8でやっとく。このエラーは実際に見えている文字とコンピューター内部で扱う数値が違うので初心者が良く躓くことがある気がする。
アカウントを作成 して、もっと沢山の記事を読みませんか?
この記事が気に入ったら Sylphy さんを応援しませんか?
メッセージを添えてチップを送ることができます。
この記事にコメントをしてみませんか?