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 相关文章推荐
paramiko模块安装和使用(远程登录服务器)
Jan 27 Python
Python程序设计入门(1)基本语法简介
Jun 13 Python
python通过get,post方式发送http请求和接收http响应的方法
May 26 Python
21行Python代码实现拼写检查器
Jan 25 Python
Python用zip函数同时遍历多个迭代器示例详解
Nov 14 Python
python处理数据,存进hive表的方法
Jul 04 Python
python datetime中strptime用法详解
Aug 29 Python
基于Python实现扑克牌面试题
Dec 11 Python
解决Python logging模块无法正常输出日志的问题
Feb 21 Python
使用npy转image图像并保存的实例
Jul 01 Python
python输出结果刷新及进度条的实现操作
Jul 13 Python
Django中使用Celery的方法步骤
Dec 07 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
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
php实现处理输入转义字符的代码
2015/11/08 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
JavaScript Sort 表格排序
2009/10/31 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
javascript创建函数的20种方式汇总
2015/06/23 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
浅谈React 属性和状态的一些总结
2016/11/21 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
详解express使用vue-router的history踩坑
2019/06/05 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
多页vue应用的单页面打包方法(内含打包模式的应用)
2020/06/11 Javascript
js实现3D旋转效果
2020/08/18 Javascript
python使用RNN实现文本分类
2018/05/24 Python
python3.6数独问题的解决
2019/01/21 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
python集合是否可变总结
2019/06/20 Python
python 搜索大文件的实例代码
2019/07/08 Python
Python with语句和过程抽取思想
2019/12/23 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
2020/03/09 Python
PyQt5实现简单的计算器
2020/05/30 Python
Python实现列表索引批量删除的5种方法
2020/11/16 Python
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
英国女性时尚品牌:Apricot
2018/12/04 全球购物
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
本科生职业生涯规划书范文
2014/01/21 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
银行给客户的感谢信
2015/01/23 职场文书
杜甫草堂导游词
2015/02/03 职场文书
护士个人总结范文
2015/02/13 职场文书
婚宴新郎致辞
2015/07/28 职场文书
《绝招》教学反思
2016/02/20 职场文书
Python 视频画质增强
2022/04/28 Python