0x00 邮件格式

要发邮件,总要先了解邮件格式吧,这里指的是邮件的各个部分与python中SMTP所对应的一些必须的格式

0x01 简单发送邮件格式如下:

import smtplib
from email.mime.text import MIMEText
from email.header import Header mail_host = 'smtp.139.com'
mail_user = 'xxx@139.com'
mail_pass = 'xx' # 邮件定义区域
msg = MIMEText('我是邮件内容','plain','utf-8') # 邮箱正文内容
msg['Subject'] = '我是标题'
# msg['From'] = mail_user # 发件人
msg['From'] = '发件人自定义'+'<'+mail_user+'>'
msg['To'] = 'xxx@139.com,xxx@163.com' # 收件人
msg['Cc'] = 'xxx@163.com' # 抄送对象 server = smtplib.SMTP()
server.connect(mail_host)
server.login(mail_user,mail_pass)
server.sendmail(msg['From'],msg['To']+msg['Cc'],msg.as_string())
server.quit()

发送效果如下:

0x02 邮件中发送附件 

  0x21 发送简单文本内容附件

import smtplib
import pandas as pd
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header mail_host = 'smtp.163.com'
mail_user = 'xxx@163.com'
mail_pass = 'xx'
receivers = ['xxx@139.com'] def mailsend():
# 创建一个带有附件的实例
msg = MIMEMultipart()
subject = '标题:邮件附件发送测试'
msg['From'] = "xxx"
msg['To'] = ",".join(receivers)
msg['Subject'] = subject
msg['Cc'] = "抄送对象"
msg.attach(MIMEText('正文:python邮件附件发送测试', 'plain', 'utf-8')) # 附件1 普通文本
att1 = MIMEText(open(r'xxx.txt', 'rb').read(), _subtype='base64',_charset='utf-8')
att1['Content-Type'] = 'text/plain'
att1['Content-Disposition'] = 'attachment;filename="test.txt"'
msg.attach(att1) server = smtplib.SMTP()
server.connect(mail_host)
server.login(mail_user,mail_pass)
server.sendmail(mail_user,receivers,msg.as_string())
server.quit()

  0x22 发送excel附件

  

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email import encoders
from email.mime.base import MIMEBase mail_server = 'smtp.163.com' # input("请输入邮箱服务器地址:")
mail_user = 'xxx@163.com' # input("请输入你的邮箱:")
mail_pass = 'xxx' # input("请输入你的邮箱密码或是授权码")
receivers = ['xxx@139.com'] msg = MIMEMultipart() #创建一个邮件实例
msg['From'] = Header('管理员<%s>'% mail_user).encode()
msg['To'] = ','.join(receivers)
msg['Subject'] = Header('邮件附件发送测试','utf-8').encode() #邮件标题
msg.attach(MIMEText(body,'plain','utf-8')) #邮件正文 # with open(attachment,'rb')as f:
# mime = MIMEBase('text','txt',filename=attachment)
# mime.add_header('Content-Disposition','attachment',filename=attachment)
# mime.set_payload(f.read())
# encoders.encode_base64(mime)
# msg.attach(mime) '''
text_part = MIMEBase('text', 'plain')
part = MIMEBase('application', "bitcoin-paymentrequest")
part = MIMEBase("application","zip")
可以看出,不同的文件类型,其发送时的一些格式都不一样,模板不能全部套用
'''
part = MIMEBase("application","octet-stream")
part.set_payload(open(r"xxx.xls","rb").read())
encoders.encode_base64(part)
part.add_header('Content-Disposition','attachment',filename=attachment)
msg.attach(part)
try:
s = smtplib.SMTP()
s.connect(mail_server)
s.login(mail_user,mail_pass)
s.sendmail(mail_user,receivers,msg.as_string())
s.quit()
except Exception as e:
print('错误类型:',e.__class__.__name__)
print('错误明细:',e)

  0x23 邮件发送html附件

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.utils import parseaddr,formataddr import requests def getHtml(url):
html = requests.get(url).text
return html def mailSend(body):
mail_server = 'smtp.163.com'
mail_user = 'xx@163.com'
mail_pass = 'xx'
receivers = ['xx@139.com'] msg = MIMEMultipart()
msg['From'] = "好好学习<%s>" % mail_user
msg['To'] = ','.join(receivers)
msg['Subject'] = "这是一个发送html附件的邮件~"
msg.attach(MIMEText(body,'html','utf-8'))
# try:
link = smtplib.SMTP()
link.connect(mail_server)
link.login(mail_user,mail_pass)
link.sendmail(mail_user,receivers,msg.as_string())
link.quit()
# except Exception as e:
# print("Error:%s" % e) if __name__ == '__main__':
url = "https://www.cnblogs.com/foe0/p/11926083.html"
body = getHtml(url)
mailSend(body)

  我这里测试发的内容是自定义的一段;直接读取url发送的,渲染出现了问题,这里不做关注,不是本节要点。

    body = '''
