如何在 log4js smtp appender 中使用非 SMTP 传输?

How to use non SMTP transport in log4js smtp appender?

如果您阅读 log4js documentation for SMTP appender,您将看到 SMTP 传输的示例,它甚至不能很好地与最新的 nodemailer 一起工作(我在撰写本文时使用的是 nodemailer 1.3.0)。

文档以这种错误的配置为例:

{ "appenders": [
    {
        "type": "smtp",
        "recipients": "foo@bar.com",
        "sendInterval": 60,
        "transport": "SMTP",
        "SMTP": {
            "host": "smtp.gmail.com",
            "secureConnection": true,
            "port": 465,
            "auth": {
                "user": "foo@bar.com",
                "pass": "bar_foo"
            }
        }
    }
] }

如何更改配置以使用 SMTP 以外的传输方式?我想要的是配置 log4js 以与 SendGrid 一起工作。

经过几个小时的反复试验,我找到了解决方案。这是带有控制台和 smtp 附加程序的示例 log4js 配置:

sendgridTransport = require('nodemailer-sendgrid-transport');

log4js.configure({
    appenders: [{
        type: 'console'
    }, {
        type: 'logLevelFilter',
        level: 'ERROR',
        appender: {
            type: 'smtp',
            recipients: 'admin@example.com',
            sender: 'system@example.com',
            sendInterval: 60,
            transport: sendgridTransport({
                auth: {
                    api_user: config.smtpUsername,
                    api_key: config.smtpPassword
                }
            })
        }
    }]
});

您可以以类似的方式使用任何其他交通工具。支持传输是 nodemailer 支持的所有传输(例如:AWS SES、SMTP 等)。请参阅您要使用的传输的文档以了解如何对其进行实例化。