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处理文本文件并生成指定格式的文件
Jul 31 Python
Python编程中用close()方法关闭文件的教程
May 24 Python
使用Python生成XML的方法实例
Mar 21 Python
在Python中通过getattr获取对象引用的方法
Jan 21 Python
python实现杨氏矩阵查找
Mar 02 Python
Python使用scrapy爬取阳光热线问政平台过程解析
Aug 14 Python
python requests抓取one推送文字和图片代码实例
Nov 04 Python
python使用配置文件过程详解
Dec 28 Python
opencv-python的RGB与BGR互转方式
Jun 02 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
Jun 09 Python
python Scrapy爬虫框架的使用
Jan 21 Python
python单向链表实例详解
May 25 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/08/25 PHP
php mysql 判断update之后是否更新了的方法
2012/01/10 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
2015/05/12 PHP
浅谈PHP的数据库接口和技术
2016/12/09 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
php数组遍历类与用法示例
2019/05/24 PHP
Gird组件 Part-3:范例RSSFeed Viewer
2007/03/10 Javascript
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
js获取浏览器基本信息大全
2014/11/27 Javascript
jQuery手机浏览器中拖拽动作的艰难性分析
2015/02/04 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
JQuery中Ajax()的data参数类型实例分析
2015/12/15 Javascript
js实现正则匹配中文标点符号的方法
2015/12/23 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
2016/02/16 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
elementUI中Table表格问题的解决方法
2018/12/04 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
vue-cli3项目打包后自动化部署到服务器的方法
2020/09/16 Javascript
zbar解码二维码和条形码示例
2014/02/07 Python
Python使用django获取用户IP地址的方法
2015/05/11 Python
Python实现曲线点抽稀算法的示例
2017/10/12 Python
Python中list查询及所需时间计算操作示例
2018/06/21 Python
历史学专业推荐信
2013/11/06 职场文书
工商企业管理实习自我鉴定
2013/12/04 职场文书
领导检查欢迎词
2014/01/14 职场文书
师德个人剖析材料
2014/02/02 职场文书
《风娃娃》教学反思
2014/04/19 职场文书
竞选大队委员演讲稿
2014/04/28 职场文书
网络营销策划方案
2014/06/04 职场文书
会计专业求职信
2014/08/10 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
家长给老师的感谢信
2015/01/20 职场文书
详解Redis集群搭建的三种方式
2021/05/31 Redis
python实现简单的聊天小程序
2021/07/07 Python
win10系统计算机图标怎么调出来?win10调出计算机图标的方法
2022/08/14 数码科技