python基于SMTP协议发送邮件

本文实例为大家分享了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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python SMTP发送邮件遇到的一些问题及解决办法

    Python练习内容: SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮件. Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件. 首先,我们来构造一个最简单的纯文本邮件: from email.mime.text import MIMEText msg = MIMEText('hello, send by Python...', 'plain', 'utf-8') 注意到构

  • python3利用smtplib通过qq邮箱发送邮件方法示例

    前言 本文主要给大家介绍了关于python3 smtplib通过qq邮箱发送邮件的相关内容, smtplib模块是smtp简单邮件传输协议客户端的实现,为了通用性,有时候发送邮件的时候要带附件或图片,用email.mime来装载内容. 详细代码参考说明:Python3 SMTP发送邮件 0.了解qq邮箱的SMTP QQ邮箱 POP3 和 SMTP 服务器地址设置如下: 邮箱 POP3服务器(端口995) SMTP服务器(端口465或587) qq.com pop.qq.com smtp.qq.c

  • python中使用smtplib和email模块发送邮件实例

    SMTP模块 这么多已定义的类中,我们最常用的的还是smtplib.SMTP类,就具体看看该类的用法:smtp实例封装一个smtp连接,它支持所有的SMTP和ESMTP操作指令,如果host和port参数被定义,则smtp会在初始化期间自动调用connect()方法,如果connect()方法失败,则会触发SMTPConnectError异常,timeout参数设置了超时时间.在一般的调用过程中,应该遵connetc().sendmail().quit()步骤. SMTP模块主要方法 下面我们来

  • python利用smtplib实现QQ邮箱发送邮件

    python的smtplib提供了一种很方便的途径发送电子邮件.它对smtp协议进行了简单的封装. 下面是一个利用smtplib,实现QQ邮箱发送邮件的例子. 首先必须要打开QQ邮箱的smtp服务,在QQ邮箱个人主页的  设置-账户 中开启.如图: 成功开启后点击生成授权码 ,得到的密码为smtp发送邮件时的登录密码. 一个发送邮件的简单实例: from smtplib import SMTP_SSL from email.mime.text import MIMEText from email

  • python3使用smtplib实现发送邮件功能

    在之前的工作中,业务方做了一些调整,提出了对一部分核心指标做更细致的拆分并定期产出的需求.出于某些原因,这部分数据不太方便在报表上呈现,因此就考虑通过邮件的方式定期给业务方发送数据. 当时本来使用的是linux自带的mail命令来实现,然而某一天开始,突然发现服务器上的邮件服务不可用了,于是就将脚本迁移到本地,并准备使用Python3中的smtplib搭配crontab来实现. 首先,我们需要导入Python3标准库中的smtplib包和email包来实现邮件的构造和发送. import smt

  • Python 使用SMTP发送邮件的代码小结

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. python的smtplib提供了一种很方便的途径发送电子邮件.它对smtp协议进行了简单的封装. Python创建 SMTP 对象语法如下: import smtplib smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] ) 参数说明: host: SMTP 服务器

  • python3实现163邮箱SMTP发送邮件

    SMTP协议 首先了解SMTP(简单邮件传输协议),邮件传送代理程序使用SMTP协议来发送电邮到接收者的邮件服务器.SMTP协议只能用来发送邮件,不能用来接收邮件,而大多数的邮件发送服务器都是使用SMTP协议.SMTP协议的默认TCP端口号是25. 发送邮件之前的配置: 上面说了是使用SMTP协议发送的邮件,所以需要先查看你的发件人邮箱是否有开启SMTP协议,如没有,则需要开启,我测试使用的是163.com的邮箱作为发信人邮箱,在设置中开启SMTP协议如下图所示.   测试的前提是你需要开通客户

  • Python实现SMTP发送邮件详细教程

    简介 Python发送邮件的教程本人在网站搜索的时候搜索出来了一大堆,但是都是说了一大堆原理然后就推出了实现代码,我测试用给出的代码进行发送邮件时都不成功,后面找了很久才找到原因,这都是没有一个详细的环境调试导致,所以今天特出一个详细的教程,一步一步从环境调试到代码实现整一个教程,希望对还在苦苦寻找解决方法却迟迟不能得到有效解决的人员一点帮助. SMTP协议 首先了解SMTP(简单邮件传输协议),邮件传送代理程序使用SMTP协议来发送电邮到接收者的邮件服务器.SMTP协议只能用来发送邮件,不能用

  • 用smtplib和email封装python发送邮件模块类分享

    复制代码 代码如下: #!/usr/bin/python# encoding=utf-8# Filename: send_email.pyfrom email.mime.image import MIMEImagefrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMEText  import smtplib class SendEmail:    # 构造函数:初始化基本信息    def __

  • Python基于smtplib实现异步发送邮件服务

    基于smtplib包制作而成,但在实践中发现一个不知道算不算是smtplib留的一个坑,在网络断开的情况下发送邮件时会抛出一个socket.gaierror的异常,但是smtplib中并没有捕获这个异常,导致程序会因这个异常终止,因此代码中针对这部分的异常进行处理,确保不会异常终止. #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'Zoa Chou' # see http://www.mudoom.com/Article/s

随机推荐