不使用smtplib python发送电子邮件

2024-05-19 10:09:28 发布

您现在位置:Python中文网/ 问答频道 /正文

import smtplib

sender = 'den.callanan@gmail.com'
receiver = ['callanden@gmail.com']

message = """From: From Person <den.callanan@gmail.com>
To: To Person <callanden@gmail.com>
Subject: SMTP e-mail test

This is a test e-mail message.
"""

try:

    print("trying host and port...")

    smtpObj = smtplib.SMTP('smtp.gmail.com', 465)

    print("sending mail...")

    smtpObj.sendmail(sender, receiver, message)

    print("Succesfully sent email")

except SMTPException:

    print("Error: unable to send email")

我已经创建了两个新的电子邮件帐户(上面),都在同一个服务器(gmail)上进行测试。 它到达了打印“正在尝试主机和端口…”的点,并且不再继续。所以问题应该出在我输入的地址和端口号上。但是根据gmail的邮件发送服务器的详细信息,我已经正确地输入了它们。你知道怎么了?在

如果我删除端口号或尝试其他端口号,如587,则会出现错误。在


Tags: tofromcommessagemailgmailsendersmtplib
1条回答
网友
1楼 · 发布于 2024-05-19 10:09:28

Sending email via Gmail's SMTP servers requires TLS和身份验证。要进行身份验证,您需要make an application-specific password for your account。在

这个脚本对我很有用(尽管我使用了自己的GMail电子邮件地址和我自己的应用程序专用密码)。在下面的代码中,用您生成的密码替换特定于应用程序的\u密码。在

import smtplib

sender = 'den.callanan@gmail.com'
receiver = ['callanden@gmail.com']

message = """From: From Person <den.callanan@gmail.com>
To: To Person <callanden@gmail.com>
Subject: SMTP e-mail test

This is a test e-mail message.
"""

try:
    print("trying host and port...")

    smtpObj = smtplib.SMTP_SSL('smtp.gmail.com', 465)
    smtpObj.login("den.callanan@gmail.com", "APPLICATION_SPECIFIC_PASSWORD")

    print("sending mail...")

    smtpObj.sendmail(sender, receiver, message)

    print("Succesfully sent email")

except smtplib.SMTPException:
    print("Error: unable to send email")
    import traceback
    traceback.print_exc()

(为了调试这个问题,我在except语句中添加了打印回溯代码。例外情况有关于如何使其工作的具体信息。访问端口465时代码挂起,我想是因为TLS协商有问题,所以我不得不尝试使用端口587;然后我得到了很好的调试信息,解释了该怎么做。)

You can see info on the SMTP_SSL object here.

相关问题 更多 >

    热门问题