python_发送邮件

在上代码之前,我想有必要了解一下相关的邮件协议,原谅我要贴wiki了~

SMTP:

简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 是事实上的在Internet传输email的标准。
SMTP是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。可以很简单地通过telnet程序来测试一个SMTP服务器。SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX (Mail eXchange) DNS。
SMTP是一个“推”的协议,它不允许根据需要从远程服务器上“拉”来消息。要做到这点,邮件客户端必须使用POP3或IMAP。另一个SMTP服务器可以使用ETRN在SMTP上触发一个发送。

POP3:

POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。

IMAP:

IMAP全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。

好啦,在了解基本的邮件协议之后,接下来就是代码实现了,这里我们使用腾讯的邮件服务器,smtp.qq.com, 使用我的QQ邮箱做测试,这里我我们要先保证账户的Imap/Smtp已经打开,

这里写图片描述

如果没有打开,点击后面的开启,这一步会有验证并且生成授权码,QQ邮箱的授权码可以后很多个,这里QQ邮箱提示说没必要记住,可是我还是忍不住的记笔记了~哈哈

把授权码放进我们的代码

#coding:utf-8
import smtplib
from getpass import getpass

from email.mime.text import MIMEText
from email.header import Header

try:
    # 使用ssl连接,默认的端口号是465 
    # smtp.qq.com 是腾讯的邮件服务器
    smtp = smtplib.SMTP_SSL("smtp.qq.com",port=465)
    # qq 邮箱账号
    username = "**********@qq.com"
    # 你刚才生成的授权码
    password = "****************"
    smtp.login(username,password)
         smtp.sendmail("***********(sender)@qq.com","**********(recipients)@163.com","(发送的内容)test")
except Exception as e:
    print(e.args)

这里千万不要用你的QQ邮箱密码登陆啊,肯定会验证失败的,不支持使用原始密码登陆啊。只能使用授权码代替,保证安全。。。。。。。

我之前就是一直在使用原始密码的,撞墙撞得要死了~

原文地址:https://www.cnblogs.com/pjCoder/p/5596772.html