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()

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

时间: 2019-05-30

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

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

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

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

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

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

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

python3实现163邮箱SMTP发送邮件

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

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

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

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使用QQ邮箱发送Email的方法实例

前言 其实Python使用QQ邮箱发送Email代码很简单,短短几行代码就可以实现这个功能. 使用到的模块有smtplib和email这个两个模块,关于这两个模块的方法就不多说了.不了解的朋友们可以查看这篇文章:python中使用smtplib和email模块发送邮件实例 我们先说说网上常用的使用这那两个模块发送邮件的方法 代码如下: import smtplib from email.mime.text import MIMEText from email.header import Head

python中执行smtplib失败的处理方法

经测试可用的发送邮件代码: import smtplib from email.mime.text import MIMEText # 第三方 SMTP 服务 mail_host = "smtp.163.com" # SMTP服务器 mail_user = "username" # 用户名 mail_pass = "passwd" # 密码(这里的密码不是登录邮箱密码,而是授权码) sender = 'sender_mail@163.com' #

Python中IP地址处理IPy模块的方法

安装 先下载源码,地址:ps://pypi.python.org/pypi/IPy/">https://pypi.python.org/pypi/IPy/ ,然后解压后使用命令python setup.py install安装. 使用 1.显示IP类型 >>> IP('192.168.1.1').version() 4 >>> IP('::1').version() 6 类似如上所示,通过version方法可以的判断输入的IP是IPv4还是IPv6 .

python 中文件输入输出及os模块对文件系统的操作方法

整理了一下python 中文件的输入输出及主要介绍一些os模块中对文件系统的操作. 文件输入输出 1.内建函数open(file_name,文件打开模式,通用换行符支持),打开文件返回文件对象. 2.对打开文件进行读取时,readline()与readlines()的区别在于是否一次性的读取所有的内容,并将每行的信息作为列表中的一个子项. 例如:文件test.txt中 1,3,4   2,35,6 分别用readline与readlines对其进行读取 r=file_object.readlin

python中的hashlib和base64加密模块使用实例

看到好几位博主通过对模块的各个击破学习python,我也效法一下,本篇说一下python中加密涉及到的模块. hashlib hashlib模块支持的加密算法有md5 sha1 sha224 sha256 sha384 sha512(加密原理请参考此处),使用起来也很简单. 以md5加密为例,有两种方法: 一. 追加模式 代码示例: 复制代码 代码如下: import hashlib #引入hashlib模块    mm = hashlib.md5() #创建一个md5对象  mm.update

Python中的单继承与多继承实例分析

本文实例讲述了Python中的单继承与多继承.分享给大家供大家参考,具体如下: 单继承 一.介绍 Python 同样支持类的继承,如果一种语言不支持继承,类就没有什么意义.派生类的定义如下所示: class DerivedClassName(BaseClassName1): <statement-1> . . . <statement-N> 需要注意圆括号中基类的顺序,若是基类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找基类

对python中基于tcp协议的通信(数据传输)实例讲解

阅读目录 tcp协议:流式协议(以数据流的形式通信传输).安全协议(收发信息都需收到确认信息才能完成收发,是一种双向通道的通信) tcp协议在OSI七层协议中属于传输层,它上承用户层的数据收发,下启网络层.数据链路层.物理层.可以说很多安全数据的传输通信都是基于tcp协议进行的. 为了让tcp通信更加方便需要引入一个socket模块(将网络层.数据链路层.物理层封装的模块),我们只要调用模块中的相关接口就能实现传输层下面的繁琐操作. 简单的tcp协议通信模板:(需要一个服务端和一个客户端) 服务

python中tkinter的应用:修改字体的实例讲解

参考链接:tkinter book font字体的参数有如下6个 family: 字体类别,如'Fixdsys' size: 作为一个整数,以点字体的高度.为了获得字体的n个像素高,使用-n. weight: "BOLD" 表示加粗, "NORMAL" 表示正常大小,默认是NORMAL slant:斜体(默认正常), "NORMAL"表示正常,"ITALIC"表示字体倾斜 underline:下划线,1表示添加下滑线,0表示没

在Python中pandas.DataFrame重置索引名称的实例

例子: 创建DataFrame ### 导入模块 import numpy as np import pandas as pd import matplotlib.pyplot as plt test = pd.DataFrame({'a':[11,22,33],'b':[44,55,66]}) """ a b 0 11 44 1 22 55 2 33 66 """ 更改列名方法一:rename test.rename(columns={'a':