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新手在作用域方面经常容易碰到的问题
Apr 03 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
Jul 09 Python
Python的Django框架中if标签的相关使用
Jul 15 Python
python中is与双等于号“==”的区别示例详解
Nov 21 Python
Python使用re模块实现信息筛选的方法
Apr 29 Python
使用Python实现一个栈判断括号是否平衡
Aug 23 Python
Python装饰器用法实例分析
Jan 14 Python
对numpy下的轴交换transpose和swapaxes的示例解读
Jun 26 Python
python读取tif图片时保留其16bit的编码格式实例
Jan 13 Python
python 控制台单行刷新,多行刷新实例
Feb 19 Python
python设置中文界面实例方法
Oct 27 Python
看看如何用Python绘制小米新版天价logo
Apr 20 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
phpmyadmin出现Cannot start session without errors问题解决方法
2014/08/14 PHP
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
laravel安装和配置教程
2014/10/29 PHP
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
jquery插件jTimer(jquery定时器)使用方法
2013/12/23 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
JS简单设置下拉选择框默认值的方法
2016/08/20 Javascript
vue多级多选菜单组件开发
2020/09/08 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
微信小程序如何获取群聊的openGid以及名称详解
2019/07/17 Javascript
[07:48]DOTA2上海特级锦标赛主赛事首日RECAP
2016/03/04 DOTA
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python设置检查点简单实现代码
2014/07/01 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
2019/06/13 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
北京华建集团SQL面试题
2014/06/03 面试题
中学生国旗下讲话稿
2014/04/26 职场文书
大学优秀班集体申报材料
2014/05/23 职场文书
师德师风自查材料
2014/10/14 职场文书
工伤事故赔偿协议书
2014/10/27 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
实习护士自荐信
2015/03/25 职场文书
2015年个人审计工作总结
2015/04/07 职场文书
2015年财务个人工作总结范文
2015/05/22 职场文书
合同范本之电脑出租
2019/08/13 职场文书
Nginx反向代理学习实例教程
2021/10/24 Servers