python - 如何从 Python 程序内部调用 linux mailx 命令并使用存储在变量中的值?
问题描述
我正在从 Python 程序内部运行 mailx 命令。该程序在 AWS 的服务器上运行,我正在使用他们的简单电子邮件服务发送电子邮件。
到目前为止,我一直将 SMTP 服务器的 SES 用户名和密码直接硬编码到 Python 脚本中。我现在切换到通过 API 调用 AWS 来获取用户名和密码以提高安全性。
如何使用存储在变量 SESUsername 和 SESPassword 中的用户名和密码来修改 Python 程序以调用 mailx 命令?mailx 命令使用 smtp-auth-user 和 smtp-auth-password 参数。
这是两条 Python 行:
command = "mailx -v -s \"Subject\" -S ssl-verify=ignore -S smtp-auth=login -S smtp=smtps://email-smtp.us-west-2.amazonaws.com:465 -S from=\"A Person<email@domain.com>\" -S replyto=\"Another Person<email2@domain2.com>\" -S smtp-auth-user=XXXXX -S smtp-auth-password=XXXXX -S nss-config-dir=\"/etc/pki/nssdb/\" person3@domain3.com"
subprocess.Popen(command,shell=True)
解决方案
您正在构建一个命令字符串,并且变量中有字符串参数,所以将这些东西放在一起。我会使用格式:
command = "...{}...{}...".format(SESUsername, SESPassword)
subprocess.Popen(command,shell=True)
只要用户名和密码不包含在Popen
. 但是,Popen
确实接受一系列字符串,这在您的情况下更有意义。它将大大提高代码的可读性:
command = ['mailx', '-v', '-s', "Subject",...
'-S', '-smtp-auth-user='+SESUsername,
'-S', 'smtp-auth-password='+SESPassword,
...]
subprocess.Popen(command,shell=True)
推荐阅读
- reactjs - 在哪里将 opencv.js 添加到 react.js 应用程序以及如何将 cv 实例添加到 js 文件中?
- reactjs - 如何访问嵌入式组件的 PropTypes?
- php - 在 PHP 单元测试中处理“新”关键字
- javascript - 等待 Javascript 中的异步 GET 请求
- mysqli - 使用随机数更新电话类型列中的 5500 个字段的脚本
- kotlin - 只有 Kotlin 协程的数据流?
- php - 字段 'subcategorytwo' 还没有默认值,它有带有值的发布数据
- android - 在 Google Play 应用更新的情况下,细分是否相同?
- asp.net-core - 在 ASP .Net Core 构造函数中注入 Amazon S3 服务时出现“调用目标引发异常”错误
- c# - ConfigurationManager.GetConfigurationAsync 无法在 TestServer 中检索身份配置