You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 15:30:59