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的Django框架中的QuerySets
Apr 20 Python
让Python更加充分的使用Sqlite3
Dec 11 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
Jan 17 Python
简单实现python数独游戏
Mar 30 Python
python实现简单登陆系统
Oct 18 Python
Python正则表达式匹配日期与时间的方法
Jul 07 Python
TensorFlow实现打印每一层的输出
Jan 21 Python
Python实现AI换脸功能
Apr 10 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
Jun 03 Python
python转化excel数字日期为标准日期操作
Jul 14 Python
python热力图实现简单方法
Jan 29 Python
Django使用channels + websocket打造在线聊天室
May 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
php邮件发送,php发送邮件的类
2011/03/24 PHP
php+Ajax处理xml与json格式数据的方法示例
2019/03/04 PHP
一端时间轮换的广告
2006/06/26 Javascript
js URL参数的拼接方法比较
2012/02/15 Javascript
javascript中数组的定义及使用实例
2015/01/21 Javascript
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
详解vue 项目白屏解决方案
2018/10/31 Javascript
uni app仿微信顶部导航条功能
2019/09/17 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
js实现微信聊天界面
2020/08/09 Javascript
[02:38]DOTA2英雄基础教程 噬魂鬼
2014/01/03 DOTA
Python数组条件过滤filter函数使用示例
2014/07/22 Python
通过Python实现自动填写调查问卷
2017/09/06 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
python使用matplotlib绘制热图
2018/11/07 Python
Keras自定义IOU方式
2020/06/10 Python
Python drop方法删除列之inplace参数实例
2020/06/27 Python
Python如何批量生成和调用变量
2020/11/21 Python
Python try except else使用详解
2021/01/12 Python
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
泰国的头号网上婴儿用品店:Motherhood.co.th
2019/04/09 全球购物
什么是Remote Module
2016/06/10 面试题
玩具公司的创业计划书
2013/12/31 职场文书
精彩的演讲稿开头
2014/05/08 职场文书
关于护士节的演讲稿
2014/05/26 职场文书
分公司总经理岗位职责
2014/08/03 职场文书
2014年重阳节老干部座谈会局领导发言稿
2014/09/25 职场文书
小学家长通知书评语
2014/12/31 职场文书
医院岗前培训心得体会
2016/01/08 职场文书
导游词幽默开场白
2019/06/26 职场文书
django如何自定义manage.py管理命令
2021/04/27 Python
详解Django的MVT设计模式
2021/04/29 Python
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server