python邮件
解读Python发送邮件
Python发送邮件需要smtplib和email两个模块。也正是由于我们在实际工作中可以导入这些模块,才使得处理工作中的任务变得更加的简单。今天,就来好好学习一下使用Python发送邮件吧。
SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。
Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。
1.邮件正文是文本的格式
# -*- coding: UTF-8 -*- from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
import sys
import os
import datetime
import time reload(sys)
sys.setdefaultencoding("utf-8") mailto_list = ["xxxxx@qq.com"] # 邮件接收方的邮件地址
mail_host = "smtp.qq.com" # 邮件传送协议服务器
mail_user = "xxxxxx@qq.com" # 邮件发送方的邮箱账号
mail_pass = "邮箱验证码" # 邮件发送方的邮箱密码 def send_mail(to_list, sub, content):
me = "qq昵称"+"<"+mail_user+">"
msg = MIMEText(content, _subtype='plain', _charset='utf-8')
msg['Subject'] = sub # 邮件主题
msg['From'] = me
msg['To'] = ";".join(to_list)
try:
server = smtplib.SMTP_SSL()
server.connect(mail_host)
server.login(mail_user, mail_pass)
server.sendmail(me, to_list, msg.as_string())
server.close()
return True
except Exception, e:
print str(e)
return False if __name__ == '__main__':
sub = "qq昵称"
content = '邮件内容'
if send_mail(mailto_list, sub, content):
print "发送成功"
else:
print "发送失败"
2.邮件正文是表格的格式:由于是表格,所以我们选择HTML来实现表格的功能,邮件上面显示的就是HTML实现的内容了。
# -*- coding: UTF-8 -*- from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
import sys
import csv
import xlrd
from pyExcelerator import *
import os
import xlwt
from xlutils.copy import copy
import pyExcelerator
import datetime
import time reload(sys)
sys.setdefaultencoding("utf-8") mailto_list = [""] # 邮件接收方的邮件地址
mail_host = "smtp.exmail.qq.com" # 邮件传送协议服务器
mail_user = "" # 邮件发送方的邮箱账号
mail_pass = "" # 邮件发送方的邮箱密码 def send_mail(to_list, sub, content):
me = "天才白痴梦"+"<"+mail_user+">"
# 和上面的代码不同的就是,这里我们选择的是html 的格式
msg = MIMEText(content, _subtype='html', _charset='utf-8')
msg['Subject'] = sub # 邮件主题
msg['From'] = me
msg['To'] = ";".join(to_list)
try:
server = smtplib.SMTP()
server.connect(mail_host)
server.login(mail_user, mail_pass)
server.sendmail(me, to_list, msg.as_string())
server.close()
return True
except Exception, e:
print str(e)
return False if __name__ == '__main__':
sub = "天才白痴梦"
html = '<html></html>'
if send_mail(mailto_list, sub, html):
print "发送成功"
else:
print "发送失败"
3.邮件正文是图片的格式:要把图片嵌入到邮件正文中,我们只需按照发送附件的方式,先把邮件作为附件添加进去,然后,在HTML中通过引用src="cid:0"就可以把附件作为图片嵌入了。如果有多个图片,给它们依次编号,然后引用不同的cid:x即可。
def send_mail(to_list, sub, content):
me = "天才白痴梦"+"<"+mail_user+">" msg = MIMEMultipart()
msg['Subject'] = sub # 邮件主题
msg['From'] = me
msg['To'] = ";".join(to_list) txt = MIMEText("天才白痴梦", _subtype='plain', _charset='utf8')
msg.attach(txt) # <b>:黑体 <i>:斜体
msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<img alt="" src="cid:image1" />good!', 'html', 'utf-8')
msg.attach(msgText) file1 = "F:\\1.jpg"
image = MIMEImage(open(file1, 'rb').read())
image.add_header('Content-ID', '<image1>')
msg.attach(image) try:
server = smtplib.SMTP()
server.connect(mail_host)
server.login(mail_user, mail_pass)
server.sendmail(me, to_list, msg.as_string())
server.close()
return True
except Exception, e:
print str(e)
return False if __name__ == '__main__':
sub = "天才白痴梦"
html = '<html></html>'
if send_mail(mailto_list, sub, html):
print "发送成功"
else:
print "发送失败"
4.发送邮件附件:邮件附件是图片
def send_mail(to_list, sub, content):
me = "天才白痴梦"+"<"+mail_user+">" msg = MIMEMultipart()
msg['Subject'] = sub # 邮件主题
msg['From'] = me
msg['To'] = ";".join(to_list) txt = MIMEText("天才白痴梦", _subtype='plain', _charset='utf8')
msg.attach(txt) # # <b>:黑体 <i>:斜体
# msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<img alt="" src="cid:image1" />good!', 'html', 'utf-8')
# msg.attach(msgText)
#
# file1 = "F:\\1.jpg"
# image = MIMEImage(open(file1, 'rb').read())
# image.add_header('Content-ID', '<image1>')
# msg.attach(image) att = MIMEText(open('F:\\1.jpg', 'rb').read(), 'base64', 'utf-8')
att["Content-Type"] = 'application/octet-stream'
att["Content-Disposition"] = 'attachment; filename="1.jpg"'
msg.attach(att) try:
server = smtplib.SMTP()
server.connect(mail_host)
server.login(mail_user, mail_pass)
server.sendmail(me, to_list, msg.as_string())
server.close()
return True
except Exception, e:
print str(e)
return False
5.发送群邮件:同时发送给多人
1 mailto_list = [""] # 邮件接收方的邮件地址
上面这一行代码是邮件接收方的邮件地址,如果我们需要给多人发送邮件的话,就只需要把对方的邮件帐号绑在这一个列表里就ok了。
加密SMTP
使用标准的25端口连接SMTP服务器时,使用的是明文传输,发送邮件的整个过程可能会被窃听。要更安全地发送邮件,可以加密SMTP会话,实际上就是先创建SSL安全连接,然后再使用SMTP协议发送邮件。
方法:只需要在创建SMTP对象后,立刻调用starttls()方法,就创建了安全连接。
1 smtp_server = 'smtp.qq.com'
2 smtp_port = 25 # 默认端口号为25
3 server = smtplib.SMTP(smtp_server, smtp_port)
4 server.starttls()
5 # 剩下的代码和前面的一模一样:
6 server.set_debuglevel(1) # 打印出和SMTP服务器交互的所有信息
python邮件的更多相关文章
- python邮件发送脚本
转自:http://phinecos.cnblogs.com/ #!/usr/bin/python #coding=utf-8 #@author:dengyike #@date:2010-09-28 ...
- centos 7 keepalived故障邮件通知实战(附Python邮件发送脚本)
centos 7 keepalived故障邮件通知实战(附Python邮件发送脚本) ##################### sendmail.py begin ######## ...
- python 邮件基础篇
python 操作邮件,不是很方便,说实话还不是理解的特别透彻,这次想把自己碰到的东西总结下来 邮件有imap,pop,imap协议,这次使用的是imap4协议,主要用了imap4和mail类, 代码 ...
- python 邮件
1:文件形式的邮件 01.#!/usr/bin/env python3 02.#coding: utf-8 03.import smtplib 04.from email.mime.text impo ...
- python 邮件发送 脚本
import smtplib from email.header import Header from email.mime.text import MIMEText from_addr = 'XXX ...
- Python 邮件发送
python发送各类邮件的主要方法 python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法,这里写写自己的的心得,也请高手给些指点. 一.相关模块介绍 ...
- python邮件SMTP的GUI编程
写的是python中smtp的gui编程,用的163邮箱给qq邮箱发送邮件做测试,如果你发现你的发送失败,试着用以下方法解决: 1.网页登陆你的邮箱,设置中查看smtp是否开启,比如163邮箱的smt ...
- Python邮件发送脚本(Linux,Windows)通用
脚本 #!/usr/bin/python #-*- coding:utf-8 -*- #Python Mail for chenglee #if fileformat=dos, update file ...
- python邮件处理
SMTP SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式.Python对SMTP支持有 ...
随机推荐
- JAVA中反射机制五(JavaBean的内省与BeanUtils库)
内省(Introspector) 是Java 语言对JavaBean类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法 ...
- 【CODEVS】1034 家园
[算法]网络流-最大流(dinic) [题解] 飞船有可承载人数限制,地球为源点,月球为汇点,人像水流一样从以飞船上限为容量的边流向汇点. 人在各站点都面临着上船与否的选择,难以用DP解决最优策略,于 ...
- java学习笔记记录
Java内存模型: Java虚拟机规范中将Java运行时数据分为六种. 1.程序计数器:是一个数据结构,用于保存当前正常执行的程序的内存地址.Java虚拟机的多线程就是通过线程轮流切换并分配处理器时间 ...
- js刷题:leecode 25
原题:https://leetcode.com/problems/reverse-nodes-in-k-group/ 题意就是给你一个有序链表.如1->2->3->4->5,还 ...
- 多维数组的字符依次输出,用python实现
#-*- coding=utf-8 -*-listm=["s","l","z","x","l",&q ...
- shell source命令说明
当我修改了/etc/profile文件,我想让它立刻生效,而不用重新登录:这时就想到用source命令,如:source /etc/profile对source进行了学习,并且用它与sh 执行脚本进行 ...
- 关于ORA-04091异常的出现原因,以及解决方案
问题分析 在Oracle中执行DML语句的时候是需要显示进行提交操作的.当我们进行插入的时候,会触发触发器执行对触发器作用表和扩展表的种种操作,但是这个时 候触发器和插入语句是在同一个事务管理中的,因 ...
- docker swarm join 报错
[peter@minion ~]$ docker swarm join --token SWMTKN-1-3mj5po3c7o04le7quhkdhz6pm9b8ziv3qe0u7hx0hrgxsna ...
- 大型网站的 HTTPS 实践(二)——HTTPS 对性能的影响(转)
原文链接:http://op.baidu.com/2015/04/https-s01a02/ 1 前言 HTTPS 在保护用户隐私,防止流量劫持方面发挥着非常关键的作用,但与此同时,HTTPS 也会降 ...
- MySQL 和 Oracle 主键自增长
1.MySQL 1)建表 auto_increment:每插入一条数据,客户表(customers)的主键id就自动增1,如下所示 create table customers -- 创建客户表 ( ...