(***以下程序亲测成功***)
1. 简介:
安装 smtplib 模块:pip install smtplib
import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
参数说明:
1 host: SMTP服务器主机。 你可以指定主机的ip地址或者域名,可选参数。
2 port: 如果你提供了host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下SMTP端口号为25。
3 local_hostname: 如果SMTP在你的本机上,你只需要指定服务器地址为 localhost 即可。
python SMTP对象使用sendmail方法发送邮件,语法如下:
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]
1 from_addr: 邮件发送者地址。
2 to_addrs: 字符串列表,邮件发送地址
3 msg: 发送消息内容
这里要注意一下第三个参数,msg是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意msg的格式。这个格式就是smtp协议中定义的格式。
2. 发送普通邮件实例
QQ邮箱如何开启POP3/SMTP服务
https://jingyan.baidu.com/article/425e69e61e9178be15fc168a.html
import smtplib
from email.mime.text import MIMEText
# 发送普通邮件
# POP3 服务器地址:pop.qq.com
# SMTP 服务器地址:smtp.qq.com
class SendEmail:
def __init__(self,send_user,email_host,email_port,password,user_list,title,message):
# 发送邮件的用户
self.send_user = send_user
# SMTP 服务器地址:smtp.qq.com
self.email_host = email_host
# 服务器端口 465
self.email_port = email_port
# 开启POP3/SMTP服务,在第三方客户端登录时,生成的授权码
self.password = password
# 接收邮件的用户
self.user_list = user_list
# 邮件内容
self.message = message
# 邮件标题
self.title = title
def send_email(self):
try:
user = "菜鸟程序员" + "<" + self.send_user + ">"
message = MIMEText(self.message, _subtype='plain', _charset='utf-8')
message['Subject'] = self.title
message['From'] = user
message['To'] = ";".join(self.user_list)
server = smtplib.SMTP_SSL()
server.connect(self.email_host, self.email_port)
server.login(self.send_user, self.password)
server.sendmail(user, self.user_list, message.as_string())
server.close()
print("发送邮件成功,请查收")
except Exception as e:
print("发送邮件失败,报错信息:",e)
if __name__ == '__main__':
send_user = "[email protected]"
email_host = "smtp.qq.com"
email_port = 465
password = "xxxxxxxxxxxxxxxxxxxx"
user_list = ["[email protected]"]
title = "邮件标题"
message = "邮件内容"
send = SendEmail(send_user,email_host,email_port,password,user_list,title,message)
send.send_email()
3.使用Python发送HTML格式的邮件
import smtplib
from email.mime.text import MIMEText
# 发送HTML格式邮件
# POP3 服务器地址:pop.qq.com
# SMTP 服务器地址:smtp.qq.com
class SendEmail:
def __init__(self,send_user,email_host,email_port,password,user_list,title,message):
# 发送邮件的用户
self.send_user = send_user
# SMTP 服务器地址:smtp.qq.com
self.email_host = email_host
# 服务器端口 465
self.email_port = email_port
# 开启POP3/SMTP服务,在第三方客户端登录时,生成的授权码
self.password = password
# 接收邮件的用户
self.user_list = user_list
# 邮件内容
self.message = message
# 邮件标题
self.title = title
def send_email(self):
try:
user = "菜鸟程序员" + "<" + self.send_user + ">"
message = MIMEText(self.message, _subtype='html', _charset='utf-8')
message['Subject'] = self.title
message['From'] = user
message['To'] = ";".join(self.user_list)
server = smtplib.SMTP_SSL()
server.connect(self.email_host, self.email_port)
server.login(self.send_user, self.password)
server.sendmail(user, self.user_list, message.as_string())
server.close()
print("发送邮件成功,请查收")
except Exception as e:
print("发送邮件失败,报错信息:",e)
if __name__ == '__main__':
send_user = "[email protected]"
email_host = "smtp.qq.com"
email_port = 465
password = "xxxxxxxxxxxxx"
user_list = ["[email protected]"]
title = "邮件标题"
message = """
<p>全是BUG</p>
<p><a href="https://www.cnblogs.com/xingxingnbsp/">菜鸟程序员博客</a></p>
"""
send = SendEmail(send_user,email_host,email_port,password,user_list,title,message)
send.send_email()
4.Python 发送带附件的邮件
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
# 发送带附件的邮件
# POP3 服务器地址:pop.qq.com
# SMTP 服务器地址:smtp.qq.com
class SendEmail:
def __init__(self,send_user,email_host,email_port,password,user_list,title,message,file_path):
# 发送邮件的用户
self.send_user = send_user
# SMTP 服务器地址:smtp.qq.com
self.email_host = email_host
# 服务器端口 465
self.email_port = email_port
# 开启POP3/SMTP服务,在第三方客户端登录时,生成的授权码
self.password = password
# 接收邮件的用户
self.user_list = user_list
# 邮件内容
self.message = message
# 邮件标题
self.title = title
# 附件地址
self.file_path = file_path
def send_email(self):
try:
user = "菜鸟程序员" + "<" + self.send_user + ">"
# 创建一个带附件的实例
message = MIMEMultipart()
message.attach(MIMEText(self.message, 'plain', 'utf-8'))
message['Subject'] = self.title
message['From'] = user
message['To'] = ";".join(self.user_list)
for file in self.file_path:
# 构造附件
att1 = MIMEText(open(file, 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att1["Content-Disposition"] = 'attachment; filename={}'.format(file)
message.attach(att1)
server = smtplib.SMTP_SSL()
server.connect(self.email_host, self.email_port)
server.login(self.send_user, self.password)
server.sendmail(user, self.user_list, message.as_string())
server.close()
print("发送邮件成功,请查收")
except Exception as e:
print("发送邮件失败,报错信息:",e)
if __name__ == '__main__':
send_user = "[email protected]"
email_host = "smtp.qq.com"
email_port = 465
password = "xxxxxxxxxxxxxx"
user_list = ["[email protected]"]
title = "邮件标题"
message = "发送带附件的邮件"
file_path = ["附件1.txt","附件2.txt"]
send = SendEmail(send_user,email_host,email_port,password,user_list,title,message,file_path)
send.send_email()
5.在 HTML 文本中添加图片
import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
# 发送普通邮件
# POP3 服务器地址:pop.qq.com
# SMTP 服务器地址:smtp.qq.com
class SendEmail:
def __init__(self,send_user,email_host,email_port,password,user_list,title,message):
# 发送邮件的用户
self.send_user = send_user
# SMTP 服务器地址:smtp.qq.com
self.email_host = email_host
# 服务器端口 465
self.email_port = email_port
# 开启POP3/SMTP服务,在第三方客户端登录时,生成的授权码
self.password = password
# 接收邮件的用户
self.user_list = user_list
# 邮件内容
self.message = message
# 邮件标题
self.title = title
def send_email(self):
try:
user = "菜鸟程序员" + "<" + self.send_user + ">"
message = MIMEMultipart('related')
content = MIMEText(self.message, 'html', 'utf-8')
message.attach(content)
message['Subject'] = self.title
message['From'] = user
message['To'] = ";".join(self.user_list)
file = open("test.jpg", "rb")
img_data = file.read()
file.close()
img = MIMEImage(img_data)
img.add_header('Content-ID', 'image')
message.attach(img)
server = smtplib.SMTP_SSL()
server.connect(self.email_host, self.email_port)
server.login(self.send_user, self.password)
server.sendmail(user, self.user_list, message.as_string())
server.close()
print("发送邮件成功,请查收")
except Exception as e:
print("发送邮件失败,报错信息:",e)
if __name__ == '__main__':
send_user = "[email protected]"
email_host = "smtp.qq.com"
email_port = 465
password = "xxxxxxxxxxxxx"
user_list = ["[email protected]"]
title = "邮件标题"
message = """
<p>全是BUG</p>
<p><a href="https://www.cnblogs.com/xingxingnbsp/">菜鸟程序员博客</a></p>
<p>图片演示:</p>
<p><img src="cid:image"></p>
"""
send = SendEmail(send_user,email_host,email_port,password,user_list,title,message)
send.send_email()