发送确认电子邮件,SQS或SNS aws?

时间:2016-07-13 08:42:10

标签: java email amazon-web-services message-queue

我有一个用户可以注册的Web应用程序 我需要向他们发送一封确认电子邮件(最后是短信),在这种情况下,最好将SQS与beanstalk工作进程或SNS一起使用吗?

两者有什么优势吗?

2 个答案:

答案 0 :(得分:0)

SNS和SES有时可能会混淆用例。就像名字一样,SNS用于通知,可以通过电子邮件,推送通知,短信等,而SES仅用于电子邮件。

对于SNS,用户应订阅一个主题,并在更新时从该主题接收更新。因此,对于SNS,他需要确认hist订阅以接收来自该主题的电子邮件。在SES中,用户可以接收交易或促销电子邮件,这是您的使用案例。

一种好的方法是使用AWS Lambda在用户注册时向用户发送带有SES的确认电子邮件。

要在不要求用户注册的情况下使用SES发送电子邮件,首先需要创建AWS的支持服务单以增加使用限制。然后,您只需要注册发件人电子邮件。

之后,创建一个AWS Lambda函数并添加一个角色,允许它使用SES发送电子邮件,这是一个示例代码,用于使用带有node.js的SES和Lambda发送电子邮件:

var AWS = require('aws-sdk');

exports.handler = (event, context, callback) => {

    var ses = new AWS.SES({
        apiVersion: '2010-12-01'
    });

    var email = event['email'];
    var email_text = '<body><h5>Hello, World!</h5></body>';

    ses.sendEmail({
            Source: 'My Email <myemail@example.com>',
            Destination: {
                ToAddresses: [email]
            },
            Message: {
                Body: {
                    Html: {
                        Data: email_text
                    },
                    Text: {
                        Data: email_text
                    }
                },
                Subject: {
                    Data: 'Confirmation'
                }
            }

        }, function (err, data) {
            if (err) {
                callback(null, err);
            } else {
                callback(null, 'ok');
            }

        });
}

如果稍后您需要发送SNS以获取任何类型的更新,那么您应该让用户订阅SNS主题并使用该服务。

答案 1 :(得分:0)

这取决于您要发送的电子邮件数量。如果有很多电子邮件,那么最好将这些电子邮件放到SQS队列中进行处理。然后,工作人员可以从队列中使用并使用SES将电子邮件消息发送给用户。

如果您只发送了一些电子邮件且影响性能不够,那么您可以使用SES直接从您的应用程序发送电子邮件。

您不需要将用户的电话号码订阅到SNS主题,以便能够向该号码发送SMS消息[1]。因此,当您想要在用户注册时发送SMS消息时,您只需修改SQS队列处理器(或应用程序)以将SMS消息发送给用户。

[1] http://docs.aws.amazon.com/sns/latest/dg/SMSMessages.html