python - python发送邮件的效率

标签 python python-3.x email backend smtplib

我正在构建一个python程序,它可以在特定时间发送电子邮件,下面是我当前的代码

def send_email(user):
    msg = email.message.EmailMessage()
    msg["From"] = "my Email"
    msg["To"] = user
    msg["Subject"] = "Subject"
    msg.add_alternative("content", subtype = "html")

    server = smtplib.SMTP_SSL("smtp.gmail.com", 465)
    server.login("account", "password")
    server.send_message(msg)
    server.close()

我想将登录过程移到 send_email 函数之外,这样它就不必每次需要发送电子邮件时都登录,所以我这样做了

server = smtplib.SMTP_SSL("smtp.gmail.com", 465)
server.login("account", "password")

def send_email(user):
    msg = email.message.EmailMessage()
    msg["From"] = "my Email"
    msg["To"] = user
    msg["Subject"] = "Subject"
    msg.add_alternative("content", subtype = "html")

    server.send_message(msg)
    server.close()

但是我开始收到此错误:smtplib.SMTPServerDisconnected:请先运行 connect() 。 如何解决这个问题呢?或者还有其他方法可以提高效率吗?

最佳答案

每次调用 send_email 时,您都会调用 server.close(),因此您需要再次连接/登录才能发送另一个邮件邮件。

server.close 调用移至 send_email 函数外部。

但是,您确定保持 session 开放是最好的方法吗?首先,我尝试使用分析器来确保瓶颈确实存在于登录过程中,而不是其他地方(即发送过程本身)。

关于python - python发送邮件的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71194794/

相关文章:

python - 将参数集列表传递给函数

python - django 创建自定义表单

python-3.x - 力矩保持阈值 : Trilevel Case

python-3.x - PyMongo [SSL : CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate

java - 使用在 netbeans 上工作但不在 tomcat 8 上工作的 java 发送电子邮件

email - Postfix SMTP 中继 : client does not offer TLS client certificate to the server?

Python 模块 : functions calling each other

python - bool 检查不起作用

python - tkinter - wm 协议(protocol)不处理 WM_HELP 消息

来自电子邮件循环的 VBA 数据