0

我刚刚开始使用 python 通过 gmail 自动发送电子邮件。我已经完成了整个过程,只需直接在命令行中输入,但现在我想自动化这个过程(即定期发送电子邮件)。我已经完成了第一部分的工作,在那里我与 SMTP 服务器建立了连接。

os.system("openssl s_client -starttls smtp -connect smtp.gmail.com:587 -crlf -ign_eof")

现在我想获取它,以便它在该连接中键入并运行以下命令:

os.write("HELO", os.linesep)
os.write("AUTH LOGIN", os.linesep) ... And so on

我已经尝试过使用 write 命令和 os.system 命令,但似乎都没有真正将文本插入到这个窗口中。可能具有更多 linux 和终端技能的人可以提供帮助吗?此外,当所有这些系统进程都在运行时,似乎 time.sleep 不起作用。我怎样才能解决这个问题?

4

2 回答 2

1

我会使用标准库中的 SMTP 客户端实现:http: //docs.python.org/3/library/smtplib

import smtplib
smtp_client = smtplib.SMTP('smtp.gmail.com', 587)
smtp_client.starttls()
smtp_client.login(username, password)

如果您使用 2-factor-authentication,则需要创建一个应用程序特定密码才能使用。

于 2013-05-06T19:43:50.123 回答
0

您应该查看 subprocess 模块以执行您想要的操作。你不能只是“os.write”,你需要“写”到进程的标准输入和输出。

command = ['openssl', 's_client', '-starttls smtp', '-connect smtp.gmail.com:587', '-crlf', '-ign_eof']
p = subprocess.Popen(command, stdin=PIPE) # Success!
p.write("HELO", "MYNAME")

等等

于 2013-05-06T19:40:16.840 回答