老师,帮忙看下,运行后报错:'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参数置空尝试一下。

0
0

Python自动化测试开发实战,能帮你就业的测试课

开发高扩展、高可用的自动化测试框架,利用好测试自动化技术。

445 学习 · 157 问题

查看课程