python 发送邮件的示例代码(Python2/3都可以直接使用)


Posted in Python onDecember 03, 2020

发送普通邮件

发送文本和html普通邮件如下:

from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr

import smtplib

def _format_addr(s):
  name, addr = parseaddr(s)
  return formataddr((Header(name, 'utf-8').encode(), addr))

def get_server(username):
  """
  通过邮箱地址获得邮箱服务器
  :param username:用户名,比如:123456@qq.com
  :return: 邮箱服务器地址,可以根据自己实际业务添加,比如:smtp.qq.com
  """
  servers = {'qq' : 'smtp.qq.com'
        , '126' : 'smtp.126.com'
        , '163' : 'smtp.163.com'
        , '139' : 'smtp.139.com'}

  for key,value in servers.items():
    if key in username:
      return value

def send_mail(username, password, to, sender_name, subject, content, email_type):
  """
  :param username: 
  :param password: 
  :param to: 接收者列表 []
  :param sender_name: 
  :param subject: 
  :param content: 
  :param email_type: 
  :return: 
  """
  from_addr = username
  password = password
  to_addr = to
  smtp_server = get_server(username)

  # 邮件正文是MIMEText类型
  msg = MIMEText('%s'%(content), '%s'%(email_type), 'utf-8')
  msg['From'] = _format_addr('%s<%s>' % (sender_name, from_addr))
  msg['To'] = _format_addr('<%s>' % to_addr)
  msg['Subject'] = Header('%s'%(subject), 'utf-8').encode()

  # 普通登陆端口是25,带ssl验证时候端口是465
  # smtp_server = 'smtp.exmail.qq.com'
  # server = smtplib.SMTP_SSL(smtp_server, 465)
  server = smtplib.SMTP(smtp_server, 25)
  server.set_debuglevel(1)
  server.login(from_addr, password)
  server.sendmail(from_addr, to_addr, msg.as_string())
  server.quit()

if __name__ == '__main__':
  """发送简单文本邮件"""
  username = '******@126.com'
  password = '******'
  sender_name = '******@126.com'
  subject = 'test 邮件'
  content = '<html><h1>ikeguang 的来信</h1></html> <a href="http://www.ikeguang.com" rel="external nofollow" >ikeguang.com</a></html>'
  # email_type 取值:plain,文本类型邮件;html,html类型邮件
  email_type = 'html'
  _to = ['******@126.com', '******@qq.com']
  for to in _to:
    send_mail(username, password, to, sender_name, subject, content, email_type)
    print('send mail to %s success' % to)

发送带附件的邮件

def send_mail_multipart(username, password, to, sender_name, subject, content, email_type):
  from_addr = username
  password = password
  to_addr = to
  smtp_server = get_server(username)

  msg = MIMEMultipart()
  # 邮件正文是MIMEText类型
  msg.attach(MIMEText('%s'%(content), '%s'%(email_type), 'utf-8'))
  msg['From'] = _format_addr('%s<%s>' % (sender_name, from_addr))
  msg['To'] = _format_addr('<%s>' % to_addr)
  msg['Subject'] = Header('%s'%(subject), 'utf-8').encode()

  # 读取附件
  filename = 'D:/我的文件/Codes/PyCode/source/image/0.jpg'
  with open(filename, 'rb') as f:
    # 设置附件的MIME和文件名,这里是png类型:
    mime = MIMEBase('image', 'jpg', filename='0.jpg')
    # 加上必要的头信息:
    mime.add_header('Content-Disposition', 'attachment', filename='0.jpg')
    mime.add_header('Content-ID', '<0>')
    mime.add_header('X-Attachment-Id', '0')
    # 把附件的内容读进来:
    mime.set_payload(f.read())
    # 用Base64编码:
    encoders.encode_base64(mime)
    # 添加到MIMEMultipart:
    msg.attach(mime)

  # 普通登陆端口是25,带ssl验证时候端口是465
  # smtplib.SMTP_SSL(smtp_server, 465)
  server = smtplib.SMTP(smtp_server, 25)
  server.set_debuglevel(1)
  server.login(from_addr, password)
  server.sendmail(from_addr, [to_addr], msg.as_string())
  server.quit()
Python 相关文章推荐
python实现倒计时的示例
Feb 14 Python
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
Jun 10 Python
Python实现Windows上气泡提醒效果的方法
Jun 03 Python
Python中绑定与未绑定的类方法用法分析
Apr 29 Python
Python3.5 Pandas模块缺失值处理和层次索引实例详解
Apr 23 Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 Python
Python Opencv提取图片中某种颜色组成的图形的方法
Sep 19 Python
关于Numpy数据类型对象(dtype)使用详解
Nov 27 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
简单的命令查看安装的python版本号
Aug 28 Python
详解python3 GUI刷屏器(附源码)
Feb 18 Python
AI:如何训练机器学习的模型
Apr 16 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
Dec 03 #Python
python 调整图片亮度的示例
Dec 03 #Python
Python 实现PS滤镜的旋涡特效
Dec 03 #Python
Python 实现PS滤镜中的径向模糊特效
Dec 03 #Python
python字符串拼接+和join的区别详解
Dec 03 #Python
python二维图制作的实例代码
Dec 03 #Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
Dec 03 #Python
You might like
PHP Stream_*系列函数
2010/08/01 PHP
PHP引用符&amp;的用法详细解析
2013/08/22 PHP
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
Thinkphp自定义生成缩略图尺寸的方法
2019/08/05 PHP
php实现QQ小程序发送模板消息功能
2019/09/18 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
javascript与CSS复习(三)
2010/06/29 Javascript
FF火狐下获取一个元素同类型的相邻元素实现代码
2012/12/15 Javascript
兼容IE和FF的图片上传前预览js代码
2013/05/28 Javascript
JS滚轮事件onmousewheel使用介绍
2013/11/01 Javascript
用jQuery toggleClass 实现鼠标移上变色
2014/05/14 Javascript
jQuery实现菜单式图片滑动切换
2015/03/14 Javascript
JavaScript Sort 的一个错误用法示例
2015/03/20 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
js实现网页多级级联菜单代码
2015/08/20 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
JS实现li标签的删除
2019/04/12 Javascript
vue-router二级导航切换路由及高亮显示的实现方法
2019/07/10 Javascript
JavaScript 闭包的使用场景
2020/09/17 Javascript
Python中pip安装非PyPI官网第三方库的方法
2015/06/02 Python
python分析作业提交情况
2017/11/22 Python
Python3爬虫使用Fidder实现APP爬取示例
2018/11/27 Python
elasticsearch python 查询的两种方法
2019/08/04 Python
python Event事件、进程池与线程池、协程解析
2019/10/25 Python
python如何查看安装了的模块
2020/06/23 Python
python使用nibabel和sitk读取保存nii.gz文件实例
2020/07/01 Python
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
销售会议开幕词
2015/01/28 职场文书
世界地球日活动总结
2015/02/09 职场文书
感恩教师节主题班会
2015/08/12 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书
交通事故协议书范本
2016/03/19 职场文书
2019幼儿教师求职信(3篇)
2019/09/20 职场文书
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android