python实现基于smtp发送邮件
【前言】
在某些项目中,我们需要实现发送邮件的功能,比如:
- 爬虫结束后,发送邮件通知
- 定时发送邮件提醒待办事项
- 某项业务逻辑触发邮件通知
今天我们就分享如何基于smtp借助163邮箱来发送邮件
【实现过程】
163邮箱配置
首先登录163邮箱进行配置(没有请先注册):https://email.163.com/
配置SMTP服务开启(需要发送短信验证码进行开通)

开始编写脚本
新建 email_163.py python脚本
添加 smtp 模块
import smtplib
from email.mime.text import MIMEText
编写代码实现
from datetime import datetime
import smtplib
from email.mime.text import MIMEText
from config import settings as st
def send_mail_plain(receivers, subject, content):
#163邮箱服务器地址
mail_host = 'smtp.163.com'
#163用户名
mail_user = st.mail_user_163
#密码(部分邮箱为授权码)
mail_pass = st.mail_password_163
#邮件发送方邮箱地址
sender = st.mail_sender_163
#邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
receivers = receivers
#邮件内容设置
message = MIMEText(content, 'plain', 'utf-8')
#邮件主题
message['Subject'] = subject
#发送方信息
message['From'] = sender
#接收方信息
message['To'] = receivers[0]
#登录并发送邮件
smtpObj = smtplib.SMTP()
#连接到服务器
smtpObj.connect(mail_host, 25)
#登录到服务器
smtpObj.login(mail_user, mail_pass)
#发送
smtpObj.sendmail(sender, receivers, message.as_string())
#退出
smtpObj.quit()
if __name__ == '__main__':
receivers = ['xxxxx@qq.com']
subject = 'SevenTiny通知'
content = f'这是邮件主体内容!发送时间:{datetime.now()}'
send_mail_plain(receivers, subject, content)
print('Sent successfully!')
说明:
因为我这里用了配置文件的方式填充账号密码,这样可以避免在项目中硬编码账号密码,降低泄露风险
如果需要了解配置文件的方式,请参考:https://www.cnblogs.com/7tiny/p/16211724.html
我们需要配置如下几个关键参数:
- 163用户名
mail_user = "xxxxx@163.com" - 密码(部分邮箱为授权码)
mail_pass = "开通smtp服务时,163邮箱设置弹出的授权码(只会弹出一次,如果忘记重新配置)" - 邮件发送方邮箱地址
sender = "xxxxx@163.com"
然后填写接收邮箱,主题,内容即可(这部分参考代码参数传递即可,非常简单)
【测试】
我们运行脚本,可以看到收到发送成功的日志

我们打开163邮箱查看已发送邮箱,可以已发送邮箱中有我们刚才发送的邮件

打开接收方qq邮箱(也可以是其他邮箱)查看是否正确收到邮件

可以看到我们已经正确收到了刚才发送的邮件!
【总结】
我们已经通过 python smtp 模块借助163邮箱实现简单的邮件发送,如果是自建邮箱服务器,需要自行将163邮箱服务器地址替换成自己邮箱服务器地址:mail_host = 'smtp.163.com'
注意:163服务器作为发送方,每天有50封邮件上限! 如果超出数量会发送失败。
【源码地址】
https://github.com/sevenTiny/CodeArts/blob/master/Python/Mail/email_163.py
python实现基于smtp发送邮件的更多相关文章
- python学习(21) smtp发送邮件
原文链接: https://www.jianshu.com/p/369ec15bfe22 本文介绍python发送邮件模块smtplib以及相关MIME模块.smtplib用于生成邮件发送的代理,发送 ...
- python基于SMTP发送邮件
import smtplib from email.header import Header from email.mime.text import MIMEText ''' SMTP是发送邮件的协议 ...
- python开发基于SMTP协议的邮件代发服务
写在这篇文章前照例给大家灌输点名词解释,理论知识,当然已经很熟悉的同学可以往下翻直接看干货 1. 什么是SMTP SMTP即简单传输协议(Simple Mail Transfer Protocol), ...
- Python中使用SMTP发送邮件以及POP收取邮件
假设我们自己的电子邮件地址是from@163.com,对方的电子邮件地址是to@sina.com(这里的地址虚拟的),现在我们用Outlook或者Foxmail之类的软件写好邮件,填上对方的Email ...
- python中的SMTP发送邮件
一. 介绍 python3中自带了smtplib模块和email模块 smtplib模块:负责与邮件服务器的交互 email模块:负责组织邮件内容 二. smtplib模块 smtplib模块:主要是 ...
- 使用 phpMailer 基于(SMTP) 发送邮件
PHPMailer是一个用于发送电子邮件的PHP函数包.它提供的功能包括:在发送邮时指定多个收件人,抄送地址,暗送地址和回复地址.支持多种邮件编码包括:8bit,base64,binary和quote ...
- python实战===使用smtp发送邮件的源代码,解决554错误码的问题,更新版!
import smtplib from email.mime.text import MIMEText from email.header import Header import time #密文输 ...
- python通过SMTP发送邮件失败,报错505/535
python通过SMTP发送邮件失败:错误1:smtplib.SMTPAuthenticationError: (550, b'User has no permission') 我们使用pyth ...
- python大法好——Python SMTP发送邮件
Python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. py ...
随机推荐
- Java并发机制(5)--同步容器与并发容器
Java并发编程:同步容器整理自:博客园-海子-http://www.cnblogs.com/dolphin0520/p/3933404.html1.同步容器出现原因 常用的ArrayList,Lin ...
- switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
答:在Java 5以前,switch(expr)中,expr只能是byte.short.char.int.从Java 5开始,Java中引入了枚举类型,expr也可以是enum类型,从Java 7开始 ...
- spring-boot -缓存注解
缓存:商品信息放到缓存中间件中, 验证码几秒钟有效也是放在缓存中间件. 缓存规范 交互流程: 如果需要使用jRS107需要导入包: java.cache.cache-api JSR107提供的是接口, ...
- 解决MySQL报错ERROR 2002 (HY000)
今天在为新的业务线搭架数据库后,在启动的时候报错 root@qsbilldatahis-db01:/usr/local/mysql/bin# ./mysql ERROR 2002 (HY000): C ...
- 学习Docker(一)
一.docker介绍 docker是半虚拟化,比完全虚拟化性能高,可以使用物理机性能100% Docker 镜像(Images): 用于创建 Docker 容器的模板 Docker 容器(Contai ...
- 学习GlusterFS(九)
环境说明: 3台机器安装 GlusterFS 组成一个集群. 使用 docker volume plugin GlusterFS 服务器: 10.6.0.140 10.6.0.192 10.6.0.1 ...
- Goland环境配置——Goland上的第一个Go语言程序
安装好goland后,开始编写一个简单程序测试环境是否可用. 新建项目:按File-new-project进入如图new project界面,在Go一栏内的Location里填写项目路径(D:\GOO ...
- Markdown语法2
二 . 低频使用的语法 下面是相对用得少的markdown语法,但也值得学习学习. 10.区块(块引用) 要创建块引用,请在段落前添加一个 > 符号: 块引用支持多段落: 块引用支持嵌套,即引 ...
- 攻防世界php_rce
php_rce 进入题目提示为ThinkPHP V5 遇到这种题我们一般去找一下框架的rce漏洞即可,搜索到这样一篇文章 https://www.freebuf.com/articles/web/28 ...
- python爬虫---污言污语网站数据采集
代码: import requests from lxml import etree headers = { "user-agent": "Mozilla/5.0 (Wi ...