根据自己使用的邮件服务器,完成smtp协议的服务开启 给特定邮箱发送图文并茂的邮件,邮件正文包含的表格如下所示,显示的图片自己确定。 给特定邮箱发送邮件,邮件附件为“实验报告7 smtp协议
# -*- coding: utf-8 -*-
"""
Created on Wed Nov 6 15:57:44 2019
@author: Administrator
"""
import smtplib
from email.mime.text import MIMEText # 导入 MIMEText 类
from email.mime.multipart import MIMEMultipart #导入MIMEMultipart类
from email.mime.image import MIMEImage #导入MIMEImage类
from email.mime.base import MIMEBase #MIME子类的基类
from email import encoders #导入编码器
HOST = "smtp.qq.com" # 定义 smtp 主机
SUBJECT = u"带有附件的邮件" # 定义邮件主题
TO = "[email protected]" # 定义邮件收件人
FROM = "[email protected]" # 定义邮件发件人
def addimg(src,imgid): #定义图片读取函数,参数1为图片路径,2为图片ID机标识符
with open(src,'rb') as f:
msgimage = MIMEImage(f.read()) #读取图片内容
msgimage.add_header('Content-ID',imgid) #指定文件的Content-ID,<img>,在HTML中图片src将用到
return msgimage
msg = MIMEMultipart('related') #创建MIMEMultipart对象,采用related定义内嵌资源邮件体
#创建一个MIMEText对象,HTML元素包括文字与图片
msgtext = MIMEText("<font color=red> 官网业务周平均延时图表 :<br><img src=\"cid:weekly\"border=\"1\"><br> 详细内容见附件。</font>","html","utf-8")
msg.attach(msgtext) #将msgtext内容附加到MIMEMultipart对象中
msg.attach(addimg("1.jpg",'weekly')) #使用MIMEMultipart对象附加MIMEImage的内容
#附件文件定义
#创建一个MIMEText对象,附加表格文件(week.xlsx)
filename = '葡萄酒.csv'
attachfile = MIMEBase('applocation','octet-stream') #创建对象指定主要类型和次要类型,即进行编码
attachfile.set_payload(open(filename,'rb').read()) #将消息内容设置为有效载荷,即把附件的内容读进来
attachfile.add_header('Content-Disposition','attachment',filename=('utf-8','',filename)) #扩展标题设置
encoders.encode_base64(attachfile)
msg.attach(attachfile) #附加对象加入到msg
msg['Subject'] = SUBJECT # 邮件主题
msg['From']=FROM # 邮件发件人 , 邮件头部可见
msg['To']=TO # 邮件收件人 , 邮件头部可见
try:
server = smtplib.SMTP(host='smtp.qq.com') # 创建一个 SMTP() 对象
server.connect(HOST,"25") # 通过 connect 方法连接 smtp 主机
server.starttls() # 启动安全传输模式
my_pass = input('请输入邮箱密码:')
server.login("[email protected]", my_pass) # 邮箱账号登录校验
server.sendmail(FROM, TO, msg.as_string()) # 邮件发送
server.quit() # 断开 smtp 连接
print("邮件发送成功!")
except Exception as e:
print('失败:'+str(e))
# -*- coding: utf-8 -*-
"""
Created on Mon Nov 4 22:55:37 2019
@author: cyberspace
"""
#!/usr/bin/python3
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
my_sender='[email protected]' # 发件人邮箱账号
my_pass = input('请输入邮箱密码:') # 发件人邮箱密码
my_user='[email protected]' # 收件人邮箱账号,我这边发送给自己
mail_content = """
<p>Python 邮件HTML代码测试...</p>
<p><a href="http://www.taobao.com">欢迎进入淘宝参加双11购物!</a></p>
<table border="1">
<tr>
<th>学号</th>
<th>姓名</th>
</tr>
<tr>
<td>2019001</td>
<td>蔡晓明</td>
</tr>
<tr>
<td>2019002</td>
<td>李小花</td>
</tr>
</table>
"""
def mail():
ret=True
try:
msg=MIMEText(mail_content,'html','utf-8') #--------注意增加的第二个参数------------
msg['From']=formataddr(["Fromser发件人的名字",my_sender]) # 括号里的对应发件人邮箱名字、发件人邮箱账号
msg['To']=formataddr(["收件人的名字",my_user]) # 括号里的对应收件人邮箱名字、收件人邮箱账号
msg['Subject']="邮件正文包含HTML发送邮件测试" # 邮件的主题,也可以说是标题
server=smtplib.SMTP_SSL("smtp.qq.com",465) # 发件人邮箱中的SMTP服务器和端口,加密使用465,不加密使用25
server.login(my_sender, my_pass) # 括号中对应的是发件人邮箱账号、邮箱密码
server.sendmail(my_sender,[my_user,],msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
server.quit() # 关闭连接
except Exception: # 如果 try 中的语句没有执行,则会执行下面的 ret=False
ret=False
return ret
ret=mail()
if ret:
print("邮件发送成功")
else:
print("邮件发送失败")
# -*- coding: utf-8 -*-
"""
Created on Wed Nov 6 15:38:15 2019
@author: Administrator
"""
import smtplib
from email.mime.text import MIMEText # 导入 MIMEText 类
from email.mime.multipart import MIMEMultipart #导入MIMEMultipart类
from email.mime.image import MIMEImage #导入MIMEImage类
HOST = "smtp.qq.com" # 定义 smtp 主机
SUBJECT = u"图文并茂的报表" # 定义邮件主题
TO = "[email protected]" # 定义邮件收件人
FROM = "[email protected]" # 定义邮件发件人
def addimg(src,imgid): #定义图片读取函数,参数1为图片路径,2为图片ID机标识符
with open(src,'rb') as f:
msgimage = MIMEImage(f.read()) #读取图片内容
msgimage.add_header('Content-ID',imgid) #指定文件的Content-ID为imgid参数的值,在HTML中<img>图片src将用到
return msgimage
msg = MIMEMultipart('related') #创建MIMEMultipart对象,采用related定义内嵌资源邮件体
test = """
<p>安装 Requests,只要在你的终端中运行这个简单命令即可:
pip install requests</p>
<br>
<p>基本HTTP 请求类型:</p>
<br>
<p>r = requests.get('http://httpbin.org/get')</p><br>
<p>r = requests.post("http://httpbin.org/post")<br>
r = requests.put("http://httpbin.org/put")<br>
r = requests.delete("http://httpbin.org/delete")<br>
r = requests.head("http://httpbin.org/get")<br>
r = requests.options("http://httpbin.org/get")<br>
</p>
<table width="600" border="0" cellspacing="0" cellpadding="4">
<tr bgcolor="#CECFAD" height="20" style="font-size:14px">
<td colspan=2>*系统性能数据 <a href="10.0.0.10"> 更多 >></a></td>
</tr>
<tr bgcolor="#EFEBDE" height="100" style="font-size:13px">
<td>
<img src="cid:io"> #图片地址由MIMEMultipart通过ID传递
</td>
<td>
<img src="cid:key_hit">
</td>
</tr>
<tr bgcolor="#EFEBDE" height="100" style="font-size:13px">
<td>
<img src="cid:men">
</td>
<td>
<img src="cid:swap">
</td>
</tr>
</table>
"""
msgtext = MIMEText(test,"html","utf-8") #创建Text对象内容,包括图片<img>
msg.attach(msgtext) #MIMEMultipart对象附加MIMEText的内容
msg.attach(addimg("1.jpg",'io')) #附加图片内容,io指向HTML文本内的参数
msg.attach(addimg("2.jpg",'key_hit')) #注意第二个参数在HTML代码中的使用
msg.attach(addimg("3.jpg",'men'))
msg.attach(addimg("4.jpg",'swap'))
msg['Subject'] = SUBJECT # 邮件主题
msg['From']=FROM # 邮件发件人 , 邮件头部可见
msg['To']=TO # 邮件收件人 , 邮件头部可见
try:
server = smtplib.SMTP(host='smtp.qq.com') # 创建一个 SMTP() 对象
server.connect(HOST,"25") # 通过 connect 方法连接 smtp 主机
server.starttls() # 启动安全传输模式
my_pass = input('请输入邮箱密码:')
server.login("[email protected]", my_pass) # 邮箱账号登录校验
server.sendmail(FROM, TO, msg.as_string()) # 邮件发送
server.quit() # 断开 smtp 连接
print("邮件发送成功!")
except Exception as e:
print('失败:'+str(e))
这里的密码并不是邮箱密码,必须邮箱开通此项服务。开通服务之后会给你授权码,这个授权码才是密码。
资源已经上传至资源库