Python 基于Python实现邮件发送
基于Python实现邮件发送
by:授客 QQ:1033553122
测试环境:
Python版本:Python 2.7
注:需要修改mimetypes.py文件(该文件可通过文章底部的网盘分享连接获取),否则会报错,类似如下
mimetypes.guess_type 'ascii' codec can't decode byte 0xb0 in position 1: ord
实现功能:
邮件发送,支持文字,音频文件,文本文件,图形文件,应用程序及其它类型文件的发送;
支持不同的邮箱;
支持一次性往多个邮箱发送;
支持一次性发送n个附件;
支持中文命名的附件发送;
效果:


mail.conf配置:
[SMTP]
login_user = laiyuhenshuai@163.com
login_pwd = xxxxx
from_addr = laiyuhenshuai@163.com
to_addrs = ['mrxxx@163.com','1033553122@qq.com']
host = smtp.163.com
port = 25
说明:不同类型的邮箱(发件人邮箱),需要修改配置文件为对应的host和端口
smtp.163.com:25
smtp.qq.com:465
实践代码:
#!/usr/bin/env python
# -*- coding:GBK -*-
__author__ = 'shouke'
import ConfigParser
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.audio import MIMEAudio
from email.mime.application import MIMEApplication
import mimetypes
import os
class MyMail:
def __init__(self, mail_config_file):
config = ConfigParser.ConfigParser()
config.read(mail_config_file)
self.smtp = smtplib.SMTP()
self.login_user = config.get('SMTP', 'login_user')
self.login_pwd = config.get('SMTP', 'login_pwd')
self.from_addr = config.get('SMTP', 'from_addr')
self.to_addrs = config.get('SMTP', 'to_addrs')
self.host = config.get('SMTP', 'host')
self.port = config.get('SMTP', 'port')
# 连接到服务器
def connect(self):
self.smtp.connect(self.host, self.port)
# 登陆邮件服务器
def login(self):
try:
self.smtp.login(self.login_user, self.login_pwd)
except Exception as e:
print('%s' % e)
# 发送邮件
def send_mail(self, mail_subject, mail_content, attachment_path_set):
# 构造MIMEMultipart对象做为根容器
msg = MIMEMultipart()
msg['From'] = self.from_addr
# msg['To'] = self.to_addrs
msg['To'] = ','.join(eval_r(self.to_addrs))
msg['Subject'] = mail_subject
# 添加邮件内容
content = MIMEText(mail_content, _charset='gbk')
msg.attach(content)
for attachment_path in attachment_path_set:
if os.path.isfile(attachment_path): # 如果附件存在
type, coding = mimetypes.guess_type(attachment_path)
if type == None:
type = 'application/octet-stream'
major_type, minor_type = type.split('/', 1)
with open(attachment_path, 'rb') as file:
if major_type == 'text':
attachment = MIMEText(file.read(), _subtype=minor_type)
elif major_type == 'image':
attachment = MIMEImage(file.read(), _subtype=minor_type)
elif major_type == 'application':
attachment = MIMEApplication(file.read(), _subtype=minor_type)
elif major_type == 'audio':
attachment = MIMEAudio(file.read(), _subtype=minor_type)
# 修改附件名称
attachment_name = os.path.basename(attachment_path)
attachment.add_header('Content-Disposition', 'attachment', filename = ('gbk', '', attachment_name))
msg.attach(attachment)
# 得到格式化后的完整文本
full_text = msg.as_string()
# 发送邮件
self.smtp.sendmail(self.from_addr, eval_r(self.to_addrs), full_text)
# 退出
def quit(self):
self.smtp.quit()
if __name__ == '__main__':
mymail = MyMail('./mail.conf')
mymail.connect()
mymail.login()
mail_content = 'hello,亲,这是一封测试邮件,收到请回复^^ 2014'
mymail.send_mail('邮件标题--亲,收到一份邮件,请及时查收', mail_content, {'d:\\shouke.csv', 'd:\\2345haoya_3.1.1.9229.exe',
'd:\\shouke.ini','d:\\shouke.ini', 'd:\\test.mp3', 'd:\\test.png', 'd:\\report20150507204645.html',
'd:\\1 - 副本.sql'})
mymail.quit()
pdf版本及mimetypes.py下载地址:
http://pan.baidu.com/s/1P3C3W
Python 基于Python实现邮件发送的更多相关文章
- Python 原生2种 邮件发送(发送验证码) 的方法
import smtplib from email.mime.text import MIMEText # 第三方 SMTP 服务 mail_host = "smtp.sina.cn&quo ...
- python系统监控及邮件发送
python系统监控及邮件发送 #psutil模块是一个跨平台库,能轻松实现获取系统运行的进程和系统利用率 import psutil ...
- Python 基于Python实现的ssh兼sftp客户端(上)
基于Python实现的ssh兼sftp客户端 by:授客 QQ:1033553122 实现功能 实现ssh客户端兼ftp客户端:实现远程连接,执行linux命令,上传下载文件 测试环境 Win7 ...
- python定时利用QQ邮件发送天气预报
大致介绍 好久没有写博客了,正好今天有时间把前几天写的利用python定时发送QQ邮件记录一下 1.首先利用request库去请求数据,天气预报使用的是和风天气的API(www.heweather.c ...
- python初级实战-----关于邮件发送问题
python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用.smtplib模块主要负责发送邮件,email模块主要负责构造邮件. sm ...
- Python 基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现
基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现 by:授客 QQ:1033553122 测试环境 功能需求 实现思路 代码实践(关键技术点实现) 代码模块组织 ...
- Python 基于python操纵redis入门介绍
基于python操纵redis入门介绍 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3.3.2 基于Python操作R ...
- Python 基于python操纵zookeeper介绍
基于python操纵zookeeper介绍 by:授客 QQ:1033553122 测试环境 Win7 64位 Python 3.3.4 kazoo-2.6.1-py2.py3-none-any.w ...
- Python 基于Python结合pykafka实现kafka生产及消费速率&主题分区偏移实时监控
基于Python结合pykafka实现kafka生产及消费速率&主题分区偏移实时监控 By: 授客 QQ:1033553122 1.测试环境 python 3.4 zookeeper- ...
随机推荐
- php javascript comet
简单描述: comet是用ajax实现的服务器推送,有两种实现comet的方式,长轮询和流,这里只实现长轮询. 长轮询的过程:页面发起一个服务器请求,然后服务器一直保持连接打开,直到有数据返回.返回数 ...
- Python+selenium+webdriver 安装与环境配置
1.python安装:访问python.org/download,下载最新版本,安装过程与其他windows软件类似.记得下载后设置path环境变量,然后Windows命令行就可以调用: 2.Sele ...
- SQL Server性能优化(7)理解数据库文件组织
一.基本单位"页" SQL Server是用8KB的页来存储数据.物理I/O操作也是在页级执行.页的种类有很多,具体参考(MSDN).我们关注更多的是数据页的结构,包括三部 ...
- How to set background image to a LinearLayout using Android-Universal-Image-Loader ? #594
You can do it by 2 ways: use loadImage(...) and set layout background in listener (ImageLoadingListe ...
- 执行HBase shell时出现ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet错误解决办法(图文详解)
不多说,直接上干货! [kfk@bigdata-pro01 bin]$ jps NameNode ResourceManager JournalNode HMaster DataNode HRegio ...
- Java设计模式之工厂方法模式(转) 实现是抽象工厂?
Java设计模式之工厂方法模式 责任编辑:覃里作者:Java研究组织 2009-02-25 来源:IT168网站 文本Tag: 设计模式 Java [IT168 技术文章] ...
- kafka主题管理
若代理设置了 auto.create.topics.enable=true,这样还未创建topic就往kafka发送消息时, 会自动创建一个 ${num.partitions}个分区和{default ...
- JavaScript事件-this传递
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- ASP.NET MVC View中的标签(tag)
在编辑View的时候会用到各种HTML标签,如<a>,<input>,<p>等待,这些标签在ASP.NET MVC中都有对应的编程语法,它叫Razor,它是帮助我们 ...
- Java @Repeatable
查看@PropertySource注解时候,发现了@Repeatable,从来没见过的注解,学习了下: 首先介绍下@Repeatable注解: JDK1.8出现的,作用是解决一个类上不能标注重复的注解 ...