想着给框架添加邮件发送功能、所以整理下python下邮件发送功能

首先python是支持邮件的发送、内置smtp库、支持发送纯文本、HTML及添加附件的邮件

之后是邮箱、像163、qq、新浪等邮箱默认关闭SMTP服务,需要我们手动打开

打开后通过发件人邮箱、授权密码 通过发件人的SMTP服务发送

代码如下:

  1. #!/usr/bin/env python
  2. # -*- coding: utf_8 -*-
  3.  
  4. from email.mime.text import MIMEText
  5. from email.mime.multipart import MIMEMultipart
  6. from email.mime.multipart import MIMEBase
  7. from email import encoders
  8. from email.header import Header
  9. from email.utils import parseaddr, formataddr
  10. import smtplib
  11.  
  12. class SendEmail:
  13. outbox = "pythondldysl01@163.com"
  14. # 发件箱地址
  15. password = "wxqcl258258"
  16. # 授权密码 不是邮箱登录密码
  17. inbox = "xxx@qq.com"
  18. # 收件箱地址
  19. smtp_server = "smtp.163.com"
  20. # 发件箱服务器地址
  21.  
  22. def __init__(self):
  23. pass
  24.  
  25. @classmethod
  26. def _format_address(cls, text):
  27. name, address = parseaddr(text)
  28. return formataddr((Header(name, "utf-8").encode(), address))
  29.  
  30. @classmethod
  31. def send_email_text(cls):
  32. msg = MIMEText("测试smtp邮件发送功能", "plain", "utf-8")
  33. # 第一个参数:邮件正文
  34. # 第二个参数:邮件类型 纯文本
  35. # 第三个参数:编码
  36.  
  37. msg["From"] = SendEmail._format_address("来自163的一封邮件 <%s>" % SendEmail.outbox)
  38. # 发件人姓名与发件箱地址
  39. msg["To"] = SendEmail._format_address("管理员 <%s>" % SendEmail.inbox)
  40. # 收件人姓名与收件箱地址
  41. msg["Subject"] = Header("来自SMTP的问候", "utf-8").encode()
  42. # 邮件标题
  43.  
  44. try:
  45. server = smtplib.SMTP(SendEmail.smtp_server, 25)
  46. # 构造smtp服务器连接
  47. # server.set_debuglevel(1)
  48. # debug输出模式 默认关闭
  49. server.login(SendEmail.outbox, SendEmail.password)
  50. # 登录smtp服务器
  51. server.sendmail(SendEmail.outbox, [SendEmail.inbox], msg.as_string())
  52. # 发送邮件
  53. server.quit()
  54. print "邮件发送成功"
  55. except Exception, e:
  56. print str(e)
  57. print "邮件发送失败"
  58.  
  59. if __name__ == '__main__':
  60. SendEmail.send_email_text()

发件箱效果:

收件箱效果

这只是纯文本的内容、可以支持HTML格式的内容、修改内容如下:

msg = MIMEText("测试smtp邮件发送功能", "plain", "utf-8")

内容修改成HTML格式、 “plain”改成 “html”

最后是添加附件的邮件

代码如下:

  1. @classmethod
  2. def send_email_multipart(cls):
  3. msg = MIMEMultipart()
  4.  
  5. msg["From"] = SendEmail._format_address("来自163的一封邮件 <%s>" % SendEmail.outbox)
  6. # 发件人姓名与发件箱地址
  7. msg["To"] = SendEmail._format_address("管理员 <%s>" % SendEmail.inbox)
  8. # 收件人姓名与收件箱地址
  9. msg["Subject"] = Header("来自SMTP的问候", "utf-8").encode()
  10. # 邮件标题
  11.  
  12. msg.attach(MIMEText("测试添加附件的smtp邮件发送功能", "plain", "utf-8"))
  13.  
  14. with open("E:\\work\\python project\\CreateProject\\20160421140953.xml", "rb") as f:
  15. # 设置附件的MIME和文件名
  16. mime = MIMEBase("xml", "xml", filename="测试报告.xml")
  17. # 加上必要的头信息
  18. mime.add_header('Content-Disposition', 'attachment', filename="测试报告.xml")
  19. mime.add_header('Content-ID', '<0>')
  20. mime.add_header('X-Attachment-Id', '')
  21. # 把附件的内容读进来:
  22. mime.set_payload(f.read())
  23. # 用Base64编码:
  24. encoders.encode_base64(mime)
  25. # 添加到MIMEMultipart:
  26. msg.attach(mime)
  27.  
  28. try:
  29. server = smtplib.SMTP(SendEmail.smtp_server, 25)
  30. # 构造smtp服务器连接
  31. # server.set_debuglevel(1)
  32. # debug输出模式 默认关闭
  33. server.login(SendEmail.outbox, SendEmail.password)
  34. # 登录smtp服务器
  35. server.sendmail(SendEmail.outbox, [SendEmail.inbox], msg.as_string())
  36. # 发送邮件
  37. server.quit()
  38. print "邮件发送成功"
  39. except Exception, e:
  40. print str(e)
  41. print "邮件发送失败"

