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中无限元素列表的实现方法
Aug 18 Python
Python实现的简单hangman游戏实例
Jun 28 Python
Python 实现 贪吃蛇大作战 代码分享
Sep 07 Python
你所不知道的Python奇技淫巧13招【实用】
Dec 14 Python
对Python中plt的画图函数详解
Nov 07 Python
对python For 循环的三种遍历方式解析
Feb 01 Python
python tkinter canvas 显示图片的示例
Jun 13 Python
django-filter和普通查询的例子
Aug 12 Python
flask 实现上传图片并缩放作为头像的例子
Jan 09 Python
离线状态下在jupyter notebook中使用plotly实例
Apr 24 Python
关于python3.9安装wordcloud出错的问题及解决办法
Nov 02 Python
Python爬虫网络请求之代理服务器和动态Cookies
Apr 12 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程序员基本要求和必备技能
2014/05/09 PHP
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
php获取网页上所有链接的方法
2015/04/03 PHP
PHP创建/删除/复制文件夹、文件
2016/05/03 PHP
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
js随机颜色代码的多种实现方式
2013/04/23 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
2014/06/27 Javascript
AngularJS使用ngMessages进行表单验证
2015/12/27 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
2016/06/01 Javascript
JQuery控制图片由中心点逐渐放大效果
2016/06/26 Javascript
Html中 IFrame的用法及注意点
2016/12/22 Javascript
高性能js数组去重(12种方法,史上最全)
2019/12/21 Javascript
Vue看了就会的8个小技巧
2021/01/21 Vue.js
Python使用metaclass实现Singleton模式的方法
2015/05/05 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
2018/02/22 Python
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
Django如何自定义分页
2018/09/25 Python
Laravel+Dingo/Api 自定义响应的实现
2019/02/17 Python
python多线程并发实例及其优化
2019/06/27 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
Python 实现OpenCV格式和PIL.Image格式互转
2020/01/09 Python
pandas中ix的使用详细讲解
2020/03/09 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
如何进行有效的自我评价
2013/09/27 职场文书
顶撞老师检讨书
2014/02/07 职场文书
中级会计职业生涯规划书
2014/03/01 职场文书
公司合并协议书范本
2014/09/30 职场文书
2015年财务人员工作总结
2015/04/10 职场文书
2015年党小组工作总结
2015/05/26 职场文书
赞助商致辞
2015/07/30 职场文书
留学文书中的个人陈述,应该注意哪些问题?
2019/08/23 职场文书
python爬虫--selenium模块
2021/03/31 Python
Win11 Build 25179预览版发布(附更新内容+ISO官方镜像下载)
2022/08/14 数码科技