一、简介
  上面介绍了传统邮件的生成和解析,这些都是non-internet,也就是不需要网络就可一完成的。那么当生成了邮件,下一步就是发送了,本文就讲解利用SMTP协议发送邮件。
  正如SMTP(Simple Mail Transfer Protocal)名字一样,只能发送简单邮件。上面讲解就是生成的简单邮件,完全可以通过SMTP协议来发送。

二、SMTP使用方法
  Python是通过smtplib模块来实现SMTP的。关于本模块的详细说明,请参考这里
1. 方法流程
  生成message, 连接你的邮箱smtp服务器,登录自己的邮箱帐号, 发送邮件,退出
2. 连接邮箱smtp服务器
  一般各大公司的smtp邮箱服务器网址都是形如:smtp.example.com,如gmail的为smtp.gmail.com
  连接邮箱smtp服务器使用smtplib.SMTP()和smtplib.SMTP_SSL()方法。SMTP_SSL()方法使用了安全socket层。由于我不求甚解,所以更加详细的说明请见文档。我使用的gmail使用的是SMTP_SSL(),所以代码如下:

smtpServer = 'smtp.gmail.com'
server = smtplib.SMTP_SSL(smtpServer)

  由于可能出现异常错误,所以可以用try...except来处理下,如:

import smtplib, sys

smtpServer = 'smtp.gmail.com'
try:
server = smtplib.SMTP_SSL(smtpServer) #返回SMTP类,所以server是SMTP类的实例
except ConnectionRefusedError:
print('Server connecting failed')
sys.exit(1)

3. 登录自己的邮箱帐号
  利用SMTP.login(user, passwd)登录,如:

user = 'myUserName@gmail.com'
passwd = '***'
server.login(user, passwd)

  在文档中说明了可能出现的异常,最长见的是smtp.SMTPAuthenticationError。另外,passwd也可一通过getpass.getpass()方法获得,这种方法与用户进行交互,用户输入密码,但是不显示,可以保护帐号安全。

import smtplib, sys, getpass

smtpServer = 'smtp.gmail.com'
user = 'myUserName@gmail.com'
passwd = getpass.getpass() try:
server = smtplib.SMTP_SSL(smtpServer)
except ConnectionRefusedError:
print('Server connecting failed')
sys.exit(1) try:
server.login(user, passwd)
except smtp.SMTPAuthenticationError:
print('Antentication failed, please check your username or password')
sys.exit(1)

4. 发送邮件及退出
  SMTP提供了两种方法来发送邮件,分别是:SMTP.send_message(), SMTP.sendmail()。简单来说,第一种发送的就是上一节讲的Message类实例,也就是标准的传统邮件;第二种发送的只是一段文字,也就是Content,不包括其他的。下面通过例子演示一下:

import smtplib, sys, getpass
from email.message import Message smtpServer = 'smtp.gmail.com'
user = 'myUserName@gmail.com'
toAddr = 'toUser@example.com' passwd = getpass.getpass() text = """Hi,
I'm viczzx, this is the message content, reply whenever you saw this.
Thank you!
--viczzx--""" msg = Message()
msg.set_payload(text)
# 其他header省略 try:
server = smtplib.SMTP_SSL(smtpServer)
except ConnectionRefusedError:
print('Server connecting failed')
sys.exit(1) try:
server.login(user, passwd)
except smtp.SMTPAuthenticationError:
print('Antentication failed, please check your username or password')
sys.exit(1)
else:
server.sendmail(user, toAddr, text) #只发送邮件正文
server.send_message(msg, user, toAddr) #发送Message实例
finally:
server.quit() #这是必须的!!!

三、 其他的话
  这个smtp小程序是非常简单的,只是把流程上呈现给大家,不过一般情况下这样就足够了。关于SMTP还有其他很多需要注意的地方,比如各种异常处理,由于我在学习的时候没有出现这些问题,因此就没有特别说明,如果需要,请查看相关文档。

