2013-05-06 114 views
0

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

我已经尝试了本使用写命令以及在使用os.system命令,但似乎都没有将文本实际插入到此窗口中。可能有更多的Linux和终端技能的人能够帮助这个吗?另外,当所有这些系统进程都在运行时,似乎time.sleep不起作用。我该如何解决这个问题?

+0

Python确实有一个['smtplib'](http://docs.python.org/3/library/smtplib.html#module-smtplib)模块来提供一个SMTP客户端。如果你的目标是使用Python,直接使用'openssl'是没有意义的。 – 2013-05-06 19:44:45

+0

我试过smtplib,但它没有与连接到Gmail。如果您可以提供将建立连接的工作代码,请将其发布,然后我会将其检出。但是,我发现openssl是我甚至能够获得连接的唯一方式。 – 2013-05-06 20:49:33

回答

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) 

,你需要创建特定的应用程序要使用的密码。

+0

我认为gmail与大多数SMTP服务器不同,因为您不能只遵循常规登录步骤。我认为它是专门编码的,所以smtplib不起作用。该代码是否适合你? – 2013-05-06 20:17:45

+0

是的,代码确实对我有用。如果您使用双因素身份验证,则无法使用标准密码,但就是这样。 – 2013-05-06 21:39:27

+0

你可以发布任何堆栈跟踪或使用smtplib得到的错误吗? – 2013-05-06 21:45:55

0

你应该看看子流程模块来做你想做的事情。你不能只是“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") 

+0

出于某种原因,我遇到了stdin = PIPE的问题。除此之外,还有更多吗? – 2013-05-06 20:16:33

+0

尝试subprocess.PIPE而不是PIPE – beiller 2013-05-06 20:35:15

+0

似乎解决这个问题。但写函数返回该错误: 回溯(最近通话最后一个): 文件 “TestGmailConnection.py”,9号线,在 p.write( “HELO”, “MYNAME”) AttributeError的: 'POPEN'对象没有属性'写' 未知选项-starttls smtp 用法:s_client args – 2013-05-06 20:42:35