【前言】

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

  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. JDBC的全称是什么?

    Java DataBase Connectivity,java数据库连接

  2. Spring Bean生命周期回调方法

    参阅官方文档:https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-factory ...

  3. GC日志浅析

    //java 开发环境,使用HotSpot的虚拟机,64位,windows 开发环境 Java HotSpot(TM) 64-Bit Server VM (25.151-b12) for window ...

  4. resion 学习笔记

    resin是一个非常流行的web引用服务器,对servlet和jsp提供了良好的支持,自身采用java开发,支持集群,还支持PHP. resin分为普通版和专业版,主要区别是专业版支持缓存和负载均衡. ...

  5. Java_lambda表达式之"stream流学习,Map学习,collect学习,Conllectors工具类学习"

    Lambda表达式学习 对List<Integer> userIdList = UserList.stream().map(User::getUserId).collect(Collect ...

  6. 在原生CSS中使用变量

    本文首发于我的博客 一直以来,CSS作为一种申明式的样式标记语言,很难像如javascript等命令式编程语言一样通过定义和使用变量的方式来维护和追踪某些状态.后来随着scss,less等CSS预处理 ...

  7. js中DOM事件探究

    事件 纲要 理解事件流 使用事件处理程序 不同的事件类型 javascript和html的交互是通过事件实现的.事件就是文档或浏览器窗口发生的一些特定交互瞬间.可以使用侦听器(事件处理程序)预定事件, ...

  8. CSRF浅析

    概念 CSRF,Cross Site Request Forgery,跨站请求伪造. 为什么跨站的请求需要伪造? 因为浏览器实现了同源策略,这里可以将站和源视为同一个概念. 同源策略 The same ...

  9. Mybatis的简介+简单实现增删改查案例

    @ 目录 总结内容 1. 基本概念 2. Mybatis的使用 需求 配置文件简介 总结 总结内容 1. 基本概念 Mybatis是一款优秀的持久层框架,它支持定制化SQL.存储过程以及高级映射.My ...

  10. 最长非降子序列的N*logN解法

    之前讲到过求最长非降子序列的O(N^2)解法. 链接 这次在原来的基础上介绍一下N*logN解法. 该解法主要是维护一个数组minValue,minValue[i]表示最长上身子序列长度为i的数的最小 ...