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语言描述连续子数组的最大和
Jan 04 Python
Python设计模式之命令模式简单示例
Jan 10 Python
python列表的增删改查实例代码
Jan 30 Python
python如何实现int函数的方法示例
Feb 19 Python
解决Tensorflow使用pip安装后没有model目录的问题
Jun 13 Python
Flask核心机制之上下文源码剖析
Dec 25 Python
python读写csv文件方法详细总结
Jul 05 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
Jul 23 Python
python使用socket 先读取长度,在读取报文内容示例
Sep 26 Python
Python Numpy数组扩展repeat和tile使用实例解析
Dec 09 Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 Python
详解python datetime模块
Aug 17 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 执行系统命令的方法
2009/07/07 PHP
PHP日期处理函数 整型日期格式
2011/01/12 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
Laravel学习教程之model validation的使用示例
2017/10/23 PHP
JQuery 文本框使用小结
2010/05/22 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
JS检测输入字符是否包含非法字符的示例代码
2014/02/11 Javascript
基于js与flash实现的网站flv视频播放插件代码
2014/10/14 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
js实现移动端编辑添加地址【模仿京东】
2017/04/28 Javascript
vue.js开发环境搭建教程
2017/05/04 Javascript
Cropper.js 实现裁剪图片并上传(PC端)
2017/08/20 Javascript
get  post jsonp三种数据交互形式实例详解
2017/08/25 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
js实现单张图片平移切换效果
2017/10/11 Javascript
Vue 进入/离开动画效果
2017/12/26 Javascript
vue的路由映射问题及解决方案
2019/10/14 Javascript
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
2019/11/18 NodeJs
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
微信小程序自定义顶部组件customHeader的示例代码
2020/06/03 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
python中如何使用正则表达式的集合字符示例
2017/10/09 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
Jdbc数据访问技术面试题
2012/03/30 面试题
美术专业个人自我评价
2014/01/18 职场文书
前厅部经理岗位职责范文
2014/02/04 职场文书
大学生职业生涯规划书参考模板
2014/03/05 职场文书
岗位聘任书范文
2014/03/29 职场文书
借款协议书
2014/04/12 职场文书
村级四风对照检查材料
2014/08/24 职场文书
党支部对照检查材料
2014/08/25 职场文书
离职证明标准格式
2014/09/15 职场文书
出纳岗位职责
2015/01/31 职场文书
毕业感言怎么写
2015/07/31 职场文书