【问题标题】:Facing problem to decode ?UTF-8?B?ZnVjayDwn5CO?=! type in subject. Using IMAP and Python解码 ?UTF-8?B?ZnVjayDwn5CO?=!输入主题。使用 IMAP 和 Python
【发布时间】:2020-05-25 08:08:19
【问题描述】:

需要得到真正的字符串而不是那个编码的字符串。很少有主题是字符串格式的,但很少有这种编码格式的,我不知道如何解决。

如何解码字符串并打印主题的解码部分?


FROM_EMAIL  = "my_id@gmail.com"
FROM_PWD    = "my Password"
SMTP_SERVER = "imap.gmail.com"
SMTP_PORT   = 993
l=['Developer','Architect','NEED','Internship','Urgent']
def get_body(msg):
    if msg.is_multipart():
        return get_body(msg.get_payload(0))
    else:
        return msg.get_payload(None,True)
def readmail():
    mail = imaplib.IMAP4_SSL(SMTP_SERVER)
    mail.login(FROM_EMAIL,FROM_PWD)
    mail.select('inbox')
    type, data = mail.search(None, '(SINCE "20-May-2020" BEFORE "26-May-2020")')
    mail_ids = data[0]
    id_list = mail_ids.split()
    id_list=id_list[::-1]
    first_email_id = id_list[0]
    latest_email_id = id_list[-1]
    for byte_obj in id_list:
        typ, data = mail.fetch(byte_obj, '(RFC822)' )
        raw=email.message_from_bytes(data[0][1])
        msg=get_body(raw)
        s='' 

        s=raw['SUBJECT']
        s1=raw['Date']
        print(s)
readmail()

输出:

Winner announcement!  Amazon Kindle Oasis.

[FREE WEBINAR] Natural Language Processing for Beginners

Godrej 24 | Get Rs. 2 Lakh Gold Voucher | 2 & 3 BHK at Rs. 83 Lakh*

=?UTF-8?B?TGFzdCBkYXkgdG8gc2F2ZSEgUG9wdWxhciBjb3Vyc2VzIGFzIGw=?=
        =?UTF-8?B?b3cgYXMg4oK5NDU1?=

Panda just uploaded a video

Vernix Gamerz just uploaded a video

【问题讨论】:

  • Email.header 有解码这些功能,但是如果你使用 3.6 新版本的邮件解析功能,会自动完成。
  • 有一个包含已解析邮件的库:github.com/ikvk/imap_tools

标签: python python-3.x email gmail imap


【解决方案1】:

您的大部分问题已在此处得到解答:

Find, decode and replace all base64 values in text file

为了更好地理解您的示例,我提供了一些附加信息:

您的部分主题行以base64-格式编码。

以你的字符串s=raw['SUBJECT']的以下部分为例

=?UTF-8?B?TGFzdCBkYXkgdG8gc2F2ZSEgUG9wdWxhciBjb3Vyc2VzIGFzIGw=?= =?UTF-8?B?b3cgYXMg4oK5NDU1?=

结构如下:

首先你有:

?UTF-8?B?

然后是编码字符串:

TGFzdCBkYXkgdG8gc2F2ZSEgUG9wdWxhciBjb3Vyc2VzIGFzIGw

紧随其后

=?

将编码字符串从base64 转换为UTF-8 会得到文本:

Last day to save! Popular courses as l

您可以在https://www.base64decode.org/下验证这一点

【讨论】:

  • 那么base64如何转成字符串呢?
  • 是的。您可以在使用我提供的正则表达式将字符串拆分为编码和未编码部分之后执行此操作。
  • 你能不能给我一个小sn-p 因为我是新人,不太熟悉
  • 您的问题已经在这里解决了:link
猜你喜欢
  • 2013-03-26
  • 1970-01-01
  • 2012-10-05
  • 2018-04-30
  • 2014-01-24
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多