准备工作:
- 准备一个用于发送邮件的邮箱,比如网易163邮箱;
- 登录邮箱网页版,开通POP3/SMTP/IMAP功能;如下图:
- 点击上图的新增授权码,这里需要发送验证短信,按照提示一步一步操作即可;如果之前添加过授权码,并且还记得的话,这一步可以忽略;
- 复制下面的SMTP服务器,即:smtp.163.com
代码里面使用:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False
EMAIL_HOST = 'smtp.163.com'
EMAIL_PORT = 25
EMAIL_HOST_USER = 'test@163.com'
EMAIL_HOST_PASSWORD = '准备工作获取的授权码'
测试发送邮件代码:
可以放在视图或者utils.py等位置,也可以封装成工具用于多处调用;
from django.core.mail import send_mail
print("开始发送邮件...")
send_mail('邮件主题',
'邮件内容',
'测试邮箱<test@163.com>',
['test@domain.com', 'test2@domain.com'],
fail_silently=False
)
print("发送邮件成功!")
接收到的邮件效果:
可能会遇到的错误:
错误一:
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/smtplib.py", line 730, in login
raise last_exception
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/smtplib.py", line 721, in login
initial_response_ok=initial_response_ok)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/smtplib.py", line 642, in auth
raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed')
可能原因:EMAIL_HOST_USER配置的用户和授权码不匹配,认证失败;
解决方案:确认邮箱和授权码是否匹配;
错误二:
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 817, in __init__
self.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 1077, in do_handshake
self._sslobj.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 689, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:852)
可能原因:settings.py中配置的参数"EMAIL_USE_SSL"设置为True但是邮箱服务器不支持导致;
解决方案:将settings.py中配置的参数"EMAIL_USE_SSL"设置为False;
错误三:
内网图片无法显示:
解决方案:将图片转为base64格式,放在img标签的src属性中,如:
html = """
<h1>测试Base64图片</h1>
<img src="https://img-blog.csdnimg.cn/2022010617154989663.png" alt="base64图片" />
"""
send_mail('邮件主题', '邮件内容', '测试邮箱<test@163.com>',
['test@domain.com'], fail_silently=False, html_message=html)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)