服务器不支持SMTP AUTH扩展

时间:2016-05-14 07:44:48

标签: python smtp smtplib

使用python我想从我的应用程序发送电子邮件,但它显示错误

SMTP AUTH extension not supported by server

该计划的代码,

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()

Telnet输出:

ehlo test1.example.com
250-hidden
250-HELP
250-SIZE 104857600
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-STARTTLS
250 OK

我需要对应用进行身份验证和发送邮件。

6 个答案:

答案 0 :(得分:31)

登录和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()

答案 1 :(得分:0)

import smtplib

    s = smtlib.SMTP('smtplib.gmail.com',587)
    s.ehlo()
    s.starttls()
    s.login('frmaddr','password')
    try:
        s.sendmail('fromaddr','toaddr','message')
    except:
        print (failed)

答案 2 :(得分:0)

这可能只是我正在使用的服务器,但是即使实施了公认的解决方案,也遇到了与OP相同的错误。原来服务器不希望登录,因此在删除行server.login(fromaddr, "password")之后,错误消失了并且可以正常工作。

答案 3 :(得分:0)

由于smtp.connect()smtp.ehlo()自动调用它们,因此无需调用SMTP()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)

答案 4 :(得分:0)

首先点击是允许您的gmail帐户通过其他应用程序发送电子邮件,请在此部分中允许:

https://myaccount.google.com/lesssecureapps

然后,您应该可以发送电子邮件

import json 
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib

msg = MIMEMultipart()
message = "This is an email"

password = "yourpasswordemailsender"
msg['From'] = "emailsender@gmail.com"
msg['To'] = "emailsended@gmail.com"
msg['Subject'] = "Title of email"

msg.attach(MIMEText(message, 'plain'))
server = smtplib.SMTP('smtp.gmail.com: 587')
server.starttls()
server.login(msg['From'], password)
server.sendmail(msg['From'], msg['To'], msg.as_string())
server.quit()

答案 5 :(得分:0)

您需要先登录“ starttls”。