收件箱效果:

博主也是参考大神的网站教的、是一个全方位的python学习网站

这里给出链接地址:

廖雪峰python学习地址

python学习笔记(SMTP邮件发送)的更多相关文章

  1. Python学习笔记——发邮件

    参考:Python3实现163邮箱SMTP发送邮件 1.首先需要注册一个网易的邮箱,开启smtp服务,并使用其授权码 2.发送邮件的Python脚本 #!/usr/bin/python # -*- c ...

  2. python学习笔记--smtp模块的使用及常见错误处理

    SMTPAuthenticationError: (535, 'Error: \xc7\xeb\xca\xb9\xd3\xc3\xca\xda\xc8\xa8\xc2\xeb\xb5\xc7\xc2\ ...

  3. python学习笔记(SMTP邮件发送:带附件)

    博主有段时间没有更新博客了 先整理一个之前整理过的SMTP邮件发送,这次是带附件的功能 #!/usr/bin/env python # -*- coding: utf_8 -*- from email ...

  4. OpenCV之Python学习笔记

    OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...

  5. Python学习笔记(十一)

    Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...

  6. Python学习笔记(六)

    Python学习笔记(六) Ubuntu重置root密码 Ubuntu 16.4 目录结构 Ubuntu 命令讲解 1. Ubuntu重置root密码 启动系统,显示GRUB选择菜单(如果默认系统启动 ...

  7. python学习笔记4_类和更抽象

    python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...

  8. Python学习笔记九

    Python学习笔记之九 为什么要有操作系统 管理硬件,提供接口. 管理调度进程,并且将多个进程对硬件的竞争变得有序. 操作系统发展史 第一代计算机:真空管和穿孔卡片 没有操作系统,所有的程序设计直接 ...

  9. Python学习笔记,day5

    Python学习笔记,day5 一.time & datetime模块 import本质为将要导入的模块,先解释一遍 #_*_coding:utf-8_*_ __author__ = 'Ale ...

随机推荐

  1. centos7.3下使用yum 安装pip

    centos下安装pip时失败: No package pip available.Error: Nothing to do 解决方法: 需要先安装扩展源EPEL. EPEL(http://fedor ...

  2. Learning PHP Design Patterns

    Learning PHP Design Patterns CHAPTER 1 Algorithms handle speed of operations, and design patterns ha ...

  3. 百度 验证码识别API 使用

    先到百度云申请文字识别API ,会给你一个API KEY和一个SECRET KEY,免费,一天最多500次请求. try: temp_url = 'https://aip.baidubce.com/o ...

  4. python线程池/进程池创建

    进程池 import time from concurrent.futures import ProcessPoolExecutor def task(arg): time.sleep(2) prin ...

  5. 在Web上运行Linux—js/linux模拟器

    一个叫Fabrice Bellard 的程序员写了一段Javascript在Web浏览器中启动Linux(原网页,我把这个网页iframe在了下面),目前,你只能使用Firefox 4和Chrome ...

  6. C/C++中的输出对齐设置

    输出对齐有两个方面,一是输出宽度,一是左对齐还是又对齐. 在C++里面,默认是右对齐,可以通过cout.setf(std::ios::left)调整为左对齐,而且这种调整是全局的 ,一次设置,后面都有 ...

  7. HTML 块级元素与行内元素

    1.块元素一般都从新行开始,它可以容纳内联元素和其他块元素,常见块元素是段落标签'P".“form"这个块元素比较特殊,它只能用来容纳其他块元素. 2.如果没有css的作用,块元素 ...

  8. WinIo简介

    WinIo简介 一日发现SendInput对某程序居然无效,无奈只好开始研究WinIo.上网查了很多资料,发现关于WinIo模拟鼠标键盘的资料很少,有的也只是支言片语讲的不是很详细,而且大部分都是关于 ...

  9. DP专题·四(树形dp)

    1.poj 115 TELE 题意:一个树型网络上有n个结点,1~n-m为信号传送器,n-m+1~n为观众,当信号传送给观众后,观众会付费观看,每铺设一条道路需要一定费用.现在求以1为根,使得收到观众 ...

  10. s5_day8作业

    # 1 整理今天装饰器代码(每人手写一份,注意,是手写,交到小组长手里,明天我检查),准备明天默写 # 2 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 ...