smtp协议——邮件发送

根据自己使用的邮件服务器,完成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))

这里的密码并不是邮箱密码,必须邮箱开通此项服务。开通服务之后会给你授权码,这个授权码才是密码。

资源已经上传至资源库

发布了90 篇原创文章 · 获赞 37 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_25368751/article/details/103648186