人生苦短之Python发邮件
#coding=utf-8
import smtplib
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
'''
一些常用邮箱发件服务器及端口号
邮箱 发件服务器 非SSL协议端口 SSL协议端口
163 smtp.163.com 25 465/587
qq smtp.qq.com 25 465/587 发送邮件的几个错误:
1.550错误(smtplib.SMTPAuthenticationError: (550, b'User has no permission'))
535错误(smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed'))
邮箱一般是不开启客户端授权的,所以登录是拒绝的,需要去邮箱开启,然后会发送短信
获取授权码作为客户端登录的密码(login方法中的密码)
2.503错误(503 ‘Error: A secure connection is requiered(such as ssl)’之类)
例如我们使用QQ邮箱是需要SSL登录的,所以需要smtplib.SMTP()改成smtplib.SMTP_SSL() @from_addr 发送邮件的地址
@to_addr 接收邮件的地址(可以是列表)
@mail_host 邮箱的SMTP服务器地址
@mail_pass 邮箱开启smtp 需要的授权码
'''
from_addr = '331957324@qq.com'
to_addr = '252624008@qq.com'
mail_host = 'smtp.qq.com'
mail_pass = 'itrwvjhjxupgbhhc' #文本形式的邮件
def send_text_mail():
try:
'''
MIMETest(content, type, 编码) 创建邮件信息主体
msg['Subject'] 邮件主题
msg['From'] 邮件发送方
msg['To'] 收件方
'''
msg = MIMEText('hello send by python', 'plain', 'utf-8')
msg['From'] = from_addr
msg['To'] = ','.join(to_addr)
msg['Subject'] = '主题' server = smtplib.SMTP_SSL(mail_host, 465)
server.login(from_addr, mail_pass)
server.sendmail(from_addr, [to_addr, ], msg.as_string())
except Exception as e:
print e #HTML格式的邮件
def send_html_mail():
msg = MIMEText('<html><h1>你好</h1></html>', 'html', 'utf-8')
msg['Subject'] = 'html' smtp = smtplib.SMTP_SSL(mail_host, 465)
smtp.login(from_addr, mail_pass)
smtp.sendmail(from_addr, to_addr, msg
.as_string())
smtp.quit() #发送附件
def send_attachment_mail():
#创建邮件对象 MIMEMultipart 指定类型为 alternative可以支持同时发送html和plain,但是
# 不会都显示,html优先显示
msg = MIMEMultipart('alternative')
msg['From'] = from_addr
msg['To'] = to_addr
msg['Subject'] = 'AttachmentMail' # 邮件的正文还是MIMEText
part1 = MIMEText('这是个带附件的邮件', 'plain', 'utf-8') # 添加附件(添加一个本地的图片)
att1 = MIMEText(open("C:\\6.jpg", 'rb').read(), 'base64', 'utf-8')
att1['Content-Type'] = 'application/octet-stream'
att1['Content-Disposition'] = 'attachment;filename="6.jpg"'
att1['Content-ID'] = '<0>' msg.attach(att1)
msg.attach(part1) smtp = smtplib.SMTP_SSL(mail_host, 465)
smtp.login(from_addr, mail_pass)
smtp.sendmail(from_addr, to_addr, msg
.as_string())
smtp.quit() #发送带图片的文本邮件
def send_imagetext_mail():
msg = MIMEMultipart()
msg['From'] = from_addr
msg['To'] = to_addr
msg['Subject'] = 'ImagMail' #创建展示图片的html
msg_html = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<br><img src="cid:image1"><br>good!',
'html', 'utf-8')
msg.attach(msg_html) #添加图片模块
fp = open('C:\\6.jpg', 'rb')
msg_image = MIMEImage(fp.read())
fp.close()
msg_image.add_header('Content-ID', '<image1>')
msg.attach(msg_image) smtp = smtplib.SMTP_SSL(mail_host, 465)
smtp.login(from_addr, mail_pass)
smtp.sendmail(from_addr, to_addr, msg
.as_string())
smtp.quit() send_imagetext_mail() '''
Message
+- MIMEBase
+- MIMEMultipart
+- MIMENonMultipart
+- MIMEMessage
+- MIMEText
+- MIMEImage 邮件信息的层级关系,详细见https://docs.python.org/2/library/email.mime.html
'''
人生苦短之Python发邮件的更多相关文章
- python发邮件遇到的端口号问题
在学习使用python发邮件的过程中, 遇到了一个问题:由于测试的时候使用的是QQ邮箱,要求必须使用SSL/TLS加密,所以有了下面的代码, from email.mime.text import M ...
- 使用python发邮件
使用python发邮件 网上有很多发邮件的例子,本人在网上找了一份,稍加修改后使用 上源码 # encoding=utf-8 from email.mime.image import MIMEImag ...
- 如何用python发邮件
python发送各类邮件的主要方法 一.相关模块介绍 发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍: 1.smtplib模块 smtplib.SM ...
- Python 发邮件例子
Python 发邮件例子 例子 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2019-04-23 16:12:33 # @Autho ...
- [转]简单三步,用 Python 发邮件
https://zhuanlan.zhihu.com/p/24180606 0. 前言 发送电子邮件是个很常见的开发需求.比如你写了个监控天气的脚本,发现第二天要下雨,或者网站上关注的某个商品降价了, ...
- Python—发邮件总结
来自: http://my.oschina.net/jhao104/blog/613774 1.登录SMTP服务器 首先使用网上的方法(这里使用163邮箱,smtp.163.com是smtp服务器地址 ...
- python 发邮件-带附件-文本-html
#!/usr/bin/python # encoding=utf-8 # Filename: send_email.py from email.mime.image import MIMEImage ...
- python 发邮件 utf-8
import smtplib from operator import itemgetter, attrgetter from email.mime.text import MIMEText from ...
- 用python发邮件实例
发QQ邮件 首先确认发件方是否打开了SMTP服务,去QQ邮箱的设置中查看,如果没有请自行开启. from email.header import Header from email.mime.text ...
随机推荐
- eclipse中通过search打开第二个文件时 第一个文件就自己关闭了
原文:http://blog.csdn.net/u014079773/article/details/66971053 问题:eclipse中通过search打开第二个文件时第一个文件就自己关闭了 问 ...
- 8.【nuxt起步】-vue组件之间数据交互
那么现在问题来了,我现在是在index.vue获取了服务端的数据,怎么传值到maincontent.vue?当然你也可以把获取数据放在maincontent.vue,但假如有些数据同时在header, ...
- 这一篇里面有很多关于scala的list的操作的好的知识
https://www.cnblogs.com/weilunhui/p/5658860.html 1.++[B] 在A元素后面追加B元素 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- jquery中美元符号($)命名冲突
http://blog.csdn.net/shanshan209/article/details/6341727 在Jquery中,$是JQuery的别名,所有使用$的地方也都可以使用JQuery来替 ...
- DVBS/S2在数字电视系统中的应用 三 (LNB介绍)
DVBS/S2在数字电视系统中的应用 三 (LNB介绍) 老谢在前面两篇文章中(例如以下).都有提到LNB这一概念. DVBS/S2在数字电视系统中的应用 一 (DVBS/S2接收系统Block Di ...
- PS 抠图如何使用通道法处理头发
通道抠图法抠出美女飘逸头发-PS抠图实例教程 抠图更换背景后效果图 通道抠图法抠出美女飘逸头发-PS抠图实例教程 教程步骤: 1 打开原图,进入通道面板. 通道抠图法抠出美女飘逸头发-PS抠图实 ...
- 数据库 ""和null的在java 持久化中的区别
如果查找的时候查找了dealerCarType中a字段,但是数据库中a字段为"",那么持久化结果dealerCarType.getA() 结果为""; 如果查找 ...
- js增加收藏
<html> <span style="white-space:pre"> </span><head> <span style ...
- Jenkins 的安装与简单使用
一.安装 项目中接触到了jenkins感觉是一个不错的项目发布构建工具,自己就简单的学习了一下,记录一下方便以后使用 jenkin下载地址:https://jenkins-ci.org/ 我直接使 ...
- 小贝_mysql select连接查询
select连接查询 简要: 一.union联合查询 二.左右内连接 一.union联合查询 作用: 把2次或多次查询结果合并起来 具体: (表1查询结果) union (表2查询结果) 运行: 先算 ...