老师,帮忙看下,运行后报错:'tuple' object has no attribute 'encode'
来源:7-5 自动化测试开发框架拓展之邮件模块开发(下)

慕九州7187113
2021-12-13
错误截图如下:
# -*- coding: utf-8 -*-
"""
@Time : 2021/12/10 9:18
@Author : chenlu
@FileName: mymail.py
@Software: PyCharm
"""
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from smtplib import SMTP
from os.path import exists
import re
class Mail:
def __init__(self,
sender: str,
recevier: [str, list],
subject: str,
authcode: str,
server: str,
attachment: [str, list] = None,
message: str=None):
self.sender = sender,
self.receiver = recevier,
self.subject = subject,
self.message = message,
self.attachment = attachment,
self.server = server,
self.authcode = authcode
self.msg = MIMEMultipart('related')
"""
对于multipart类型,下面有三种子类型:mixed、alternative、related
multipart/mixed可以包含附件。
multipart/related可以包含内嵌资源。
multipart/alternative 纯文本与超文本共存
"""
def sendmail(self):
self.msg['Subject'] = self.subject
self.msg['From'] = self.sender
self.msg['To'] = self.receiver
if self.message:
self.msg.attach(MIMEText(self.message))
if self.attachment:
if isinstance(self.attachment, str):
self.attachment_payload(self.attachment)
if isinstance(self.attachment, list):
for _file in self.attachment:
self.attachment_payload(_file)
smtp_server = SMTP(self.server)
smtp_server.login(user=self.sender, password=self.authcode)
smtp_server.sendmail(from_addr=self.sender, to_addrs=self.receiver, msg=self.msg.as_string())
smtp_server.quit()
def attachment_payload(self, file_path):
if not exists(file_path):
raise FileNotFoundError(f'{file_path}:附件文件不存在或者路径错误!')
with open(file_path, 'r', encoding='utf-8') as fp:
att = MIMEText(fp.read(), 'plain', 'utf-8')
filename = re.split(r'[\\|/]', file_path)[-1]
att["Content-Type"] = 'application/octet-stream'
att["Content-Disposition"] = f'attachment; filename={filename}'
return self.msg.attach(att)
mail = Mail(sender='1178708007@qq.com',
recevier='1178708007@qq.com',
subject='UI自动化测试',
message='自动化测试结果成功',
authcode='ljqetxopdorhjjci',
server='smtp.qq.com',
attachment=None)
mail.sendmail()
写回答
1回答
-
托尼老师
2021-12-17
同学,我这里发送邮件是正常的。
看你的报错信息是因为:
类MIMEText对message进行编码的时候,由于message是元组而不是字符串,导致无法编码报错的。
你可以试着把message参数置空尝试一下。
00
相似问题