人生苦短之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 ...
随机推荐
- 再次了解android中屏幕尺寸,单位等
android设备多种多样,要让你的app能够适配所有的屏幕是一件很痛苦的事情,在做适配之前我们首先需要了解android中dimension的定义 android中dimension是如何定义的? ...
- [HEOI2015]定价
题目描述 在市场上有很多商品的定价类似于 999 元.4999 元.8999 元这样.它们和 1000 元.5000 元和 9000 元并没有什么本质区别,但是在心理学上会让人感觉便宜很多,因此也是商 ...
- 支持C++11标准
设置CB下的GCC. Settings->Compiler->Compiler Settings勾选Have g++ follow the C++11 ISO C++ language s ...
- MFC改变控件颜色
from http://www.cppblog.com/FandyM/archive/2010/07/21/120972.aspx MFC应用程序中,要改变控件的背景色可通过重载OnCtlColor( ...
- Android 蓝牙 笔记
安卓:短信复制机制 软件识别蓝牙 软件可以读取蓝牙的信息 给蓝牙弄上一个类似于短信的东西 并且存一个短信 然后发到客户端 客户端 可以分类 分成表格 形式 这样做的目的是为了 让你的设备可以写蓝牙给 ...
- 修改ViewPager调用setCurrentItem时,滑屏的速度 ,解决滑动之间切换动画难看
在使用ViewPager的过程中,有需要直接跳转到某一个页面的情况,这个时候就需要用到ViewPager的setCurrentItem方法了,它的意思是跳转到ViewPager的指定页面,但在使用这个 ...
- Pixhawk之姿态解算篇(1)_入门篇(DCM Nomalize)
一.开篇 慢慢的.慢慢的.慢慢的就快要到飞控的主要部分了,飞控飞控就是所谓的飞行控制呗,一个是姿态解算一个是姿态控制,解算是解算,控制是控制,各自负责各自的任务.我也不懂.还在学习中~~~~ 近期看姿 ...
- Android_自己定义切换控件SwitchView
1.示意图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemltbzIwMTM=/font/5a6L5L2T/fontsize/400/fill/I0JB ...
- 微型企业如何使用odoo
作者 jeffery Q913547235 保留所有权利 Odoo可以帮助微型企业提升运营效率,做到电子化,信息化. 管理仓库进销存,建立收货单.交货单,并基于收货.交货情况确认应收款和应付款 ...
- Android手机需要安装任务管理软件吗?
使用android手机的用户可能都安装了任务管理的软件,使用android手机真的有必要安装结束任务的软件吗?大家在使用中也都发现了,很多软件在被结束后,马上就会又出现在任务列表里,或是稍等一会自己也 ...