python基于SMTP协议发送邮件


Posted in Python onMay 31, 2019

本文实例为大家分享了python基于SMTP协议发送邮件的具体代码,供大家参考,具体内容如下

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
 @Time : 2018/5/31
 @Author : LiuXueWen
 @Site : 
 @File : sendEmail.py
 @Software: PyCharm
 @Description: 使用SMTP协议发送邮件,支持同时发送给多个地址,支持同时发送文本信息、超文本信息和多附件
"""
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
import os

class properties():
 # 设置服务器, "smtp.xx.com"
 mail_host = "smtp.qq.com"
 # 用户名
 mail_user = "@qq.com"
 # 口令
 mail_pass = ""
 # smtp服务器端口,每个服务商提供的邮件服务端口可能不一致,465是腾讯的端口
 mail_port = 465
 # 发送邮件的地址
 sender = "@vip.qq.com"
 # 接收邮件,可设置为你的QQ邮箱或者其他邮箱,list类型,可同时填写多个地址并以,分割
 receivers = "@qq.com","@qq.com"
 # 邮件发送的内容
 messageText = "测试使用\n"
 # 邮件发送的超文本内容
 messageHTML = """
     <!DOCTYPE html>
     <html lang="en">
     <head>
      <meta charset="UTF-8">
      <title>test</title>
     </head>
     <body>
      <img src="http://a.hiphotos.baidu.com/image/pic/item/730e0cf3d7ca7bcb6a172486b2096b63f624a82f.jpg" alt="test" width="200px" height="200px">
     </body>
     </html>
    """
 # 发送邮件方的别名展示(类似昵称),为空则显示发件方地址
 messageFromHeader = ""
 # 接收邮件方的展示信息
 messageToHeader = "test python"
 # 邮件主题
 messageSubject = "ceshiceshi123"
 # 需要发送的附件的详细地址,支持多附件发送,附件之间以,分割
 filePaths = '1.txt','2.txt','3.txt'


def sendMail():
 # 下面所有参数均可通过配置文件配置获取
 """
  :param mail_host: 设置服务器,"smtp.xx.com"
  :param mail_user: 用户名
  :param mail_pass: 口令
  :param sender: 发送邮件的地址
  :param receivers: 接收邮件,可设置为你的QQ邮箱或者其他邮箱
  :param messageText: 邮件发送的文本内容
  :param messageHTML: 邮件发送的超文本内容
  :param messageFromHeader: 发送邮件方的别名展示(类似昵称)
  :param messageToHeader: 接收邮件方的展示信息
  :param messageSubject: 邮件主题
  :param filePath: 附件详细地址
  :return:
 """
 # 需要获取的参数列
 mail_host = properties.mail_host
 mail_user = properties.mail_user
 mail_pass = properties.mail_pass
 mail_port = properties.mail_port
 sender = properties.sender
 receivers = properties.receivers
 messageText = properties.messageText
 messageHTML = properties.messageHTML
 messageFromHeader = properties.messageFromHeader
 # 如果发件人昵称未填写则直接使用发件人地址作为名称
 if messageFromHeader == "":
  messageFromHeader = sender
 messageToHeader = properties.messageToHeader
 messageSubject = properties.messageSubject
 filePaths = properties.filePaths

 # 邮件类型为"multipart/alternative"的邮件包括纯文本正文(text / plain)和超文本正文(text / html)。
 # 邮件类型为"multipart/related"的邮件正文中包括图片,声音等内嵌资源。
 # 邮件类型为"multipart/mixed"的邮件包含附件。向上兼容,如果一个邮件有纯文本正文,超文本正文,内嵌资源,附件,则选择mixed类型。
 message = MIMEMultipart('mixed')

 # 邮件显示信息内容
 # 发送邮件方的头部展示信息
 message['From'] = Header(messageFromHeader, 'utf-8')
 # 接收邮件方的展示信息
 message['To'] = Header(messageToHeader, 'utf-8')
 # 邮件主题
 message['Subject'] = Header(messageSubject, 'utf-8')

 try:
  # 发送邮件附件,支持多附件发送
  for filePath in filePaths:
   messageFile = open(filePath, 'rb').read()
   message_file = MIMEText(messageFile, 'base64', 'utf-8')
   message["Content-Type"] = 'application/octet-stream'
   # 目前发送附件不能使用message_file["Content-Disposition"] = 'attachment; filename="aaa.txt"'方式发送信息
   message_file.add_header('Content-Disposition', 'attachment', filename=os.path.basename(filePath))
   # 附件内容
   message.attach(message_file)
 except Exception as e:
  print "附件发送失败:" + str(e)

 # 一共三个参数,第一个为发送文本信息,第二个发送类型,第三个发送信息的编码。如果想要发送html类型的信息,仅需要修改第二个参数'plain'为'html'即可
 # 文本信息,使用‘plain'属性不能正常显示
 message_text = MIMEText(messageText, 'html', 'utf-8')
 message.attach(message_text)

 # 超文本信息
 message_html = MIMEText(messageHTML, 'html', 'utf-8')
 message.attach(message_html)


 try:
  # 因为现在很多服务商做了安全验证,所有在发送邮件的时候需要把原来的smtplib.SMTP()改成现在的smtplib.SMTP_SSL()方式
  smtpObj = smtplib.SMTP_SSL()
  # 链接邮件服务器
  smtpObj.connect(mail_host, mail_port)
  # 登录邮件系统
  smtpObj.login(mail_user, mail_pass)
  # 发送邮件信息
  smtpObj.sendmail(sender,receivers,message.as_string())
  print "邮件发送成功"
 except Exception as e:
  print("邮件发送失败,错误信息:" + str(e))


if __name__ == '__main__':
 sendMail()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python迭代器与生成器详解
Mar 10 Python
Python中列表元素转为数字的方法分析
Jun 14 Python
Python使用email模块对邮件进行编码和解码的实例教程
Jul 01 Python
python if not in 多条件判断代码
Sep 21 Python
python通过ffmgep从视频中抽帧的方法
Dec 05 Python
python添加模块搜索路径和包的导入方法
Jan 19 Python
python取余运算符知识点详解
Jun 27 Python
python各层级目录下import方法代码实例
Jan 20 Python
python3中sys.argv的实例用法
Apr 24 Python
Python基于正则表达式实现计算器功能
Jul 13 Python
Python字符串查找基本操作代码案例
Oct 27 Python
python装饰器代码深入讲解
Mar 01 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
May 30 #Python
Python自定义函数计算给定日期是该年第几天的方法示例
May 30 #Python
基于Python打造账号共享浏览器功能
May 30 #Python
Python实现带下标索引的遍历操作示例
May 30 #Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
May 29 #Python
python2和python3在处理字符串上的区别详解
May 29 #Python
python TF-IDF算法实现文本关键词提取
May 29 #Python
You might like
认识并使用PHP超级全局变量
2010/01/26 PHP
PHP 可阅读随机字符串代码
2010/05/26 PHP
php自动给文章加关键词链接的函数代码
2012/11/29 PHP
CodeIgniter基本配置详细介绍
2013/11/12 PHP
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
Javascript的getYear、getFullYear、getUTCFullYear异同分享
2011/11/30 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
Javascript中的数据类型之旅
2015/10/18 Javascript
JavaScript Date对象详解
2016/03/01 Javascript
浅谈Vue的加载顺序探讨
2017/10/25 Javascript
Vue脚手架的简单使用实例
2018/07/10 Javascript
详解webpack-dev-server使用方法
2018/09/14 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
关于Python面向对象编程的知识点总结
2017/02/14 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
详解pandas中MultiIndex和对象实际索引不一致问题
2019/07/23 Python
Python while循环使用else语句代码实例
2020/02/07 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
基于Django快速集成Echarts代码示例
2020/12/01 Python
Omio法国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/13 全球购物
Sisley法国希思黎中国官网:享誉全球的奢华植物美容品牌
2019/06/30 全球购物
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
售后服务承诺书
2014/03/26 职场文书
营销总经理岗位职责范本
2014/09/02 职场文书
公务员学习习总书记“三严三实”思想汇报
2014/09/19 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
债务追讨授权委托书范本
2014/10/16 职场文书
2015年学校保卫部工作总结
2015/05/11 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
2015人事行政工作总结范文
2015/05/21 职场文书
合同审查法律意见书
2015/06/04 职场文书
跟班学习心得体会(共6篇)
2016/01/23 职场文书
vue中 this.$set的使用详解
2021/11/17 Vue.js