一. 调试邮件的时候,遇到下面的问题:
SMTPAuthenticationError: (535, ‘5.7.3 Authentication unsuccessful’)
看错误提示,应该是账号密码不对,我通过页面使用账号和密码登录了,而且是成功登录的,那么问题来了,为啥还报错呢?
我用python开发 发邮件功能,有两个参数需要设置:
EMAIL_HOST_USER = 'xxx@xx.com'
EMAIL_HOST_PASSWORD = 'xxx'
我在测试的时候,就是用上面的形式进行测试的,结果报错如题,以为确定密码没有问题,后来我改了用户名就通过了!!!
EMAIL_HOST_USER = 'xxx'
EMAIL_HOST_PASSWORD = 'xxx'
所以发现问题在哪了吧,用户名是不需要‘@’和后缀的。
二. SMTPException: STARTTLS extension not supported by server
这个报错是因为我公司的邮箱服务器不使用加密规则,需要在项目的设置中改成
EMAIL_USE_TLS = False
三. Undisclosed recipients 隐藏收件人
先说说收到这样的邮件 是发送成功了么?我明确的告诉你,是的,发送成功了。
那么为什么没有显示出收件人呢?代码程序写的有问题导致的。下面是django官方给的例子,就能触发上面的现象。
from django.core.mail import send_mail
send_mail(
'Subject here',
'Here is the message.',
'from@example.com',
['to@example.com'],
fail_silently=False,
)
那么正确的写法是什么?如下
from datetime import date
from email import Utils
from email import Header
from email.mime.text import MIMEText
DEFAULT_FROM_EMAIL = “邮件服务器地址”
def sendmail(self, subject, content, temail, femail=DEFAULT_FROM_EMAIL, priority="3"):
mime = MIMEText(content, 'html', 'utf-8')
mime['To'] = ", ".join(temail) # temail 是list
mime['From'] = femail
mime['Subject'] = Header.Header(subject, 'utf-8')
mime['X-Priority'] = priority
mime['Date'] = Utils.formatdate(localtime=1)
s = smtplib.SMTP(EMAIL_HOST)
s.sendmail(femail, temail, mime.as_string())
s.close()