微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Python从电子邮件正文中删除某些文本

如何解决使用Python从电子邮件正文中删除某些文本

我正在尝试使用以下Python代码解析转发的电子邮件正文

import imapclient
import os
import pprint
import pyzmail
import email

#my email info
EMAIL_ADRESS = os.environ.get('DB_USER')
EMAIL_PASSWORD = os.environ.get('PYTHON_PASS')

#login to my email
imap0bj =  imapclient.IMAPClient('imap.gmail.com',ssl = True)
imap0bj.login(EMAIL_ADRESS,EMAIL_PASSWORD )
print("ok")


pprint.pprint(imap0bj.list_folders())
#Selecting my InBox
imap0bj.select_folder('INBox',readonly = True)

#Getting UIDs from InBox
UIDs = imap0bj.search(['SUBJECT','Contact FB Applicant','ON','16-Oct-2020'])
print(UIDs)


rawMessages = imap0bj.fetch(UIDs,['BODY[]'])
message = pyzmail.PyzMessage.factory(rawMessages[9999][b'BODY[]'])

message.text_part != None
#Body of the email returned as a string
msg = message.text_part.get_payload().decode(message.text_part.charset)

print(msg)

imap0bj.logout()

代码输出与此类似的字符串

   ---------- Forwarded message ---------
    From: Someone <Mail@mail.biz>
    Date: Wed,Oct 14,2020 at 1:23 PM
    Subject: Fwd: ? Contact FB Applicant?
    To: <mail@mail.com>
    
    
    
    
   ---------- Forwarded message ---------
    From: Someone <Mail@mail.biz>
    Date: Wed,2020 at 1:23 PM
    Subject: Fwd: ? Contact FB Applicant?
    To: <mail@mail.com>
    
    
    The following applicant filled out the form via Facebook.  Contact
    immediately.
    
    Some Guy
    999999999999
    mail@mail.com

但是我不希望“转发邮件”部分。我只想从“以下申请人...”开始,然后才是我关心的信息。我如何摆脱其他东西?我非常感谢您的帮助。谢谢!

解决方法

您可以使用io.StringIO

这是您的用法。

from io import StringIO

# your code goes here
...
...

msg = message.text_part.get_payload().decode(message.text_part.charset)

sio = StringIO(msg)

sio.seek(msg.index('The following applicant'))

for line in sio:
  print(line)

工作原理:

StringIO允许您将字符串视为流(文件)。 StringIO.seek将流的位置移动到特定位置。 (0是流的开头) str.index返回字符串在字符串中的第一位置。放在一起:将流的开头移至所需字符串的第一个出现位置,然后从流中读取。

,

从这种格式来看,您需要逐行阅读。 如果遇到以'---'开头的行,例如line [:3] ='---' 您忽略它及其后的行,直到您读到空行, 如果再次以“-”开头,请重复此过程 然后,第一个非空行应为“以下申请人...”

您可以将此代码埋入无限循环并中断,这是伪代码

while True:
  line = read next line
  if length(line) ==0: continue
  if line[:3] = '---'
    while true:
      line = read next line
      if line:
        break
      else:
        continue
  else:
    break
read lines and print everthing from here

假设读取行函数记录了已读取的行数以及将要读取的行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。