SMTP模块发送普通邮件
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 发送方邮箱
msg_from = ''
# 授权码
passwd = ''
# 收件人邮箱
msg_to = ['',''] # 收件人邮箱
# 邮件主题
subject = "修改密码"
# 邮件内容
content = '''
点击下方链接修改密码:
<a href="https://www.baidu.com">修改密码</a>
'''
# 实例化(参数:邮件内容,文本格式,编码)
# msg = MIMEText(content, 'html', 'utf-8')
# 默认为文本
msg = MIMEText(content)
# 邮件主题
msg['Subject'] = Header(subject, 'utf-8')
# 发件人
msg['From'] = Header("Generalzy", 'utf-8')
# 接收人
msg['To'] = Header("爱吃饺子的西瓜", 'utf-8')
# 通过ssl方式发送,服务器地址,端口
s = smtplib.SMTP_SSL("smtp.qq.com", 465)
try:
# 登录
s.login(msg_from, passwd)
# 发送邮件:发送方,收件方,要发送的消息
s.sendmail(msg_from, msg_to, msg.as_string())
print('成功')
except Exception as e:
print(e)
finally:
s.quit()
发送html格式邮件
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 发送方邮箱
msg_from = ''
# 授权码
passwd = ''
# 收件人邮箱
msg_to = ['',''] # 收件人邮箱
# 邮件主题
subject = "修改密码"
# 邮件内容
content = '''
点击下方链接修改密码:
<a href="https://www.baidu.com">修改密码</a>
'''
# 实例化(参数:邮件内容,文本格式,编码)
msg = MIMEText(content, 'html', 'utf-8')
# 邮件主题
msg['Subject'] = Header(subject, 'utf-8')
# 发件人
msg['From'] = Header("Generalzy", 'utf-8')
# 接收人
msg['To'] = Header("爱吃饺子的西瓜", 'utf-8')
# 通过ssl方式发送,服务器地址,端口
s = smtplib.SMTP_SSL("smtp.qq.com", 465)
try:
# 登录
s.login(msg_from, passwd)
# 发送邮件:发送方,收件方,要发送的消息
s.sendmail(msg_from, msg_to, msg.as_string())
print('成功')
except Exception as e:
print(e)
finally:
s.quit()
发送带附件的邮件(一般不用)
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email import encoders
msg_from = 'xxxxx@qq.com' # 发送方邮箱
passwd = '***' # 授权码
msg_to = ['xxxxx@qq.com'] # 收件人邮箱
subject = "邮件标题"
# 创建一个带附件的实例
msg = MIMEMultipart()
# 放入邮件主题
msg['Subject'] = subject
msg['From'] = msg_from
# 邮件正文内容
msg.attach(MIMEText('Python 邮件发送测试……', 'plain', 'utf-8'))
# 附件1
att1 = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att1["Content-Disposition"] = 'attachment; filename="test.txt"'
msg.attach(att1)
# 附件2,
with open('test.png', 'rb') as f:
# 设置附件的MIME和文件名,这里是png类型:
mime = MIMEBase('image', 'png', filename='test.png')
# 加上必要的头信息:
mime.add_header('Content-Disposition', 'attachment', filename='test.png')
mime.add_header('Content-ID', '<0>')
mime.add_header('X-Attachment-Id', '0')
# 把附件的内容读进来:
mime.set_payload(f.read())
# 用Base64编码:
encoders.encode_base64(mime)
# 添加到MIMEMultipart:
msg.attach(mime)
# 附件3,图片格式
fp = open('test.png', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()
# 定义图片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image1>')
msg.attach(msgImage)
try:
# 通过ssl方式发送
s = smtplib.SMTP_SSL("smtp.qq.com", 465)
# 登录到邮箱
s.login(msg_from, passwd)
# 发送邮件:发送方,收件方,要发送的消息
s.sendmail(msg_from, msg_to, msg.as_string())
print('成功')
except s.SMTPException as e:
print(e)
finally:
s.quit()
Django发送邮件
- setting配置
根据django的EmailBackend即可
from django.core.mail.backends.smtp import EmailBackend
class EmailBackend:
def __init__(self, host=None, port=None, username=None, password=None,
use_tls=None, fail_silently=False, use_ssl=None, timeout=None,
ssl_keyfile=None, ssl_certfile=None,
**kwargs):
super().__init__(fail_silently=fail_silently)
self.host = host or settings.EMAIL_HOST
self.port = port or settings.EMAIL_PORT
self.username = settings.EMAIL_HOST_USER if username is None else username
self.password = settings.EMAIL_HOST_PASSWORD if password is None else password
self.use_tls = settings.EMAIL_USE_TLS if use_tls is None else use_tls
self.use_ssl = settings.EMAIL_USE_SSL if use_ssl is None else use_ssl
self.timeout = settings.EMAIL_TIMEOUT if timeout is None else timeout
self.ssl_keyfile = settings.EMAIL_SSL_KEYFILE if ssl_keyfile is None else ssl_keyfile
self.ssl_certfile = settings.EMAIL_SSL_CERTFILE if ssl_certfile is None else ssl_certfile
if self.use_ssl and self.use_tls:
raise ValueError(
"EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set "
"one of those settings to True.")
self.connection = None
self._lock = threading.RLock()
# 不配也可以,默认
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com'
EMAIL_PORT = 465
EMAIL_HOST_USER = '1612613082@qq.com'
EMAIL_HOST_PASSWORD = '授权码' # 密码
EMAIL_USE_SSL = True # 使用ssl
# EMAIL_USE_TLS = False 使用tls
# EMAIL_USE_SSL 和 EMAIL_USE_TLS 是互斥的,即只能有一个为 True
# 配置邮件头基本信息
DEFAULT_FROM_EMAIL = '乾坤it <1612613082@qq.com>'
- 视图使用
from django.core.mail import send_mail
import threading
from mybbs import settings
html = """
<p>点击下方链接修改密码</p>
<a href='https://www.baidu.com'>修改密码</a>
"""
send_mail(subject='修改密码', message="点击修改密码", from_email=settings.DEFAULT_FROM_EMAIL,
recipient_list=['收件人列表'], html_message=html)
- 一次性发多封邮件
from django.core.mail import send_mass_mail
# message参数与发送单份邮件相同
message1 = ('第一封邮件标题', '这是邮件内容', 'from@example.com', ['first@example.com', 'other@example.com'])
message2 = ('第二封邮件标题', '这是邮件内容', 'from@example.com', ['second@test.com'])
'''
fail_silently: (可选)布尔值。为 False 时, send_mail 会抛出 smtplib.SMTPException 异常。
'''
send_mass_mail((message1, message2), fail_silently=False)
'''
send_mail 每次发邮件都会建立一个连接,发多封邮件时建立多个连接。
send_mass_mail 是建立单个连接发送多封邮件。
所以一次性发送多封邮件时 send_mass_mail 要优于 send_mail。
'''
各大邮箱smtp服务器及端口
新浪免费邮箱
POP3:pop.sina.com
SMTP:smtp.sina.com
SMTP端口号:25
新浪VIP邮箱
POP3:pop3.vip.sina.com
SMTP:smtp.vip.sina.com
SMTP端口号:25
新浪企业邮箱
POP3:pop.sina.com
SMTP:smtp.sina.com
SMTP端口号:25
雅虎邮箱
POP3:pop.mail.yahoo.cn
SMTP:smtp.mail.yahoo.cn
SMTP端口号:25
搜狐邮箱
POP3:pop3.sohu.com
SMTP:smtp.sohu.com
SMTP端口号:25
TOM邮箱
POP3:pop.tom.com
SMTP:smtp.tom.com
SMTP端口号:25
Gmail邮箱
POP3:pop.gmail.com
SMTP:smtp.gmail.com
SMTP端口号:587 或 25
QQ邮箱
POP3:pop.exmail.qq.com
SMTP:smtp.exmail.qq.com
SMTP端口号:25
263邮箱
域名:263.net
POP3:263.net
SMTP:smtp.263.net
SMTP端口号:25
域名:x263.net
POP3:pop.x263.net
SMTP:smtp.x263.net
SMTP端口号:25
域名:263.net.cn
POP3:263.net.cn
SMTP:263.net.cn
SMTP端口号:25
域名:炫我型
POP3:pop.263xmail.com
SMTP:smtp.263xmail.com
SMTP端口号:25
21CN 免费邮箱
POP3:pop.21cn.com
SMTP:smtp.21cn.com
IMAP:imap.21cn.com
SMTP端口号:25
21CN 经济邮邮箱
POP3:pop.21cn.com
SMTP:smtp.21cn.com
SMTP端口号:25
21CN 商务邮邮箱
POP3:pop.21cn.net
SMTP:smtp.21cn.net
SMTP端口号:25
21CN 快感邮箱
POP3:vip.21cn.com
SMTP:vip.21cn.com
SMTP端口号:25
21CN Y邮箱
POP3:pop.y.vip.21cn.com
SMTP:smtp.y.vip.21cn.com
SMTP端口号:25
中华网任我邮邮箱
POP3:rwpop.china.com
SMTP:rwsmtp.china.com
SMTP端口号:25
中华网时尚、商务邮箱
POP3:pop.china.com
SMTP:smtp.china.com
SMTP端口号:25
qq邮箱配置smtp
开启smtp服务,生成授权码