一、发送文本邮件

可能的问题1.:需要注意,目前QQ邮箱来讲,不能收到完整的邮件,即有些内容不能显示,最好全部使用网易邮箱:

可能的问题2.:在以往的文本邮件发送中,只写了

msg = MIMEText('hello,world,中文邮件测试', 'text', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')

目前来讲,需要有三个参数,即

#  中文需要参数utf-8
msg = MIMEText('hello,world,中文邮件测试', 'text', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = 'lemon<abc@163.com>'
msg['To'] = 'def@163.com'

文本代码参考(写代码的时候是本人的邮箱,在此已将邮箱更改,复制的时候需要注意)

# -*- coding:utf-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header # 发送邮箱
sender = 'abc@163.com' # 接收邮箱
receiver = 'def@163.com' # 发送邮件主题
subject = 'Python email testing' # 发送邮箱服务器
smtpserver = 'smtp.163.com' # 发送邮箱用户名/密码
username = "abc@163.com"
password = "" # 中文需要参数utf-8
msg = MIMEText('hello,world,中文邮件测试', 'text', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = 'lemon<abc@163.com>'
msg['To'] = 'def@163.com' smtp = smtplib.SMTP()
smtp.connect('smtp.163.com')
smtp.login(username, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()

test_text_mail

二、发送HTML邮件

将参数内容修改即可:如下

#  HTML形式的文件内容
msg = MIMEText('<html><h1>你好!!欢迎使用html格式</h1></html>','html','utf-8')
msg['Subject'] = Header(subject, 'utf-8')
# msg['From'] = 'lemon<abc@163.com>'
# msg['To'] = 'def@163.com'

其他内容,与上述代码一致;

三、发送img邮件

# -*- coding:utf-8 -*-
import smtplib
import mimetypes
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.header import Header sender = 'abc@163.com'
receiver = 'def@163.com'
subject = 'Python email image testing'
smtpserver = 'smtp.163.com'
username = "abc@163.com"
password = "" # 发送图片附件的邮件
msg = MIMEMultipart()
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = 'lemon<abc@163.com>'
msg['To'] = 'def@163.com' txt = MIMEText("这是中文的邮件内容哦","plain",'utf-8')
msg.attach(txt) file1 = r"E:\images\2.jpg"
image = MIMEImage(open(file1, 'rb').read())
image.add_header('Content-ID', '<image1>')
msg.attach(image) smtp = smtplib.SMTP()
smtp.connect('smtp.163.com')
smtp.login(username, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()

test_img_mail

显示如下:

新内容:

msg = MIMEMultipart()
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = 'lemon<abc@163.com>'
msg['To'] = 'def@163.com' txt = MIMEText("这是中文的邮件内容哦","plain",'utf-8')
msg.attach(txt) file1 = r"E:\images\2.jpg"
image = MIMEImage(open(file1, 'rb').read())
image.add_header('Content-ID', '<image1>')
msg.attach(image)

以上是将img图片以附件格式发送,若让其插在正文中,代码改成

# -*- coding:utf-8 -*-
import smtplib
import mimetypes
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.header import Header sender = 'abc@163.com'
receiver = 'def@163.com'
subject = 'Python email image testing2'
smtpserver = 'smtp.163.com'
username = "abc@163.com"
password = "" # 发送图片插在正文中的邮件
msg = MIMEMultipart()
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = 'lemon<abc@163.com>'
msg['To'] = 'def@163.com' msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<br><img src="cid:image1"><br>Nifty!','html')
msg.attach(msgText) file1 = r"E:\images\2.jpg"
image = MIMEImage(open(file1, 'rb').read())
image.add_header('Content-ID', '<image1>')
msg.attach(image) smtp = smtplib.SMTP()
smtp.connect('smtp.163.com')
smtp.login(username, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()

四、发送附件邮件

import mimetypes
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.header import Header sender = 'abc@163.com'
receiver = 'def@163.com'
subject = 'Python email attachment testing2'
smtpserver = 'smtp.163.com'
username = "abc@163.com"
password = "" # 发送有附件的邮件
msg = MIMEMultipart('related')
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = 'lemon<abc@163.com>'
msg['To'] = 'def@163.com' # 构造附件
msgatt = MIMEText(open(r"E:\attachment\ API.docx").read(),'base64','utf-8')
msgatt["Content-Type"] = 'application/octet-stream'
msgatt["Content-Disposition"] = 'attachment;filename="API.docx"'
msg.attach(msgatt) smtp = smtplib.SMTP()
smtp.connect('smtp.163.com')
smtp.login(username, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()

五、发送群发邮件

添加多个接收人即可:

receiver = ['def@163.com','lem@hotmail.com','ddd@hotmail.com']

六、发送各种元素都包含的邮件

# -*- coding:utf-8 -*-
import smtplib
import mimetypes
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.header import Header sender = 'abc@163.com'
receiver = 'def@163.com'
subject = 'Python email many testing2'
smtpserver = 'smtp.163.com'
username = "abc@163.com"
password = "" # 构造消息容器
msg = MIMEMultipart()
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = 'lemon<abc@163.com>'
msg['To'] = 'def@163.com' # 构造文件的本身,用html格式:html = """
<html>
<body>
<h1>你好!!欢迎使用html格式</h1>
</body>
</html>""" # 记录以上信息
part2 = MIMEText(html, 'html','utf-8')
msg.attach(part2) # 构造附件
msgatt = MIMEText(open(r"E:\attachment\API.docx").read(),'base64','utf-8')
msgatt["Content-Type"] = 'application/octet-stream'
msgatt["Content-Disposition"] = 'attachment;filename="API.docx"'
msg.attach(msgatt) smtp = smtplib.SMTP()
smtp.connect('smtp.163.com')
smtp.login(username, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()

注意:此处,若将html格式写成

html = """\
Hi!
       How are you?
       Here is the you wanted.
"""

则邮件无法发送到,故一定要写成规范的格式;

七、基于SSL的邮件

用的少,暂未涉及,可参考文档:http://blog.csdn.net/u012063703/article/details/41009955

后续会跟上:http://www.jb51.net/article/49216.htm

python自动化---各类发送邮件方法及其可能的错误的更多相关文章

  1. Python自动化必备发送邮件报告脚本详解

    #!/usr/bin/python3# -*- coding:UTF-8 -*-import smtplib#smtplib库主要用来连接第三方smtp库,用来发邮件from email.mime.t ...

  2. Selenium2+python自动化48-登录方法(参数化)

    前言 登录这个场景在写用例的时候经常会有,我们可以把登录封装成一个方法,然后把账号和密码参数化,这样以后用的登录的时候,只需调用这个方法就行了 一.登录方法 1.把输入账号.输入密码.点击登录按钮三个 ...

  3. appium+python自动化24-滑动方法封装(swipe)

    swipe介绍 1.查看源码语法,起点和终点四个坐标参数,duration是滑动屏幕持续的时间,时间越短速度越快.默认为None可不填,一般设置500-1000毫秒比较合适. swipe(self, ...

  4. Selenium2+python自动化48-登录方法(参数化)【转载】

    前言 登录这个场景在写用例的时候经常会有,我们可以把登录封装成一个方法,然后把账号和密码参数化,这样以后用的登录的时候,只需调用这个方法就行了 一.登录方法 1.把输入账号.输入密码.点击登录按钮三个 ...

  5. appium+python自动化24-滑动方法封装(swipe)【转载】

    swipe介绍 1.查看源码语法,起点和终点四个坐标参数,duration是滑动屏幕持续的时间,时间越短速度越快.默认为None可不填,一般设置500-1000毫秒比较合适. swipe(self, ...

  6. Python自动化之clean方法前端调用clean方法的错误

    obj.non_field_errors.0 源代码: NON_FIELD_ERRORS = '__all__' 如果在前端写 obj.errors.__all__.0直接就会报错 所以经过尝试得知, ...

  7. Selenium2+python自动化59-数据驱动(ddt)

    前言 在设计用例的时候,有些用例只是参数数据的输入不一样,比如登录这个功能,操作过程但是一样的.如果用例重复去写操作过程会增加代码量,对应这种多组数据的测试用例,可以用数据驱动设计模式,一组数据对应一 ...

  8. Selenium2+python自动化52-unittest执行顺序

    前言 很多初学者在使用unittest框架时候,不清楚用例的执行顺序到底是怎样的.对测试类里面的类和方法分不清楚,不知道什么时候执行,什么时候不执行. 本篇通过最简单案例详细讲解unittest执行顺 ...

  9. Selenium2+python自动化59-数据驱动(ddt)【转载】

    前言 在设计用例的时候,有些用例只是参数数据的输入不一样,比如登录这个功能,操作过程但是一样的.如果用例重复去写操作过程会增加代码量,对应这种多组数据的测试用例,可以用数据驱动设计模式,一组数据对应一 ...

随机推荐

  1. php判断一个值是否在一个数组中,区分大小写-也可以判断是否在键中

    function in_array_case($value,$array){ return in_array(strtolower($value),array_map('strtolower',$ar ...

  2. 纯CSS样式写刘海屏效果

    1. 效果: 2. 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  3. arguments的介绍(一)

    arguments 是一个类数组对象.代表传给一个function的参数列表. 1.1 arguments length arguments 是个类数组对象,其包含一个 length 属性,可以用 a ...

  4. Java-JPA:JPA

    ylbtech-Java-JPA:JPA JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对 ...

  5. java 调用区块链 发布和调用智能合约

    java连接区块链 很简单 ,调用智能合约要麻烦一些. 先说连接 区块链查询数据. 1 maven 项目导入 web3j 的依赖. <dependency> <groupId> ...

  6. Catenyms (POJ2337) 字典序最小欧拉路

    // 很久不写图论,连模板也不熟悉了0.0 // 这题是一个技巧性比较高的暴力DFS Catenyms 题目大意 定义catenym为首尾字母相同的单词组成的单词对, 例如: dog.gopher g ...

  7. 2019 西电ACM校赛网络赛 题解

    今年题目难度有较大提升,总体与往年类似,数学题居多.以下为我通过的部分题解. 赛题链接:http://acm.xidian.edu.cn/contest.php?cid=1053 A - 上帝视角 我 ...

  8. springboot新增jsp的支持

    一.添加依赖 <!-- 添加对jsp的支持 --> <!-- web 依赖 --> <dependency> <groupId>org.springfr ...

  9. C/C++基础:main函数的参数argc和argv

    转载: https://blog.csdn.net/Eastmount/article/details/20413773 一.main()函数参数 通常我们在写主函数时都是void main()或in ...

  10. Leetcode959. Regions Cut By Slashes由斜杠划分区域

    在由 1 x 1 方格组成的 N x N 网格 grid 中,每个 1 x 1 方块由 /.\ 或空格构成.这些字符会将方块划分为一些共边的区域. (请注意,反斜杠字符是转义的,因此 \ 用 &quo ...