【前言】

在某些项目中,我们需要实现发送邮件的功能,比如:

  1. 爬虫结束后,发送邮件通知
  2. 定时发送邮件提醒待办事项
  3. 某项业务逻辑触发邮件通知

今天我们就分享如何基于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发送邮件的更多相关文章

  1. python学习(21) smtp发送邮件

    原文链接: https://www.jianshu.com/p/369ec15bfe22 本文介绍python发送邮件模块smtplib以及相关MIME模块.smtplib用于生成邮件发送的代理,发送 ...

  2. python基于SMTP发送邮件

    import smtplib from email.header import Header from email.mime.text import MIMEText ''' SMTP是发送邮件的协议 ...

  3. python开发基于SMTP协议的邮件代发服务

    写在这篇文章前照例给大家灌输点名词解释,理论知识,当然已经很熟悉的同学可以往下翻直接看干货 1. 什么是SMTP SMTP即简单传输协议(Simple Mail Transfer Protocol), ...

  4. Python中使用SMTP发送邮件以及POP收取邮件

    假设我们自己的电子邮件地址是from@163.com,对方的电子邮件地址是to@sina.com(这里的地址虚拟的),现在我们用Outlook或者Foxmail之类的软件写好邮件,填上对方的Email ...

  5. python中的SMTP发送邮件

    一. 介绍 python3中自带了smtplib模块和email模块 smtplib模块:负责与邮件服务器的交互 email模块:负责组织邮件内容 二. smtplib模块 smtplib模块:主要是 ...

  6. 使用 phpMailer 基于(SMTP) 发送邮件

    PHPMailer是一个用于发送电子邮件的PHP函数包.它提供的功能包括:在发送邮时指定多个收件人,抄送地址,暗送地址和回复地址.支持多种邮件编码包括:8bit,base64,binary和quote ...

  7. python实战===使用smtp发送邮件的源代码,解决554错误码的问题,更新版!

    import smtplib from email.mime.text import MIMEText from email.header import Header import time #密文输 ...

  8. python通过SMTP发送邮件失败,报错505/535

    python通过SMTP发送邮件失败:错误1:smtplib.SMTPAuthenticationError: (550, b'User has no permission')    我们使用pyth ...

  9. python大法好——Python SMTP发送邮件

    Python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. py ...

随机推荐

  1. Kafka消息是采用Pull模式,还是Push模式?

    Kafka最初考虑的问题是,customer应该从brokes拉取消息还是brokers将消息推送到consumer,也就是pull还push.在这方面,Kafka遵循了一种大部分消息系统共同的传统的 ...

  2. 使用 RabbitMQ 有什么好处?

    (1)服务间高度解耦 (2)异步通信性能高 (3)流量削峰

  3. 在java web工程中jsp页面中使用kindeditor

    在这之前我们用Notepad++写过kindeditor 在Java web工程里也差不多 首先我们复制之前的thml代码粘贴到工程里 然后把样式也复制进去 然后就可以运行了

  4. 4.4 ROS节点名称重名

    4.4 ROS节点名称重名 场景:ROS 中创建的节点是有名称的,C++初始化节点时通过API:ros::init(argc,argv,"xxxx");来定义节点名称,在Pytho ...

  5. 谈谈关于CSS中transform属性之scale

    谈谈关于scale属性 scale是什么? 根据W3C定义 ,scale主要是进行缩放和转化: scale能做什么? 1.1px细线 <div class="wrap"> ...

  6. h4ck47h0n ? h4ck3r ? I"m just a coder......

    [0x00]刚开了专栏,没事过来投投稿混眼熟啦~//才不是为了抱枕呢刚刚结束了黑客马拉松,回来也是缓了好久才缓过来.这么高强度的脑洞劳动···阿不,是脑力劳动的说.真的第一次.说起来,跟代码相识,还是 ...

  7. Flex布局在小程序的使用

    一篇旧文,上手小程序时做的一些探索 Flex布局是一种十分灵活方便的布局方式,目前主流的现代浏览器基本都实现了对Flex布局的完全支持.而在微信小程序中,IOS端使用的渲染引擎WKWebView和安卓 ...

  8. ES7中前端异步特性:async、await。

    在最新的ES7(ES2017)中提出的前端异步特性:async.await. 什么是async.await? async顾名思义是"异步"的意思,async用于声明一个函数是异步的 ...

  9. SpringMVC-获得Restful风格的参数

    使用@PathVariable注解:接收请求路径中占位符的值 @RequestMapping("/report18/{username}") @ResponseBody publi ...

  10. 在Blazor中实现拖放(drag and drop)

    前言 我在实现一个含有待办列表功能的页面时,发现了一个好看的设计,它将待办分为--"待办","正在进行",和"已完成"三种状态,并且将待办通 ...