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 相关文章推荐
有关wxpython pyqt内存占用问题分析
Jun 09 Python
Python 实现文件的全备份和差异备份详解
Dec 27 Python
python3解析库pyquery的深入讲解
Jun 26 Python
python 通过麦克风录音 生成wav文件的方法
Jan 09 Python
Python时间序列缺失值的处理方法(日期缺失填充)
Aug 11 Python
PyTorch: 梯度下降及反向传播的实例详解
Aug 20 Python
Python银行系统实战源码
Oct 25 Python
Python三元运算与lambda表达式实例解析
Nov 30 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
Dec 18 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
Jun 10 Python
Python入门基础之数字字符串与列表
Feb 01 Python
Python闭包的定义和使用方法
Apr 11 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配置文件中最常用四个ini函数
2007/03/19 PHP
php实现统计邮件大小的方法
2013/08/06 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
php从字符串创建函数的方法
2015/03/16 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
PHP生成短网址方法汇总
2016/07/12 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
2017/11/20 PHP
PHP基于递归算法解决兔子生兔子问题
2018/05/11 PHP
关于flash遮盖div浮动层的解决方法
2010/07/17 Javascript
Jquery ajax传递复杂参数给WebService的实现代码
2011/08/08 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
2016/05/07 Javascript
js判断是否为空和typeof的用法(详解)
2016/10/07 Javascript
ES6新特性之解构、参数、模块和记号用法示例
2017/04/01 Javascript
AngularJs实现聊天列表实时刷新功能
2017/06/15 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
JavaScript函数绑定用法实例分析
2017/11/14 Javascript
JS简单生成由字母数字组合随机字符串示例
2018/05/25 Javascript
对vue下点击事件传参和不传参的区别详解
2018/09/15 Javascript
nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error
2019/03/02 NodeJs
基于vue实现web端超大数据量表格的卡顿解决
2019/04/02 Javascript
js实现缓动动画
2020/11/25 Javascript
Python实现list反转实例汇总
2014/11/11 Python
python中使用iterrows()对dataframe进行遍历的实例
2018/06/09 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
Python基于jieba, wordcloud库生成中文词云
2020/05/13 Python
HTML5 解析规则分析
2009/08/14 HTML / CSS
美国眼镜在线零售商:Dualens
2019/12/07 全球购物
感恩之星事迹材料
2014/05/03 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
法人代表任命书范本
2014/06/05 职场文书
农村环境卫生倡议书
2015/04/29 职场文书
办公室年度工作总结2015
2015/05/21 职场文书
离婚民事起诉状
2015/08/03 职场文书
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang