python - 通过 Pythons 子进程使用换行符和 Linux 邮件命令发送邮件

标签 python linux bash unix

我想使用用户名和随机生成的密码生成帐户。 然而。我无法发送多行邮件。 显示我的问题的最小代码是:

import subprocess
import string

username = Test
randomPassword = abcabc
fromAddr='test@example.com'
toAddr='receive@example.com'
subject='Test Mail'
body='Your Username is ' + username + '\n'+'Your Password is' + randomPassword
cmd='echo '+body+' | mail -s '+subject+' -r '+fromAddr+' '+toAddr
send=subprocess.call(cmd,shell=True)

错误是:

mail: cannot send message: process exited with a non-zero status

/var/log/mail.err 显示以下内容

[SERVERNAME] sSMTP[9002]: RCPT TO:<[SUBJECT]@[SERVERNAME]> (Domain does not exist: [SERVERNME])

我发现的一个建议是使用

cmd='echo -e ' +body+ [...] 

但这并没有解决问题。

有什么建议吗?

最佳答案

您需要将正文和主题放在引号中。如果使用 f 弦会更容易

cmd  = f"echo '{body}' | mail -s '{subject}' -r '{fromAddr}' '{toAddr}'"

请注意,您需要确保任何参数中都没有引号字符——确保您不允许在密码中使用单引号。

关于python - 通过 Pythons 子进程使用换行符和 Linux 邮件命令发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57047787/

相关文章:

javascript输入另一个程序要求的密码

java - jmap 崩溃并显示 "can not get class data for"

linux - 如何从 bash 中的 wget 命令返回文件路径?

python - ValueError : When feeding symbolic tensors to a model, 我们希望张量具有静态批量大小

python - 如何在两个不同的列上合并两个 pandas 数据框,这些列的元素不按顺序排列?

python - 使用 boolean 掩码 : how to? 为 numpy 数组赋值

linux - Shell 脚本 - tar 命令将存档名称误认为是目录

python - python中的递归排序

bash - 如果匹配,则打印 awk 中的列,如果不匹配,则仍然打印该行(没有该列)

regex - Linux命令行从文本中提取名称