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 相关文章推荐
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
Python中zfill()方法的使用教程
May 20 Python
浅谈python中截取字符函数strip,lstrip,rstrip
Jul 17 Python
python利用sklearn包编写决策树源代码
Dec 21 Python
python在文本开头插入一行的实例
May 02 Python
Python代码打开本地.mp4格式文件的方法
Jan 03 Python
Python单元测试工具doctest和unittest使用解析
Sep 02 Python
TensorFlow学习之分布式的TensorFlow运行环境
Feb 05 Python
python MultipartEncoder传输zip文件实例
Apr 07 Python
Python基于paramunittest模块实现excl参数化
Apr 26 Python
基于python实现MQTT发布订阅过程原理解析
Jul 27 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
Jul 30 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
elgg 获取文件图标地址的方法
2010/03/20 PHP
PHP多维数组指定多字段排序的示例代码
2018/05/16 PHP
PHP 实现重载
2021/03/09 PHP
javascript 二进制运算技巧解析
2012/11/27 Javascript
JavaScript实现动态添加,删除行的方法实例详解
2015/07/02 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
浅谈javascript中onbeforeunload与onunload事件
2015/12/10 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
JS使用正则截取两个字符串之间的字符串实现方法详解
2017/01/06 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
node简单实现一个更改头像功能的示例
2017/12/29 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
JS多个异步请求 按顺序执行next实现解析
2019/09/16 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
2020/09/04 Javascript
Django 视图层(view)的使用
2018/11/09 Python
python numpy 按行归一化的实例
2019/01/21 Python
Python子类继承父类构造函数详解
2019/02/19 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
Python 实现文件读写、坐标寻址、查找替换功能
2019/09/11 Python
Python csv文件的读写操作实例详解
2019/11/19 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
2020/05/16 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
HTML5 Web Workers之网站也能多线程的实现
2013/04/24 HTML / CSS
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
String和StringBuffer的区别
2015/08/13 面试题
自荐信格式
2013/12/01 职场文书
顶撞老师检讨书
2014/02/07 职场文书
预备党员承诺书
2014/03/25 职场文书
财务工作检讨书
2014/10/29 职场文书
植物园观后感
2015/06/11 职场文书
vue封装数字翻牌器
2022/04/20 Vue.js
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技