我正在尝试通过python的subprocess.run方法发送邮件。不幸的是,它不起作用。
import subprocess
message = "Hello World"
process = subprocess.run(["mail", "-s", "Test, "[email protected]", "<<<", message],
stdout=subprocess.PIPE,
universal_newlines=True)
print (process.stdout)
我收到以下错误:
邮件:无法解析地址<<<' (while expanding
<<
邮件:无法解析地址Hello World' (while expanding
Hello World'):格式错误的电子邮件地址
尽管该命令在外壳中有效(Linux Mint> 19.0)。
<<<
语法是bash的功能。如果要使用它,则需要将命令作为bash shell的参数运行:
import subprocess
message = "Hello World"
command = "mail -s Test [email protected] <<< "+message
process = subprocess.run(
["bash","-c",command],
stdout=subprocess.PIPE,
universal_newlines=True)
print (process.stdout)
但是,在动态内容上使用外壳扩展可能是一个安全问题。更好的方法是使用subprocess.run的输入功能(仅适用于python3)
import subprocess
message = "Hello World"
command = ["mail", "-s", "Test", "[email protected]"]
process = subprocess.run(
command,
input=message,
stdout=subprocess.PIPE,
universal_newlines=True)
print (process.stdout)
另请参阅Python - How do I pass a string into subprocess.Popen (using the stdin argument)?