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实现二分查找算法实例
May 26 Python
python遍历文件夹下所有excel文件
Jan 03 Python
对python中的xlsxwriter库简单分析
May 04 Python
python中从str中提取元素到list以及将list转换为str的方法
Jun 26 Python
Python第三方Window模块文件的几种安装方法
Nov 22 Python
python实现三次样条插值
Dec 17 Python
基于python的ini配置文件操作工具类
Apr 24 Python
python 列表输出重复值以及对应的角标方法
Jun 11 Python
使用python绘制二维图形示例
Nov 22 Python
Python 炫技操作之合并字典的七种方法
Apr 10 Python
python使用建议技巧分享(三)
Aug 18 Python
用Python 执行cmd命令
Dec 18 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+Tidy-完美的XHTML纠错+过滤
2007/04/10 PHP
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
js 通用javascript函数库整理
2011/08/14 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
2014/01/16 Javascript
Javascript Object 对象学习笔记
2014/12/17 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
2016/04/01 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
2016/05/09 Javascript
js阻止冒泡和默认事件(默认行为)详解
2016/10/20 Javascript
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
微信小程序图表插件wx-charts用法实例详解
2019/05/20 Javascript
React-redux实现小案例(todolist)的过程
2019/09/29 Javascript
jQuery实现的上拉刷新功能组件示例
2020/05/01 jQuery
Nest.js散列与加密实例详解
2021/02/24 Javascript
Python中的迭代器与生成器高级用法解析
2016/06/28 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
python实现代码统计程序
2019/09/19 Python
Windows系统下pycharm中的pip换源
2020/02/23 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
python 瀑布线指标编写实例
2020/06/03 Python
Python数据相关系数矩阵和热力图轻松实现教程
2020/06/16 Python
迪士尼英国官方商店:shopDisney UK
2019/09/21 全球购物
波兰运动鞋网上商店:Distance.pl
2020/07/30 全球购物
学校安全检查制度
2014/01/27 职场文书
检查接待方案
2014/02/27 职场文书
部队反四风对照检查材料
2014/09/26 职场文书
个人贷款授权委托书样本
2014/10/07 职场文书
毕业晚宴祝酒词
2015/08/11 职场文书
2016先进工作者事迹材料
2016/02/25 职场文书
使用Ajax实现进度条的绘制
2022/04/07 Javascript