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 09 Python
python pandas读取csv后,获取列标签的方法
Nov 12 Python
Pycharm以root权限运行脚本的方法
Jan 19 Python
django2.0扩展用户字段示例
Feb 13 Python
python 字典的打印实现
Sep 26 Python
Pyecharts绘制全球流向图的示例代码
Jan 08 Python
Python自动采集微信联系人的实现示例
Feb 28 Python
Python3中的f-Strings增强版字符串格式化方法
Mar 04 Python
Python爬取微信小程序通用方法代码实例详解
Sep 29 Python
python使用bs4爬取boss直聘静态页面
Oct 10 Python
python 网络编程要点总结
Jun 18 Python
Python re.sub 反向引用的实现
Jul 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
php单态设计模式(单例模式)实例
2014/11/18 PHP
php转换颜色为其反色的方法
2015/04/27 PHP
Yii CDBCriteria常用方法实例小结
2017/01/19 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
JavaScript的null和undefined区别示例介绍
2014/09/15 Javascript
原生JavaScript+LESS实现瀑布流
2014/12/12 Javascript
js实现图片点击左右轮播
2015/07/08 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
WEB前端实现裁剪上传图片功能
2016/10/17 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
bootstrapvalidator之API学习教程
2017/06/29 Javascript
layui问题之模拟select点击事件的实例讲解
2018/08/15 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
2018/08/28 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
vue项目中使用scss的方法步骤
2019/05/16 Javascript
微信小程序实现列表的横向滑动方式
2020/07/15 Javascript
Vue 实现对quill-editor组件中的工具栏添加title
2020/08/03 Javascript
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
Python基于机器学习方法实现的电影推荐系统实例详解
2019/06/25 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
python开根号实例讲解
2020/08/30 Python
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
优秀应届毕业生自荐信
2013/11/16 职场文书
《花木兰》教学反思
2014/04/09 职场文书
书香校园建设方案
2014/05/02 职场文书
信息管理与信息系统专业求职信
2014/06/21 职场文书
理财计划书
2014/08/14 职场文书
学习党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
个人廉政承诺书
2015/04/28 职场文书
工程竣工验收申请报告
2015/05/15 职场文书
美容院管理规章制度
2015/08/05 职场文书
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