KKD*_*KKD 23 python smtp smtplib
使用python我想从我的应用程序发送电子邮件,但它显示错误
SMTP AUTH extension not supported by server
Run Code Online (Sandbox Code Playgroud)
该计划的代码,
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
fromaddr = "test1@example.com"
toaddr = "test2@example.com"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Test Mail"
body = "Test mail from python"
msg.attach(MIMEText(body, 'plain'))
server = smtplib.SMTP('smtp.example.com', 25)
server.ehlo()
server.starttls()
server.ehlo()
server.login(fromaddr, "password")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
Run Code Online (Sandbox Code Playgroud)
Telnet输出:
ehlo test1.example.com
250-hidden
250-HELP
250-SIZE 104857600
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-STARTTLS
250 OK
Run Code Online (Sandbox Code Playgroud)
我需要从应用程序进行身份验证和发送邮件.
Kri*_*ris 41
登录和sendemail之前需要连接.
server = smtplib.SMTP('smtp.example.com', 25)
server.connect("smtp.example.com",465)
server.ehlo()
server.starttls()
server.ehlo()
server.login(fromaddr, "password")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
Run Code Online (Sandbox Code Playgroud)
Asa*_*aga 21
不需要调用smtp.connect()and smtp.ehlo(),因为它们会被SMTP()and自动调用smtp.starttls()。只需将端口设置为587而不是28.
对于客户端使用,如果您对您的安全策略没有任何特殊要求,强烈建议您使用该create_default_context()功能来创建您的 SSL 上下文。它将加载系统的可信 CA 证书,启用证书验证和主机名检查,并尝试选择合理安全的协议和密码设置。
通常,您会希望使用email包的功能来构建电子邮件,然后您可以通过send_message().
import smtplib, ssl
from email.message import EmailMessage
msg = EmailMessage()
msg.set_content("The body of the email is here")
msg["Subject"] = "An Email Alert"
msg["From"] = "me@example.com"
msg["To"] = "you@example.com"
context=ssl.create_default_context()
with smtplib.SMTP("smtp.example.com", port=587) as smtp:
smtp.starttls(context=context)
smtp.login(msg["From"], "p@55w0rd")
smtp.send_message(msg)
Run Code Online (Sandbox Code Playgroud)
它可能只是我正在使用的服务器,但即使在实施了公认的解决方案后,也遇到了与 OP 相同的错误。原来服务器不想登录,所以删除该行后server.login(fromaddr, "password"),错误消失了,它起作用了。