【问题标题】:Sending emails using loopback email connector使用环回电子邮件连接器发送电子邮件
【发布时间】:2019-07-27 01:36:51
【问题描述】:

我正在尝试使用loopback-email-connector 发送电子邮件。我想设置 2 个电子邮件帐户。我在datasources.json 中执行以下操作。

"emails": {
        "name": "emails",
        "connector": "mail",
        "transports": [
            {
                "type": "smtp",
                "host": "smtp.yandex.com",
                "secure": true,
                "port": 465,
                "tls": {
                    "rejectUnauthorized": false
                },
                "auth": {
                    "user": "a1@abc.com",
                    "pass": "password"
                }
            },
            {
                "type": "smtp",
                "host": "smtp.yandex.com",
                "secure": true,
                "port": 465,
                "tls": {
                    "rejectUnauthorized": false
                },
                "auth": {
                    "user": "a2@abc.com",
                    "pass": "password"
                }
            }
        ]
    }

在上述情况下,我添加了 2 个电子邮件帐户 - a1@abc.coma2@abc.com。 要发送电子邮件,我正在执行以下操作:

app.models.Email.send({
      to: 'foo@bar.com',
      from: 'a1@abc.com',
      subject: 'my subject',
      text: 'my text',
      html: 'my <em>html</em>'
    }, function(err, mail) {
      console.log('email sent!');
      cb(err);
    });

这是成功发送电子邮件。但是如果我从电子邮件中使用a2@abc.com,它就不起作用。我收到以下错误:

Error: Mail command failed: 553 5.7.1 Sender address rejected: not owned by auth user.

但如果我移动,a2@abc.com 作为 datasources.json 中的第一封电子邮件,它可以工作。 事实上,无论哪个电子邮件在datasources.json 中排在第一位,只有那个有效,第二个无效。在这种情况下如何设置多个电子邮件 ID?

【问题讨论】:

    标签: loopbackjs loopback


    【解决方案1】:

    我能够找到一种不涉及为每封电子邮件创建多个数据源的方法。

    为每个传输设置alias 会分配一个别名,该别名可在发送电子邮件时使用。针对上述问题,我们可以做如下操作:

    "emails": {
            "name": "emails",
            "connector": "mail",
            "transports": [
                {
                    "type": "smtp",
                    "host": "smtp.yandex.com",
                    "secure": true,
                    "port": 465,
                    "alias": "a1",
                    "tls": {
                        "rejectUnauthorized": false
                    },
                    "auth": {
                        "user": "a1@abc.com",
                        "pass": "password"
                    }
                },
                {
                    "type": "smtp",
                    "host": "smtp.yandex.com",
                    "secure": true,
                    "port": 465,
                    "alias": "a2",
                    "tls": {
                        "rejectUnauthorized": false
                    },
                    "auth": {
                        "user": "a2@abc.com",
                        "pass": "password"
                    }
                }
            ]
        }
    

    如上设置alias后,发送邮件,我们可以使用alias作为传输。

    app.models.Email.send({
          to: 'foo@bar.com',
          from: 'a1@abc.com',
          subject: 'my subject',
          text: 'my text',
          html: 'my <em>html</em>',
          transport: "a1"
        }, function(err, mail) {
          console.log('email sent!');
          cb(err);
        });
    

    在上面的示例中,我设置了a1 别名,并通过将传输设置为a1 来发送电子邮件。这很好用。

    【讨论】:

      【解决方案2】:

      邮件服务器拒绝您的电子邮件,因为您尝试发送的邮件与您的电子邮件选项不同。

      只需尝试使用您的邮件a2@abc.com 更新a1@abc.com,如下所示:-

      app.models.Email.send({
        to: 'foo@bar.com',
        from: 'a2@abc.com',
        subject: 'my subject',
        text: 'my text',
        html: 'my <em>html</em>'
      }, function(err, mail) {
        console.log('email sent!');
        cb(err);
      });
      

      您必须在传输配置和“从-到”电子邮件中保留相同的电子邮件 ID。

      【讨论】:

      • 您好,感谢您的回复,但如果您阅读了我的问题,那就是我要问的。我在 datasources.json 中添加了 2 封电子邮件,a1 和 a2,列表中的第一个能够发送邮件。我希望他们两个都能工作。
      【解决方案3】:

      请执行以下步骤:

      1) 创建 2 个不同的数据源,使用不同的名称并为每个数据源添加单个 emailId。您已经创建了一个数据源,只需从中删除一个 emailId 并附加到另一个。

      2)通过命令lb model创建一个新模型(例如TestMail),设置一个要附加的数据源用于发送邮件。

      3)现在您有两个模型,一个Email 和另一个TestMail,现在只需将send() 与您所需的邮件模型一起使用。

      这对我有用!

      【讨论】:

      • 感谢 Shubham,但我通过在每个传输对象中设置 alias 找到了更好的解决方案。例如:alias: "a1" 要发送电子邮件,我只需发送一个带有alias 名称的传输密钥。这样,我就不需要创建其他数据源了。
      • 这个方案听起来不错,能不能有demo。我只是想通过最好的最佳解决方案。
      • 我在上面添加了完整代码的答案。请看一下。谢谢
      猜你喜欢
      • 1970-01-01
      • 2016-04-17
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多