配置邮箱、读取基本的邮件内容请参考:python读取并解析邮箱邮件,读取邮件主题、内容、时间文章来源:https://www.toymoban.com/news/detail-689231.html
以excel为例:文章来源地址https://www.toymoban.com/news/detail-689231.html
- 获取邮件:
email_value_config = {
'imap_server': 'imap.exmail.qq.com',
'username': 'xxxx@xxxx.com',
'password': 'xxxxx',
}
# 连接到邮箱服务器
email_server = imaplib.IMAP4_SSL(email_value_config['imap_server']) # 这样就已经链接到目标邮箱了
email_server.login(email_value_config["username"], email_value_config['password']) # 这里登录
email_server.select('INBOX')
- 提取数据需要使用:
part.get_payload(decode=True)
- 写入本地文件时,使用:
file_name = str(email.header.make_header(email.header.decode_header(part.get_filename())))
# 直接解析文件名,文件名会是balabala.xlsx
with open(file_name, "wb") as save_file:
save_file.write(part.get_payload(decode=True))
示例代码
import imaplib
import email
from loguru import logger
def parse_body(message):
"""解析邮件/信体"""
for part in message.walk():
if not part.is_multipart(): # 这里要判断是否是multipart,用来判断附件是一个message列表
file_name = part.get_filename() # 附件需要有文件名
if file_name:
file_name = str(email.header.make_header(email.header.decode_header(part.get_filename()))) # 直接解析文件名,如果是excel,会在文件名中以.xlsx或.xls为后缀
if not ((".xls" in file_name) or (".xlsx" in file_name)): # 根据后缀判断附件是一个excel
continue
logger.debug(f"准备保存文件 {file_name}")
with open(file_name, "wb") as save_file: # 这里就是写入文件了
save_file.write(part.get_payload(decode=True))
logger.success(f"保存excel完成 {file_name}")
def main():
email_value_config = {
'imap_server': 'imap.exmail.qq.com',
'username': 'xxxx@xxxx.com',
'password': 'xxxxx',
}
# 连接到邮箱服务器
email_server = imaplib.IMAP4_SSL(email_value_config['imap_server']) # 这样就已经链接到目标邮箱了
email_server.login(email_value_config["username"], email_value_config['password']) # 这里登录
email_server.select('INBOX')
# 选择收件箱
_typ, _search_data = email_server.search(None, 'ALL')
# 开始解析
mailidlist = _search_data[0].split() # 转成标准列表,获得所有邮件的ID
print(f'一共解析邮件数量:{len(mailidlist)}')
# 解析内容
for mail_id in mailidlist:
result, data = email_server.fetch(mail_id, '(RFC822)') # 通过邮件id获取邮件
email_info = email.message_from_bytes(data[0][1]) # 邮件内容(未解析)
parse_body(email_info)
email_server.close()
email_server.logout()
if __name__ == '__main__':
main()
到了这里,关于python提取邮件的附件,以excel为例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!