Python 用SMTP发送邮件

摘要:
我的gmail使用SMTP_SSL(),因此代码如下:smtpServer='mtp。gmail公司。com‘server=smtplib SMTP_由于SSL可能有异常错误,请尝试…except可用于处理,例如:importsmtplib,syssmtpServer='mtp。gmail公司。com“try:server=smtplib.SMTP_SSL#返回SMTP类,因此服务器是SMTP类的实例,exceptConnectionRejectedError:printsys.exit3.使用SMTP.login登录到邮箱帐户,例如user='”myUserName@gmail.com'passwd='***'服务器。登录描述文档中可能的异常。最长的异常是smtp.SMTPAuthenticationError.importsmtplib,sys,getpasssmtpServer='smtp.gmail.com'user='myUserName@gmail.com'passwd=getpass.getpass()try:server=smtplib.SMTP_SSLexceptConnectionRejectedError:printsys.extry:server.loginexceptsmtp.SMTP.SMTPAuthenticationError:pringsys.ext4。有两种方法可以发送邮件,SMTP.send_message()和SMTP.sendmail()

一、简介
  上面介绍了传统邮件的生成和解析,这些都是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发送邮件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇非root用户启动tomcatGB2312编码(为什么要加2020H、8080H,外码→内码→交换码→字形码)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

我与Python惺惺相惜

while循环 死循环,会一直一直的重复循环.True的首字母要大写. while True: print("我与世界格格不入,我只与你惺惺相惜") count = 1 while count <=5: print("我与世界各格格不入,我只与你惺惺相惜") count = count + 1 解析: count=1,进行判断1小于等于5条件成立...

Python Twisted 学习系列21(转载stulife最棒的Twisted入门教程)

第二十一部分 惰性不是迟缓: Twisted和Haskell 简介 在上一个部分我们对比了Twisted与 Erlang,并将注意力集中在它们共有的一些思想上.结果表明使用Erlang也是非常简便的,因为异步I/O和反应式编程是Erlang运行时和进程模型的关键元素. 今天我们想走得更远一点,去看一看 Haskell —— 另一种功能性语言,然而与Erla...

吾八哥学Selenium(四):操作下拉框select标签的方法

我们在做web页面自动化测试的时候会经常遇到<select></select>标签的下拉框,那么在Python里如何实现去操作这种控件呢?今天就给大家分享一下这个玩法。为了让大家学习更方便,我准备了一个测试页面。 测试的html页面代码为: <html> <head> <title>学Python...

linux下执行python错误: bad interpreter: No such file or directory

 /usr/bin/python^M: bad interpreter: No such file or directory python文件编码格式问题,需要将dos文件格式修改为unix文件格式,修改方法如下: 用如下命令查看文件格式 :set ff 或 :set fileformat 可以看到如下信息 fileformat=dos 或 filefor...

centos83+django3.1+ASGI+nginx部署.

上一篇,在windows下尝试使用ASGI部署django3.1,部署失败一半,为什么说失败一半呢?因为按照官方文档, Gunicorn是在生产环境中运行和管理Uvicorn的最简单方法, 但是比如用 gunicorn -w 4 -k uvicorn.workers.UvicornWorker 以四个工作进程启动Gunicorn的时候,UvicornWor...

The Python Challenge 谜题全解(持续更新)

Python Challenge(0-2) The Python Challengehttp://www.pythonchallenge.com/ 是个很有意思的网站,可以磨练使用python的技巧,每一关都有挑战,要编写相应的代码算出关键词,才可以获取下一关的url,还是很好玩的QAQ LEVEL 0 显然是计算图片中的(2^{38}),结果为2748...