Python 用SMTP发送邮件的更多相关文章

  1. python通过SMTP发送邮件失败,报错505/535

    python通过SMTP发送邮件失败:错误1:smtplib.SMTPAuthenticationError: (550, b'User has no permission')    我们使用pyth ...

  2. Python使用SMTP发送邮件[HTML格式、送带附件]

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. python的smtplib提供了一 ...

  3. Python 通过 SMTP 发送邮件

    Python版本:Python3.5.2 简介 SMTP是发送邮件的协议,Python 内置对 SMTP 的支持,可以发送纯文本邮件.HTML 邮件以及带附件的邮件. Python 对 SMTP 支持 ...

  4. python基于SMTP发送邮件

    import smtplib from email.header import Header from email.mime.text import MIMEText ''' SMTP是发送邮件的协议 ...

  5. Python使用SMTP发送邮件(163,yeah等网易邮箱已测试可以)

    #! /usr/bin/env python# -*- coding: UTF-8 -*-import smtplibfrom email.mime.text import MIMETextmailt ...

  6. python利用smtp发送邮件

    #!/usr/bin/env python # -*- encoding: utf-8 -*- # author:IversOn5 import requests import json import ...

  7. 使用Python通过SMTP发送邮件

    有些业务可能由于各种各样的原因并不适用于Zabbix监控,这时如果要做到系统出问题能立即发送邮件,就需要自己来写监控脚本了,出问题要实时通过邮件报警,以下案例使用Python脚本实现通过SMTP协议发 ...

  8. python使用SMTP发送邮件

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式.SMTP协议属于TCP/IP协议簇,它 ...

  9. python 利用smtp发送邮件,html格式

    def send_mail(to_list, sub, context):#sentmail to the maillist ''' to_list: 发送给谁 sub: 主题 context: 内容 ...

随机推荐

  1. 抓取数据同步备份hive

    1:创建表 CREATE external TABLE `tbl_spider`( `url` string, `html` string ) partitioned by ( `site` stri ...

  2. ASP.NET 5 Web 项目

    在Mac OS X Yosemite 10.10.3 中搭建第一个 ASP.NET 5 Web 项目 终于有时间在 Mac 上安装一下 ASP.NET 5,网上有许多教程,但是多数的时间比较早了,版本 ...

  3. HDU 2612 -Find a way (注重细节BFS)

    主题链接:Find a Way 题目不难,前几天做,当时准备写双向BFS的,后来处理细节上出了点问题,赶上点事搁置了.今天晚上重写的,没用双向,用了两次BFS搜索,和双向BFS 道理差点儿相同.仅仅是 ...

  4. 如何监控第三方应用程序(SOAP or RESTful client)访问HTTPS当数据站点?

    随着越来越多的互联网应用,在我们日常的开发和调试,其中(例如,调试SOAP和RESTFul什么时候),我们经常需要访问工具,通过第三方获取HTTPS网站.为了简化叙述说明,如本文所用,IE浏览器访问G ...

  5. app后端设计(0)--总文件夹

    原文:http://blog.csdn.net/newjueqi/article/details/19003775 做了接近两年app相关的系统架构,api设计,先后在两个创业公司中工作,经历过手机网 ...

  6. Spring该讲座

    看看今天Spring. 国内搞Java开发的朋友们.对Spring一定不会陌生. Spring的历史? 谈起Spring.就会想起Ejb2.0.虽然.现实中有非常多基于Ejb2.0的成功系统,可是Ej ...

  7. C#创建和初始化类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace C_编辑 ...

  8. java 集装箱 arraylist 用法

    1. ArrayList概述: ArrayList 是一个数组队列.相当于 动态数组. 与Java中的数组相比.它的容量能动态增长.它继承于AbstractList.实现了List, RandomAc ...

  9. C语言第12轮:指针

    C语言第12轮:指针 [学习目标] 1.        指针 2.        指针与数组 A: 指针的概念 内存存储单元按字节排序.每一个字节编有序号.我们称之为地址.因为能够通过地址就能够找到所 ...

  10. c#万能视频播放器(附代码)

    原文:c#万能视频播放器(附代码) c#万能视频播放器 本人之前很多的文章中均提到了使用libvlc为播放器内核制作的播放器,也许有些朋友对此感兴趣,于是我用c#写了一个调用libvlc api实现的 ...