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实现获取序列中最小的几个元素
Sep 25 Python
python使用BeautifulSoup分页网页中超链接的方法
Apr 04 Python
Python EOL while scanning string literal问题解决方法
Sep 18 Python
Python编写Windows Service服务程序
Jan 04 Python
详解Python 数据库的Connection、Cursor两大对象
Jun 25 Python
Python中的CSV文件使用&quot;with&quot;语句的方式详解
Oct 16 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
May 13 Python
在python image 中安装中文字体的实现方法
Aug 22 Python
Python通过cv2读取多个USB摄像头
Aug 28 Python
Pytorch训练过程出现nan的解决方式
Jan 02 Python
Python sep参数使用方法详解
Feb 12 Python
用python爬虫批量下载pdf的实现
Dec 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
第九节 绑定 [9]
2006/10/09 PHP
使用字符串函数输出整数化的PHP版本号
2006/10/09 PHP
PHP定时任务延缓执行的实现
2014/10/08 PHP
php通过strpos查找字符串出现位置的方法
2015/03/17 PHP
PHP封装的分页类与简单用法示例
2019/02/25 PHP
PHP中的self关键字详解
2019/06/23 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
SWFObject 2.1以上版本语法介绍
2010/07/10 Javascript
jquery设置元素的readonly和disabled的写法
2013/09/22 Javascript
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
28个常用JavaScript方法集锦
2015/01/14 Javascript
bootstrap fileinput 插件使用项目总结(经验)
2017/02/22 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
H5实现手机拍照和选择上传功能
2019/12/18 Javascript
[03:18]DOTA2亚洲邀请赛小组赛第一日 RECAP赛事回顾
2015/01/30 DOTA
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
详解Python中的正则表达式的用法
2015/04/09 Python
5种Python单例模式的实现方式
2016/01/14 Python
深入解析Python编程中super关键字的用法
2016/06/24 Python
基于Python的关键字监控及告警
2017/07/06 Python
python中协程实现TCP连接的实例分析
2018/10/14 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
2020/08/07 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
酒店保安领班职务说明书
2014/03/04 职场文书
孝老爱亲模范事迹材料
2014/05/25 职场文书
纪念9.18事变演讲稿
2014/09/14 职场文书
四风问题个人自查剖析材料思想汇报
2014/09/21 职场文书
2019年市场部个人述职报告(三篇)
2019/10/23 职场文书
Python实现GIF动图以及视频卡通化详解
2021/12/06 Python