首页 > 解决方案 > 如何从 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)

标签: pythonmailx

解决方案


您正在构建一个命令字符串,并且变量中有字符串参数,所以将这些东西放在一起。我会使用格式

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)

推荐阅读