当前位置: 首页 > news >正文

Python Flask-Mail环境变量配置

近期在学习《Flask Web开发:基于Python的Web应用开发实战》 一书邮件章节时,在配置上遇到了一个问题,经查阅资料摸索后找到了解决方法。在此总结一下,如大家在学习中有类似疑惑也希望能给大家提供一点帮助。

书中介绍了一种基于环境变量的配置方法,通过将一些敏感数据信息(如邮箱用户名和密码等)以环境变量的形式进行保存,然后使用时再由os模块进行调取。这种配置方法通常使用于开源项目中,以确保信息的安全性且便于系统的管理。

书中具体配置方法

①在 Linux 或 Mac OS X 中使用bash设定环境变量:
(venv) $ export MAIL_USERNAME=<mail username>
(venv) $ export MAIL_PASSWORD=<mail password>
②在Windows 中使用command命令设定环境变量:
(venv) $ set MAIL_USERNAME=<mail username>
(venv) $ set MAIL_PASSWORD=<mail password>

由于本人使用的是windows系统,以此为示例进行演示:

image

这里要注意的是,所配置的属性值是不需要加尖括号<>以及引号的,直接赋值即可,如 set MAIL=abc@example.com

这样一来,按照书中的方法就配置好了,但我们在实际测试发邮件脚本中发现并没有任何效果,后经调试得知环境变量并没有成功配置,通过os调取的是None值,也正是此原因产生了Error

# 测试脚本( send_test.py )
from flask_mail import Message
from hello import *
msg = Message('test subject', sender=app.config['MAIL_USERNAME'],recipients=['other@email.com'])
msg.body = 'text body'
msg.html = '<b>HTML</b> body'
with app.app_context():
    mail.send(msg)

# 查看环境变量值
print(os.environ.get('MAIL_USERNAME'))    # None
print(os.environ.get('MAIL_PASSWORD'))    # None

那这是为什么呢?这还得回到command命令。其实,设置环境变量的命令有两种,一种是set,另一种是setx。这两种长得差不多,其功能差异也不大,但非常关键。

set命令设置环境变量

set设置的环境变量又称为临时环境变量,即其设置的环境变量有效期只在本窗体内,在另一窗体或程序中就自然而然失效了

基本语法:set key=value

setx命令设置环境变量

setx为set的一种升级,其用于设置永久环境变量,即系统环境变量,这样可以确保变量在任何地方都可使用

基本语法:setx key value  (注意没有’=’号)

所以这么一看来,我们如果想通过另一个程序或脚本来发送邮件,需要使用setx设置环境变量:

image

这样一来基本上就可以了,不过本人实测发现结果还是为None值,这也纳闷了,查阅资料发现也没什么问题。后猜想可能是电脑原因,需要重启以“激活”环境变量,结果重启后再次尝试就成功了,如图:

image

当然,其实除了使用命令来配置环境变量外,也可以手动配置:计算机系统/高级系统设置/高级/环境变量,具体配置这里不再详述,不太明白的地方可以自行到网上搜索

image

以上便是本次关于配置flask-mail用户名和密码的一些经验分享,有任何疑问或见解欢迎大家在评论区留言相互学习。

转载于:https://www.cnblogs.com/Unikfox/p/9557790.html

相关文章:

  • 内表生成XML简单实例
  • nginx基础
  • java 编程性能调优
  • 简单实现一个textarea自适应高度
  • 苹果数据记录之详细让人不寒而栗
  • TCP的三次握手(建立连接)和四次挥手(关闭连接)
  • 0基础学习移动端适配
  • 产品经理工作职责
  • 【SpringBoot】URL路径映射规则
  • JavaScript DOM高级程序设计 3.6 实例 将HTML代码转换成DOM代码(附源码)--我要坚持到底!...
  • Java之多线程优先级基础
  • WCF应用场景
  • 基于Netty+Zookeeper+Quartz调度分析
  • 关于Execel 2007 连接到 hive odbc
  • 计算机网络
  • angular2 简述
  • create-react-app做的留言板
  • IP路由与转发
  • npx命令介绍
  • Service Worker
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • Tornado学习笔记(1)
  • 基于遗传算法的优化问题求解
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 深度学习在携程攻略社区的应用
  • 微服务框架lagom
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Python第六天)文件处理
  • (办公)springboot配置aop处理请求.
  • (翻译)terry crowley: 写给程序员
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET委托:一个关于C#的睡前故事
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [BUUCTF NewStarCTF 2023 公开赛道] week4 crypto/pwn
  • [BZOJ3757] 苹果树
  • [C#]DataTable常用操作总结【转】
  • [C#]获取指定文件夹下的所有文件名(递归)
  • [CISCN 2019华东南]Web11
  • [C进阶] 数据在内存中的存储——浮点型篇
  • [Firefly-Linux] RK3568修改控制台DEBUG为普通串口UART
  • [FZSZOJ 1223] 上海红茶馆
  • [gdc19]《战神4》中的全局光照技术
  • [GN] DP学习笔记板子
  • [Labtools 27-1429] XML parser encountered a problem in file
  • [LeetCode] 196. 删除重复的电子邮箱
  • [LOJ161] 仙人掌计数
  • [NHibernate]一对多关系(关联查询)