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 = '3512919120@qq.com' #发件人邮箱
receiver = '3512919120@qq.com' #收件人邮箱
mail_pass = 'axcqgncadvnujlychgj' #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 = '3512919120@qq.com' #发件人邮箱
receiver = '3512919120@qq.com' #收件人邮箱
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 = ['3512919120@qq.com','12646@qq.com']

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

#2.发送html格式的邮件

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

sender = '3512919120@qq.com'
pass_word = 'qq邮箱授权码'
receiver = '3512919120@qq.com'

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: 邮件发送失败")
    

在这里插入图片描述

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

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值