使用Python类实现邮件发送失效,求排查代码问题
代码中的问题及修复方案
- 实例方法缺少
self参数:send_mail作为类的实例方法,必须将self作为第一个参数,否则无法访问实例绑定的属性。 - 错误使用
global关键字:你试图用global获取变量,但这些值已经通过__init__绑定到实例上,应该用self.email_sender、self.email_receiver、self.subject、self.text来访问。 - 邮件主题硬编码:
em['Subject'] = "subject"是固定字符串,应该替换为实例的self.subject属性。 - 收件人参数错误:
smtp.sendmail(email_sender, email_sender, em.as_string())里第二个参数写成了发件人,需要改成self.email_receiver。 - 未定义变量调用:
Read_Database(databaseId, headers)中的databaseId和headers没有在当前方法或类中定义,需确保这两个变量可被访问(比如作为实例属性传入,或在方法内正确定义)。 - 邮件内容硬编码:
body = "text"没有使用传入的self.text,应该改成body = self.text。
修复后的代码示例:
import smtplib from email.message import EmailMessage import ssl class Page_Class: def __init__(self, email_sender, email_receiver, client, subject, text, databaseId, headers): self.email_sender = email_sender self.email_receiver = email_receiver self.client = client self.subject = subject self.text = text self.databaseId = databaseId self.headers = headers self.send_mail() def send_mail(self): email_password = "test" body = self.text em = EmailMessage() em['From'] = self.email_sender em['To'] = self.email_receiver em['Subject'] = self.subject em.set_content(body) context = ssl.create_default_context() with smtplib.SMTP_SSL('smtp.gmail.com', 465, context=context) as smtp: smtp.login(self.email_sender, email_password) smtp.sendmail(self.email_sender, self.email_receiver, em.as_string()) self.Read_Database() def Read_Database(self): # 在这里实现Read_Database的逻辑,使用self.databaseId和self.headers pass
内容的提问来源于stack exchange,提问作者Stijn
相关产品推荐
相关产品推荐

