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 相关文章推荐
python2.7删除文件夹和删除文件代码实例
Dec 18 Python
Python中的zip函数使用示例
Jan 29 Python
python中的代码编码格式转换问题
Jun 10 Python
深入讲解Python编程中的字符串
Oct 14 Python
python 中if else 语句的作用及示例代码
Mar 05 Python
浅析Python四种数据类型
Sep 26 Python
对Python中创建进程的两种方式以及进程池详解
Jan 14 Python
python实现的爬取电影下载链接功能示例
Aug 26 Python
python分别打包出32位和64位应用程序
Feb 18 Python
python游戏开发的五个案例分享
Mar 09 Python
Vs Code中8个好用的python 扩展插件
Oct 12 Python
Python大批量搜索引擎图像爬虫工具详解
Nov 16 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
收集的PHP中与数组相关的函数
2007/03/22 PHP
PHP中isset与array_key_exists的区别实例分析
2015/06/02 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
2016/07/25 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
读jQuery之十四 (触发事件核心方法)
2011/08/23 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
js setTimeout 常见问题小结
2013/08/13 Javascript
JavaScript中的闭包介绍
2015/03/15 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
使用JS实现图片展示瀑布流效果的实例代码
2016/09/12 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
基于javascript 显式转换与隐式转换(详解)
2017/12/15 Javascript
js数据类型检测总结
2018/08/05 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
JS实现移动端点击按钮复制文本内容
2019/07/28 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
Vue 一键清空表单的实现方法
2020/02/07 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
Zabbix实现微信报警功能
2016/10/09 Python
在django中使用自定义标签实现分页功能
2017/07/04 Python
详解Python函数可变参数定义及其参数传递方式
2017/08/02 Python
详解Python基础random模块随机数的生成
2019/03/23 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
2016/10/23 HTML / CSS
HTML5中使用json对象的实例代码
2018/09/10 HTML / CSS
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
会计专业自荐信范文
2013/12/02 职场文书
四年大学生活的个人自我评价
2013/12/11 职场文书
工作决心书范文
2014/03/11 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
Pytorch中TensorBoard及torchsummary的使用详解
2021/05/12 Python
MySQL中存储时间的最佳实践指南
2021/07/01 MySQL
python数据处理之Pandas类型转换
2022/04/28 Python
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL