我想使用用户名和随机生成的密码生成帐户。 然而。我无法发送多行邮件。 显示我的问题的最小代码是:
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+ [...]
但是这不能解决问题。
有什么建议吗?
答案 0 :(得分:2)
您需要将正文和主题用引号引起来。如果您使用f弦琴更容易
cmd = f"echo '{body}' | mail -s '{subject}' -r '{fromAddr}' '{toAddr}'"
请注意,您需要确保任何参数中都没有引号字符-确保您在密码中不允许使用单引号。
答案 1 :(得分:2)
您真的想避免Barmar的答案出现各种引用问题。如果您的Python足够新,就可以
send = subprocess.call(
['mail', '-s', subject, '-r', fromAddr, toAddr],
input=body, text=True)
在Python 3.7之前,您需要将text=True
替换为较旧的,更不清楚的别名universal_newlines=True
。 input
参数可能是在Python 3.3中引入的。有关如何在旧版本中执行类似操作的idas,以及更详细的讨论,请参见Running Bash commands in Python