【前言】

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

  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. 什么是内部类? Static Nested Class 和 Inner Class的不同?

    内部类就是在一个类的内部定义的类,内部类中不能定义静态成员. 内部类作为其外部类的一个成员,因此内部类可以直接访问外部类的成员.但有一点需要指出:静态成员不能访问非静态成员,因此静态内部类不能访问外部 ...

  2. String是基本数据类型吗?

    基本数据类型包括byte.short.int.long.char.float.double和boolean.String不是基本类型.String是引用类型. 而且java.lang.String类是 ...

  3. kafka的message格式是什么样的?

    一个Kafka的Message由一个固定长度的header和一个变长的消息体body组成 header部分由一个字节的magic(文件格式)和四个字节的CRC32(用于判断body消息体是否正常)构成 ...

  4. 什么叫线程安全?servlet 是线程安全吗?

    线程安全是编程中的术语,指某个函数.函数库在多线程环境中被调用时,能够 正确地处理多个线程之间的共享变量,使程序功能正确完成. Servlet 不是线程安全的,servlet 是单实例多线程的,当多个 ...

  5. ACL 权限控制机制 ?

    UGO(User/Group/Others) 目前在 Linux/Unix 文件系统中使用,也是使用最广泛的权限控制方式.是一种粗 粒度的文件系统权限控制模式. ACL(Access Control ...

  6. MyBatis Plus 2.3 个人笔记-01-代码生成器

    sb_mybatis_puls2.3 <?xml version="1.0" encoding="UTF-8"?> <project xmln ...

  7. Linux内核, 编译一个自己的内核

      本文,我们将一步一步地介绍如何从源代码编译和安装一个Linux内核.需要注意的是本指导基于Ubuntu 20.04版本编译安装,其它发行版可能会有差异. 在前面文章中我们反复提到过Linux内核, ...

  8. MTK平台电路设计01

    一.资料 获取途径MTK官网.一牛网 二.

  9. ES6-11学习笔记--数组的扩展

    类数组 / 伪数组 Array.from() Array.of() copyWithin() fill() includes()   类数组.伪数组例子: let divs = document.ge ...

  10. Java/C++实现装饰模式---模拟手机功能的升级过程

    用装饰模式模拟手机功能的升级过程:简单的手机(SimplePhone)在接收来电时,会发出声音提醒主人:而JarPhone除了声音还能振动:更高级的手机(ComplexPhone)除了声音.振动外,还 ...