昨天开始QQ的邮件服务器好像不是很稳定,经常断开连接,导致各种通知和告警邮件都发送不出来,花了10分钟加一个备用邮件服务器。代码如下:
setting.py, 20行左右的位置,新增4个.bak的配置。

    "email.server": "smtp.qq.com",
    "email.port": 465,
    "email.username": "",
    "email.password": "",
    "email.server.bak": "smtp.163.com",
    "email.port.bak": 465,
    "email.username.bak": "",
    "email.password.bak": "",
    "email.sender": "",
    "email.receiver": "",

修改vnpy/engine.py, EmailEngine类的run方法,位置差不多在文件的最后面了。

    def run(self) -> None:
        """"""
        while self.active:
            try:
                msg: EmailMessage = self.queue.get(block=True, timeout=1)
                try:
                    with smtplib.SMTP_SSL(
                            SETTINGS["email.server"], SETTINGS["email.port"], timeout=10
                    ) as smtp:
                        smtp.login(
                            SETTINGS["email.username"], SETTINGS["email.password"]
                        )
                        smtp.send_message(msg)
                except:
                    logger.error("邮件服务器错误,使用备用服务器")
                    if SETTINGS.get("email.server.bak", None):
                        with smtplib.SMTP_SSL(
                                SETTINGS["email.server.bak"], SETTINGS["email.port.bak"], timeout=10
                        ) as smtp:
                            smtp.login(
                                SETTINGS["email.username.bak"], SETTINGS["email.password.bak"]
                            )
                            smtp.send_message(msg)
            except Empty:
                pass