Python发送Email方法实例


Posted in Python onAugust 21, 2014

本文以实例形式展示了Python发送Email功能的实现方法,有不错的实用价值的技巧,且功能较为完善。具体实现方法如下:

主要功能代码如下:

#/usr/bin/env python
# -*- encoding=utf-8 -*-

import base64
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

class CCSendMail:
  def __init__(self,host="your.mailhost.com",username='fromuser@xxx.com',password='passwd'):
    self.__smtp=smtplib.SMTP(host)
    self.__subject=None
    self.__content=None
    self.__from=None
    self.__to=[]
    self.__style='html'
    self.__charset='gb2312'
    self.username = username
    self.password = password
    self.fromAlias='fromuser' #发件人别名
    self.from2=''
    
  def close(self):
    try:
      self.__smtp.quit()
    except Exception ,e:
      pass  
  def setFromAlias(self,alias):
    self.fromAlias=alias
  def setStyle(self,style):
    self.__style = style
  def setFrom2(self,from2):
    self.from2=from2
    
  def setSubject(self,subject):
    self.__subject=subject
    
  def setContent(self,content):
    self.__content=content
    
  def setFrom(self,address):
    self.__from=address
    
  def addTo(self,address):
    self.__to.append(address)
    
  def setCharset(self,charset):
    self.__charset=charset
    
  def send(self):
    try:
      self.__smtp.set_debuglevel(1)
      
      #login if necessary
      if self.username and self.password:
        self.__smtp.login(self.username,self.password)
        
      msgRoot = MIMEMultipart('related')
      msgRoot['Subject'] = self.__subject
      aliasB6=base64.encodestring(self.fromAlias.encode(self.__charset))
      if len(self.from2)==0:
        msgRoot['From'] = "=?%s?B?%s?=%s"%(self.__charset,aliasB6.strip(),self.__from)
      else:
        msgRoot['From'] = "%s"%(self.from2)
      msgRoot['To'] = ";".join(self.__to)
      
      msgAlternative = MIMEMultipart('alternative')
      msgRoot.attach(msgAlternative)
      
      msgText = MIMEText(self.__content, self.__style,self.__charset)
      msgAlternative.attach(msgText)

      self.__smtp.sendmail(self.__from,self.__to,msgRoot.as_string())
      return True
    except Exception,e:
      print "Error ",e
      return False
    
  def clearRecipient(self):
    self.__to = []
  
  #给单个人发送邮件
  def sendHtml(self,address,title,content):
    self.setStyle('html')
    self.setFrom("<%s>"%self.username)
    if not isinstance(content,str):
      content = content.encode('gb18030')
    self.addTo(address)
    self.setSubject(title)
    self.setContent(content)
    ret = self.send()
    self.close()
    return ret
  
  #群发邮件
  def sendMoreHtml(self,addressList,title,content):
    self.setStyle('html')
    self.setFrom("<%s>"%self.username)
    if not isinstance(content,str):
      content = content.encode('gb18030')
    for address in addressList:
      self.addTo(address)
    self.setSubject(title)
    self.setContent(content)
    ret = self.send()
    self.close()
    return ret

#测试
def main():
  send=CCSendMail()
  send.sendHtml('touser@xxx.com',u'邮件标题',u'邮件内容')
  #send.sendMoreHtml([touser1@xx.com,touser2@xx.com],u'邮件标题',u'邮件内容')
 
if __name__=='__main__':
  main()

希望本文所述实例对大家的Python程序设计有一定的帮助。

Python 相关文章推荐
利用Python爬虫给孩子起个好名字
Feb 14 Python
Python3多线程爬虫实例讲解代码
Jan 05 Python
Python查找第n个子串的技巧分享
Jun 27 Python
pycharm中显示CSS提示的知识点总结
Jul 29 Python
Python获取时间范围内日期列表和周列表的函数
Aug 05 Python
python同步两个文件夹下的内容
Aug 29 Python
Python函数生成器原理及使用详解
Mar 12 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
May 11 Python
浅析Python的命名空间与作用域
Nov 25 Python
python删除csv文件的行列
Apr 06 Python
python glom模块的使用简介
Apr 13 Python
python实现A*寻路算法
Jun 13 Python
Python生成验证码实例
Aug 21 #Python
python中去空格函数的用法
Aug 21 #Python
python实现的重启关机程序实例
Aug 21 #Python
实例讲解Python中的私有属性
Aug 21 #Python
Python创建日历实例
Aug 21 #Python
Python实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 #Python
python生成日历实例解析
Aug 21 #Python
You might like
缅甸的咖啡简史
2021/03/04 咖啡文化
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
PHP 文件锁与进程锁的使用示例
2017/08/07 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
js字符串日期yyyy-MM-dd转化为date示例代码
2014/03/06 Javascript
Node.js模块加载详解
2014/08/16 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
css如何让浮动元素水平居中
2015/08/07 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
详解JavaScript异步编程中jQuery的promise对象的作用
2016/05/03 Javascript
DIV+CSS+jQ实现省市联动可扩展
2016/06/22 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
2016/08/11 Javascript
微信小程序 slider 详解及实例代码
2017/01/10 Javascript
js事件委托和事件代理案例分享
2017/07/25 Javascript
基于canvas粒子系统的构建详解
2017/08/31 Javascript
详解jquery插件jquery.viewport.js学习使用方法
2017/09/08 jQuery
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
node.js自动上传ftp的脚本分享
2018/06/16 Javascript
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
Python2.5/2.6实用教程 入门基础篇
2009/11/29 Python
Python如何获取系统iops示例代码
2016/09/06 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
巴西电子、家电、智能手机购物网站:Girafa
2019/06/04 全球购物
什么是smarty? Smarty的优点是什么?
2013/08/11 面试题
精彩的大学生自我评价
2013/11/17 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
学生抄袭作业的检讨书
2014/10/02 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
2016年“六一儿童节”校园广播稿
2015/12/17 职场文书
Mysql实现主从配置和多主多从配置
2021/06/02 MySQL
死磕 java同步系列之synchronized解析
2021/06/28 Java/Android