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 相关文章推荐
pycharm 使用心得(六)进行简单的数据库管理
Jun 06 Python
Python生成随机MAC地址
Mar 10 Python
介绍Python的Urllib库的一些高级用法
Apr 30 Python
Python批量创建迅雷任务及创建多个文件
Feb 13 Python
python 添加用户设置密码并发邮件给root用户
Jul 25 Python
python实现12306抢票及自动邮件发送提醒付款功能
Mar 08 Python
python判断数字是否是超级素数幂
Sep 27 Python
python 常见字符串与函数的用法详解
Nov 23 Python
Python小进度条显示代码
Mar 05 Python
python爬虫租房信息在地图上显示的方法
May 13 Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
Jul 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
PHP中break及continue两个流程控制指令区别分析
2011/04/18 PHP
Yii分页用法实例详解
2014/12/04 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
js保存当前路径(cookies记录)
2010/12/14 Javascript
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
2012/09/19 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
2013/12/19 Javascript
js字符串日期yyyy-MM-dd转化为date示例代码
2014/03/06 Javascript
根据配置文件加载js依赖模块
2014/12/29 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
表单中单选框添加选项和移除选项
2016/07/04 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
2016/08/01 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
在vue中,v-for的索引index在html中的使用方法
2018/03/06 Javascript
vue2.0$nextTick监听数据渲染完成之后的回调函数方法
2018/09/11 Javascript
JavaScript代码调试方法实例小结
2019/01/05 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
Python3中详解fabfile的编写
2018/06/24 Python
python 字典 setdefault()和get()方法比较详解
2019/08/07 Python
python3.5 cv2 获取视频特定帧生成jpg图片
2019/08/28 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
Python带参数的装饰器运行原理解析
2020/06/09 Python
python中实现栈的三种方法
2020/12/19 Python
Python 实现一个简单的web服务器
2021/01/03 Python
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
仓库管理计划书
2014/05/04 职场文书
代理人委托书
2014/08/01 职场文书
2015年公务员试用期工作总结
2015/05/28 职场文书
python数字转对应中文的方法总结
2021/08/02 Python
MySQL定时备份数据库(全库备份)的实现
2021/09/25 MySQL