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内置函数—vars的具体使用方法
Dec 04 Python
一道python走迷宫算法题
Jan 22 Python
tensorflow 1.0用CNN进行图像分类
Apr 15 Python
Python线程池模块ThreadPoolExecutor用法分析
Dec 28 Python
正确理解Python中if __name__ == '__main__'
Jan 24 Python
python重试装饰器的简单实现方法
Jan 31 Python
django 做 migrate 时 表已存在的处理方法
Aug 31 Python
python Manager 之dict KeyError问题的解决
Dec 21 Python
python中图像通道分离与合并实例
Jan 17 Python
Python openpyxl模块原理及用法解析
Jan 19 Python
学习Python需要哪些工具
Sep 04 Python
python代数式括号有效性检验示例代码
Oct 04 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
在JavaScript中调用php程序
2009/03/09 PHP
PHP最常用的正则表达式
2017/02/13 PHP
thinkPHP分页功能实例详解
2017/05/05 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
2017/06/05 PHP
In Javascript Class, how to call the prototype method.(three method)
2007/01/09 Javascript
点击显示指定元素隐藏其他同辈元素的方法
2014/02/19 Javascript
跟我学Node.js(四)---Node.js的模块载入方式与机制
2014/06/04 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
jQuery同步提交示例代码
2015/12/12 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
vuejs绑定class和style样式
2017/04/11 Javascript
Vue中如何实现轮播图的示例代码
2017/07/27 Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
2017/08/22 Javascript
JavaScript生成指定范围随机数和随机序列的方法
2018/05/05 Javascript
ng-events类似ionic中Events的angular全局事件
2018/09/05 Javascript
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
实例讲解React 组件生命周期
2020/07/08 Javascript
python获取元素在数组中索引号的方法
2015/07/15 Python
Python输入二维数组方法
2018/04/13 Python
pandas中遍历dataframe的每一个元素的实现
2019/10/23 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
2019/11/25 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
2020/07/05 Python
C#实现启动一个进程
2016/10/01 面试题
岗位职责定义及内容
2013/11/08 职场文书
工作失职检讨书范文
2014/01/16 职场文书
区政府领导班子个人对照检查材料
2014/09/25 职场文书
公司领导班子四风对照检查材料
2014/09/27 职场文书
2015年城市管理工作总结
2015/05/23 职场文书
安娜卡列尼娜观后感
2015/06/11 职场文书
旅游安全责任协议书
2016/03/22 职场文书
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang
如何用Node.js编写内存效率高的应用程序
2021/04/30 Javascript
Python音乐爬虫完美绕过反爬
2021/08/30 Python
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL