可以选择SMTP服务器从Python向我发送电子邮件以进行日志记录

时间:2014-05-11 22:25:19

标签: python email logging smtp

Python日志库提供了一个名为" SMTPHandler"的类。这将让我自己通过电子邮件发送日志记录命令的输出。我在a (possibly old) website for the library上找到的一些示例代码下面贴了一些。我可以修改它以使其与gmail或我的ISP作为SMTP服务器一起使用,但两种情况都需要我的密码。我目前知道两种可能的解决方案:

  1. 我可以对我的密码进行硬编码,我不想这样做,因为这段代码可以找到云修订控制服务器。
  2. 我可以在我的机器上的文本文件中提交密码并让我的代码读取它,这看起来很难看。使用more effort我可以将密码存储为加密的,而不是明文。
  3. 我正在使用Mac,我可以通过在命令行上运行mail来发送电子邮件,并收到电子邮件。我不知道mail正在做什么,但它可以从Mac Mail从中读取它的同一个地方获取我的SMTP服务器详细信息,然后使用外部SMTP服务器。我尝试设置MAILHOST =" localhost"在下面的Python代码中并且没有用。

    是否有比#1或#2更好的方式将这些电子邮件发送到我的Gmail地址?

    import logging, logging.handlers
    
    MAILHOST = 'beta'
    FROM     = 'log_test5@yourdomain.com'
    TO       = ['arkadi_renko']
    SUBJECT  = 'Test Logging email from Python logging module (non-buffering)'
    
    def main():
        log = logging.getLogger("")
        log.setLevel(logging.DEBUG)
        hdlr = logging.handlers.SMTPHandler(MAILHOST, FROM, TO, SUBJECT)
        hdlr.setFormatter(logging.Formatter("%(asctime)s %(levelname)-5s %(message)s"))
        log.addHandler(hdlr)
        log.info("Test email contents")
        log.removeHandler(hdlr)
    
    if __name__ == "__main__":
        main()
    

1 个答案:

答案 0 :(得分:2)

我需要做同样的事情。您可以尝试smtplib。像

这样的东西
import smtplib
from email.mime.text import MIMEText

msg = MIMEText('YOUR_MESSAGE_BODY')
me = 'YOUR_SOURCE@EMAIL.COM'
you = 'YOUR_TARGET@EMAIL.COM'
msg['Subject'] = 'YOUR_MESSAGE_SUBJECT'
msg['From'] = me
msg['To'] = you
s = smtplib.SMTP('localhost')
s.sendmail(me, [you], msg.as_string())
s.quit()

不涉及密码。

如果您遇到

等错误
...    
error: [Errno 61] Connection refused

这可能意味着您没有在Mac上安装或启用smtp服务器,安装postfix(例如来自macports)应该解决这个问题。