使用crashmail通过smtp发送电子邮件

Son*_*Son 5 python email sendmail supervisord

我正在尝试通过使用crashmail在进程更改supervisord状态时设置电子邮件发送.对于需要大量设置的默认程序没有运气,我决定使用Python中的一个小脚本,使用SMTP发送电子邮件.sendmail

对于第一次状态更改,这非常有效(我确实收到了一封电子邮件,说明进程状态发生了变化),但之后又停止了工作.我曾试图改变不同的选项supervisord,如buffer_sizeautorestart,但它没有任何效果.

这是我用来触发supervisord状态更改的脚本:

import time

from datetime import datetime

if __name__ == '__main__':
    print(">>>>> STARTING ...", flush=True)
    while True:
        print("sleep now:", datetime.utcnow(), flush=True)
        time.sleep(30)
        raise Exception("meo meo")
Run Code Online (Sandbox Code Playgroud)

这是通过Gmail发送电子邮件的脚本.这个将发送stdin.

#!/usr/bin/env python

import smtplib


def get_server():
    smtpserver = smtplib.SMTP('smtp.gmail.com:587')
    smtpserver.ehlo()
    smtpserver.starttls()
    smtpserver.login("user@gmail.com", "password")
    return smtpserver


if __name__ == '__main__':
    import sys

    data = sys.stdin.read()

    s = get_server()
    s.sendmail('from@gmail.com', ['myemail@fitle.com'], data)
    s.quit()
Run Code Online (Sandbox Code Playgroud)

这是我的 supervisord.conf

[eventlistener:crashmail]
command=crashmail -a -m myemail@gmail.com -s /home/ubuntu/mysendmail.py
events=PROCESS_STATE
buffer_size=102400
autorestart=true
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么?谢谢!

Son*_*Son 2

我将该eventlistener部分移动到一个单独的文件中/etc/supervisor/conf.d(而不是放在 的末尾supervisord.conf),现在一切都按预期工作......