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将图片转换成excel文档格式
Dec 30 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
Dec 19 Python
django url到views参数传递的实例
Jul 19 Python
pandas通过字典生成dataframe的方法步骤
Jul 23 Python
python利用re,bs4,requests模块获取股票数据
Jul 29 Python
python 实现人和电脑猜拳的示例代码
Mar 02 Python
Python基于模块Paramiko实现SSHv2协议
Apr 28 Python
call在Python中改进数列的实例讲解
Dec 09 Python
Python 中的函数装饰器和闭包详解
Feb 06 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
Mar 03 Python
Pycharm连接远程服务器并远程调试的全过程
Jun 24 Python
python异步的ASGI与Fast Api实现
Jul 16 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实现12306余票查询、价格查询示例
2014/04/17 PHP
php数组索引的Key加引号和不加引号的区别
2014/08/19 PHP
php array_slice 取出数组中的一段序列实例
2016/11/04 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
jquery实现的一个文章自定义分段显示功能
2014/05/23 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
AngularJS入门教程之过滤器用法示例
2016/11/02 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
2016/11/16 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
用JavaScript和jQuery实现瀑布流
2017/03/19 Javascript
微信小程序 flex实现导航实例详解
2017/04/26 Javascript
jQuery实现按比例缩放图片的方法
2017/04/29 jQuery
JavaScript数据结构之双向链表定义与使用方法示例
2017/10/27 Javascript
React中的render何时执行过程
2018/04/13 Javascript
layer弹出层扩展主题的方法
2019/09/11 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
js实现菜单跳转效果
2020/12/11 Javascript
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python封装对象实现时间效果
2020/04/23 Python
Python读写Excel文件方法介绍
2014/11/22 Python
使用70行Python代码实现一个递归下降解析器的教程
2015/04/17 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
使用Python制作微信跳一跳辅助
2018/01/31 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
基于python实现KNN分类算法
2020/04/23 Python
一行Python代码过滤标点符号等特殊字符
2019/08/12 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
python 实现端口扫描工具
2020/12/18 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
办公室秘书岗位职责范本
2014/02/11 职场文书
建房协议书
2014/04/11 职场文书
学习十八大宣传标语
2014/10/09 职场文书
党的群众路线教育实践活动心得体会范文
2014/11/05 职场文书
2016年党员公开承诺书范文
2016/03/24 职场文书
golang中的struct操作
2021/11/11 Golang