python之SMTP发送邮件信息

前言

在做一个爬虫并由邮箱定时推送的小项目时,编程中涉及到了邮箱发送模块,而自己之前又没接触过python的邮箱模块,所以想蹭这个时候一并学了,开启学海无涯之路…

1. SMTP电子邮件协议介绍

目前常用的电子邮件协议有SMTP、POP3、IMAP4,它们都隶属于TCP/IP协议簇,默认状态下,分别通过TCP端口25、110和143建立连接。因为在本文中用的是SMTP电子邮件协议,下面着重介绍下SMTP。

SMTP协议
SMTP的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循SMTP协议的发送邮件服务器。SMTP认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。(来自百度百科

2. python中的SMTP

下面只介绍了发送纯文本格式和HTML格式,下面分别进行发送两种格式邮件的讲解

2.1 发送文本格式的邮件(QQ邮箱为例)

首先导入需要的库或类,smtplib库用来进行邮件连接并发送邮件,MIMEText类对邮件内容及格式进行设置;Header类用于添加一些邮件头信息,比如发件人,收件人,主题等。

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

接下来进行一些初始化,其中MIMEText对象中有三个需要我们设置的参数,一个是正文内容,一个是正文内容的类型,例如:”text/plain”和”text/html”,一个是正文内容的编码。,我这里设置的是文本类型,所以是plain,如下

sender = '[email protected]' #发件人邮箱
receiver = '[email protected]' #收件人邮箱
mail_pass = 'qgncadvnujlychgj' #qq邮箱授权码

#text为邮件正文内容,plain为文本格式,'utf-8'为编码格式
text = 'python 邮件发送测试...'
message = MIMEText(text, 'plain', 'utf-8')

#添加Header信息,From,To,Subject分别为发送者信息,接收者消息和邮件主题
message['From'] = Header(sender, 'utf-8')
message['To'] = Header(receiver, 'utf-8')

subject = 'Python STMP 邮件发送测试'
message['Subject'] = Header(subject, 'utf-8')

qq邮箱授权码获取步骤如下
在这里插入图片描述
在这里插入图片描述
接下来就是调用SMTP进行连接和发送了,如下

try:
    #smtp.xxx.com为邮箱服务类型,25为STMP的端口
    smtpObj = smtplib.SMTP('smtp.qq.com', 25)#smtp.xxx.com为邮箱服务类型,25为STMP
    #smtpObj = smtplib.SMTP_SSL('smtp.xxx.com', 'xxx邮件服务的端口号')     
    
    smtpObj.login(sender, mail_pass)#登录
    smtpObj.sendmail(sender, receiver, message.as_string())#发送
    print ("邮件发送成功")
except smtplib.SMTPException:
    print ("Error: 邮件发送失败")
    

发送文本邮件完整代码和效果如下

#1. 发送文本文件

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

sender = '[email protected]' #发件人邮箱
receiver = '[email protected]' #收件人邮箱
mail_pass = '你自己邮箱的授权码' #qq邮箱授权码

#text为邮件正文内容,plain为文本格式,'utf-8'为编码格式
text = 'python 邮件发送测试...'
message = MIMEText(text, 'plain', 'utf-8')

#添加Header信息,From,To,Subject分别为发送者信息,接收者消息和邮件主题
message['From'] = Header(sender, 'utf-8')
message['To'] = Header(receiver, 'utf-8')

subject = 'Python STMP 邮件发送测试'
message['Subject'] = Header(subject, 'utf-8')


try:
    #smtp.xxx.com为邮箱服务类型,25为STMP的端口
    smtpObj = smtplib.SMTP('smtp.qq.com', 25)#smtp.xxx.com为邮箱服务类型,25为STMP
    #smtpObj = smtplib.SMTP_SSL('smtp.xxx.com', 'xxx邮件服务的端口号')     
    
    smtpObj.login(sender, mail_pass)#登录
    smtpObj.sendmail(sender, receiver, message.as_string())#发送
    print ("邮件发送成功")
except smtplib.SMTPException:
    print ("Error: 邮件发送失败")


在这里插入图片描述

2.2 发生HTML格式的邮件(QQ邮箱为例)

发送HTML格式的邮件其实很简单,只是把发送的text变为html文本以及将MIMEText对象中文本格式改为html就可以了,如下

html = '''
<p>Python STMP 发生html邮件格式测试。。。</p>
<p><a href='https://www.baidu.com'>这是一个通往百度的链接</a></p>
'''
message = MIMEText(html, 'html', 'utf-8')

如果要同时发给多个人的话,可将receiver设置为一个列表,如下

receiver = ['[email protected]','[email protected]']

发送HTML格式的邮件完整代码和效果如下

#2.发送html格式的邮件

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

sender = '[email protected]'
pass_word = 'qq邮箱授权码'
receiver = '[email protected]'

html = '''
<p>Python STMP 发生html邮件格式测试。。。</p>
<p><a href='https://www.baidu.com'>这是一个通往百度的链接</a></p>
'''

message = MIMEText(html, 'html', 'utf-8')

message['From'] = Header(sender, 'utf-8')
message['To'] = Header(receiver, 'utf-8')

subject = 'Python SMTP 发送html格式邮件 测试'
message['Subject'] = Header(subject, 'utf-8')

try:
    smtp = smtplib.SMTP('smtp.qq.com', 25)
    smtp.login(sender, pass_word)
    smtp.sendmail(sender, receiver, message.as_string())
    print("邮件发送成功")
except smtplib.SMTPException:
    print("Error: 邮件发送失败")
    

在这里插入图片描述

如果有帮助到你,就点个赞吧!

猜你喜欢

转载自blog.csdn.net/qq_44690947/article/details/107549248