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单线程实现多个定时器示例
Mar 30 Python
python基于mysql实现的简单队列以及跨进程锁实例详解
Jul 07 Python
利用Python绘制数据的瀑布图的教程
Apr 07 Python
python uuid模块使用实例
Apr 08 Python
python数据封装json格式数据
Mar 04 Python
详解Django中类视图使用装饰器的方式
Aug 12 Python
解决Python运行文件出现out of memory框的问题
Dec 03 Python
PyQt5实现简易计算器
May 30 Python
Python实现字符串匹配的KMP算法
Apr 04 Python
Flask框架 CSRF 保护实现方法详解
Oct 30 Python
基于Python快速处理PDF表格数据
Jun 03 Python
10行Python代码实现Web自动化管控的示例代码
Aug 14 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
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
php数组中删除元素的实现代码
2012/06/22 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
浏览器打开层自动缓慢展开收缩实例代码
2013/07/04 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
javascript字符串与数组转换汇总
2015/05/26 Javascript
JavaScript中0和&quot;&quot;比较引发的问题
2016/05/26 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
2016/06/10 Javascript
JavaScript中apply方法的应用技巧小结
2016/09/29 Javascript
javascript iframe跨域详解
2016/10/26 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
浅谈Vue-cli 命令行工具分析
2017/11/22 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
Python寻找两个有序数组的中位数实例详解
2018/12/05 Python
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
2019/08/26 Python
PyTorch里面的torch.nn.Parameter()详解
2020/01/03 Python
Python txt文件常用读写操作代码实例
2020/08/03 Python
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
澳大利亚波希米亚风时尚品牌:Tree of Life
2019/09/15 全球购物
Ajxa常见问题都有哪些
2014/03/26 面试题
行政总经理岗位职责
2013/12/05 职场文书
销售员个人求职的自我评价
2014/02/10 职场文书
关爱留守儿童标语
2014/06/18 职场文书
教师党员自我评价范文
2015/03/04 职场文书
2016情人节宣传语
2015/07/14 职场文书
2015年圣诞节寄语
2015/08/17 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
nginx配置指令之server_name的具体使用
2022/08/14 Servers