web-dev-qa-db-ja.com

Python 3でメールコンテンツを読む方法

メールコンテンツにアクセスして読み取るために多くのコードを試しました。たとえば、Gmailについては認証しかできず、Outlookではメールを読み取ることができるコードがありますが、暗号化されています...しかし、今ではメールにのみアクセスし、出力されません暗号化された情報で。だから私はこれを解決するために助けが必要です。ありがとう

コードは次のとおりです:

import imaplib
import base64 

email_user = input('Email: ')
email_pass = input('Password: ')

M = imaplib.IMAP4_SSL('imap-mail.Outlook.com', 993)
M.login(email_user, email_pass)
M.select()
typ, data = M.search(None, 'ALL')
for num in data[0].split():
    typ, data = M.fetch(num, '(RFC822)')
    num1 = base64.b64decode(num1)
    data1 = base64.b64decode(data)
    print('Message %s\n%s\n' % (num, data[0][1]))
M.close()
M.logout()
3
Ricardo91

とにかくあなたのコードをチェックしました、そしていくつかのコメントがあります。 1つ目は、ここにコードを貼り付けたときにコンマが削除されたように見えることです。私はそれらを元に戻そうとしたので、私のコードがあなたのコードと一致することを確認してください。 Outlookにアクセスしないと、提案をテストできないことを忘れないでください。

import imaplib
import base64
email_user = input('Email: ')
email_pass = input('Password: ')

M = imaplib.IMAP4_SSL('imap-mail.Outlook.com', 993)
M.login(email_user, email_pass)
M.select()

typ, data = M.search(None, 'ALL')

for num in data[0].split():
    typ, data = M.fetch(num, '(RFC822)')   # data is being redefined here, that's probably not right
    num1 = base64.b64decode(num1)          # should this be (num) rather than (num1) ?
    data1 = base64.b64decode(data)
    print('Message %s\n%s\n' % (num, data[0][1]))  # don't you want to print num1 and data1 here?

M.close()
M.logout()

これが正しく再構成されていると仮定して、メッセージリストデータを10行目で呼び出しますが、fetch()を呼び出した結果を13行目のデータに再割り当てします。

14行目で、まだ定義されていないnum1をデコードします。数字をデコードする必要があるかどうかはわかりませんが、それは少し奇妙に思えます。

16行目では、デコードした値ではなく、エンコードされた値を出力しています。私はあなたがのようなものが欲しいかもしれないと思います

import imaplib
import base64
email_user = input('Email: ')
email_pass = input('Password: ')

M = imaplib.IMAP4_SSL('imap-mail.Outlook.com', 993)
M.login(email_user, email_pass)
M.select()

typ, message_numbers = M.search(None, 'ALL')  # change variable name, and use new name in for loop

for num in message_numbers[0].split():
    typ, data = M.fetch(num, '(RFC822)')
    # num1 = base64.b64decode(num)          # unnecessary, I think
    print(data)   # check what you've actually got. That will help with the next line
    data1 = base64.b64decode(data[0][1])
    print('Message %s\n%s\n' % (num, data1))

M.close()
M.logout()

お役に立てば幸いです。

2
João Graça

data [0] [1] .decode( 'utf-8')を使用します

それが動作します。私も同じ問題に直面していました。それは私のために働いた。

0
Anshu Chittora