<h1>测试邮件</h1>
<h2 style="color:red">This is a test</h1>
'''

  0x24 邮件发送图片

    发送图片时,不定义body文字正文也可以发送出去,但是在邮件中是看不到图片的,这里的body内容就是一个图像展示方式的定义。

  

import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.utils import parseaddr, formataddr
# 格式化邮件地址 def sendMail(body, image):
smtp_server = 'smtp.163.com'
from_mail = 'x@163.com'
mail_pass = 'x'
to_mail = ['xx@139.com',] msg = MIMEMultipart()
# Header对中文进行转码
msg['From'] = '管理员 <%s>' % from_mail
msg['To'] = ','.join(to_mail)
msg['Subject'] = Header('图片', 'utf-8')
msg.attach(MIMEText(body, 'html', 'utf-8')) with open(image,"rb")as f:
pic = MIMEImage(f.read())
pic.add_header('Content-ID','<image1>')
msg.attach(pic) try:
s = smtplib.SMTP()
s.connect(smtp_server, "25")
s.login(from_mail, mail_pass)
s.sendmail(from_mail, to_mail, msg.as_string()) # as_string()把MIMEText对象变成str
s.quit()
except smtplib.SMTPException as e:
print("Error: %s" % e) if __name__ == "__main__":
body = '''
<html><body>
<center>下边是一张图片</center>
<img src="cid:image1" alt="image1" align="center" width=100% >
<center>上边是一张图片</center>
</body></html>
'''
sendMail(body, '2.jpg')

  

0x03 小结

  第一节中邮箱格式的填写也不是一成不变,可以根据需要设定一些内容,但要注意一些格式,本人才疏学浅,不能全部列举出来,如果有报错,别的地方都排查过了,可以考虑这些格式,修改为你认为最为稳妥,不会出错的那一种。

  第二节能写的不止这些,不同的文件附件读取方式都不太一样,没必要全部列举完,举一反三。

  到这里就告一段落,不得不说,邮件发送还是有点坑的地方,主要是第三方调用时,不明白他的具体判定机制,有时候报错554 垃圾邮件,超过上限(绝对没超)的错误时,要灵活修改,比如说:

    把自己加入到收件人或抄送对象中

    正文或标题不要出现测试字样,test等等;

    还有就是163和QQ邮箱的第三方是另外的授权密码,而非原邮箱密码;

    再不能解决的问题只能尝试换个邮箱了,对139我是真没辙了。

  以上,若有什么问题欢迎指正。

参考链接:

https://programtalk.com/python-examples/email.MIMEBase.MIMEBase/

https://www.w3school.com.cn/media/media_mimeref.asp

https://blog.csdn.net/weixin_42029733/article/details/86559612

https://blog.csdn.net/xiaosongbk/article/details/60142996

python3-邮件发送-不同格式的更多相关文章

  1. python3 邮件发送

    这是搜罗网络上的文章总结的一份文档, 参考: https://www.jb51.net/article/140604.htm https://www.jb51.net/article/140604.h ...

  2. Python+request+ smtplib 测试结果html报告邮件发送(下)《六》

    目录结构如下: 1.cfg.ini的配置信息写法如下: [email] ;--------------------------使用腾讯企业邮箱作为发件人的操作如下------------------- ...

  3. [Java] JavaMail 发送 html 格式、带附件的邮件

    本案例演示发送 html 格式,可带附件的邮件发送.发送纯文本邮件的例子可参照上一篇博文JavaMail 简单案例. EmailHelper, Email 的帮助类,向帮助类提供 SMTP 服务器域名 ...

  4. EBS中使用JAVA方式发送HTML格式邮件

    转自huan.gu专栏:http://blog.csdn.net/gh320/article/details/17174769 EBS中使用JAVA方式发送HTML格式邮件 一.开发工具:JDevel ...

  5. python测试开发django-29.发送html格式邮件

    前言 上一篇已经通过send_mail()函数发送纯文本的邮件,发送成功了,如果我们想发送一个html格式的邮件,如何实现呢? 发送html格式的邮件实际上还是调用send_mail()函数 ,只需多 ...

  6. 【python3】基于 qq邮箱的邮件发送

    脚本内容: #!/usr/bin/python3 # -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText ...

  7. 使用Python发送HTML格式的邮件(收到的邮件有发送方才是正解)

    发送html格式的和普通文本格式差不多,只是MIMEText(content,"html","utf-8"))与MIMEText(content,"p ...

  8. 用Java发送HTML格式邮件测试类(支持中文)

    代码由纯Java写成,支持中文,一目了然,只要将Main函数中的相关信息填写正确就直接用了,便于修改,可以在此类基础上任意扩展成自己的类. 注意做HTML形式的邮件,最好把HTML,CSS都写全,只写 ...

  9. 一个用于发送HTML格式邮件的类

    以下类是在网上孙钰佳的版本上改写而来,主要变化了三点:1.去掉了附件部分:2.形式从纯Java类改成可注入方式:3.to,cc和bcc都变成了一堆人,以前是一个人. 以下是Java类的代码: impo ...

  10. python3 通过邮件发送测试报告

    通过之前的学习,了解到了如何利用excel进行读取数据,如何采用DDT数据驱动,如何使用unittest.下面是将之前所学进行结合,并发送邮件-->leader,废话不多说,上代码: email ...

随机推荐

  1. 不再忍受龟速 Github,你也可以试试在云开发上部署个人博客!

    Hexo 是被大家广泛使用的静态博客系统, 除了在 Github Pages 部署以外,现在你有了一个新的选择,那就是使用云开发静态网站功能来部署啦! 云开发(CloudBase)是一款云端一体化的产 ...

  2. ehcahe + redis 实现多级缓存

    1,了解数据存储的位置的不同 数据库:存储在磁盘上 redis:存储在内存上 ehcache:应用内缓存 缓存的目的:是为了将数据从一个较慢的介质上读取出来,放到一个较快的介质上,为了下次读取的时候更 ...

  3. Python——NumPy数据存取与函数

    1.数据csv文件存贮 1.1 CSV文件写入 CSV (Comma‐Separated Value, 逗号分隔值)CSV是一种常见的文件格式,用来存储批量数据 np.savetxt(frame, a ...

  4. 总结:自动将函数对象添加到字典的bug

    介绍 本文以ATM项目为背景,介绍一个比较实用的编程技巧,使用装饰器将项目中的指定函数添加到字典中. 利用字典通过key访问value的特点,实现用户输入编号,通过字典直接获取并调用编号对应的功能函数 ...

  5. CVE-2020-2551复现过程

    项目地址 cnsimo/CVE-2020-2551 CVE-2020-2551 weblogic iiop 反序列化漏洞 该项目的搭建脚本在10.3.6版本经过测试,12版本未测试. 环境 kali+ ...

  6. Java系列之泛型

    自从 JDK 1.5 提供了泛型概念,泛型使得开发者可以定义较为安全的类型,不至于强制类型转化时出现类型转化异常,在没有反省之前,可以通过 Object 来完成不同类型数据之间的操作,但是强制类型转换 ...

  7. Innodb的三大关健特性

    今天看<MySql技术内幕InnoDB存储引擎>一书,学习了Mysql的三大关健特性,并记录如下: 插入缓冲 双写(double write) 自适应Hash索引 在记录这些特性之前,先对 ...

  8. 使用IDEA创建SpringBoot项目

    SpringBoot学习第一步:搭建基础 IDEA对SpringBoot的项目支持可以说是点击就能完成基础的搭建,方便的不得了, 流程如下 1.左上角File选项,New project,选择Spri ...

  9. 从测试点点君跨入年薪30W的自动化逍遥君的人生感悟--测试君请进,绝对让你不虚此行!

    一.前言:人生感悟 人生,就是一个苏醒的过程,生命就是一次历练,从鲜衣怒马,到银碗里盛雪,从青葱岁月到白发染鬓,人总是会在经历中成长,在成长中懂得,在懂得里看透,看透而不说透,从而一步一步的走向成熟, ...

  10. xmind转为markdown

    先将xmind导出为.opml 将opml导入Typora (需要安装pandoc)