使用meteor js成功注册用户后发送电子邮件

时间:2016-01-28 13:10:16

标签: javascript email meteor meteor-accounts

我想将电子邮件功能添加到我的应用程序中。我已添加电子邮件包,并按照提供的documentation

执行了相应的步骤

我想当用户注册时,成功注册后应该发送一封电子邮件。

以下是我的尝试:

服务器/ smtp.js:

Meteor.startup(function () {
  smtp = {
    username: 'abc@gmail.com',   // eg: server@gentlenode.com
    password: 'abc123',   // eg: 3eeP1gtizk5eziohfervU
    server:   'smtp.gmail.com',  // eg: mail.gandi.net
    port: 25
  }

  process.env.MAIL_URL = 'smtp://' + encodeURIComponent(smtp.username) + ':' + encodeURIComponent(smtp.password) + '@' + encodeURIComponent(smtp.server) + ':' + smtp.port;
});

这是我的server / emp_details.js,我调用了方法。以下代码放在Meteor.methods()

sendEmail: function (to, from, subject, text) {
    check([to, from, subject, text], [String]);

    // Let other method calls from the same client start running,
    // without waiting for the email sending to complete.
    this.unblock();

    //actual email sending method
    Email.send({
      to: to,
      from: from,
      subject: subject,
      text: text
    });
  }

最后我在客户端调用了该方法,如下所示:

Template.register.onRendered(function()
{
    var validator = $('.register').validate({
        submitHandler: function(event)
        {
            var email = $('[name=email]').val();
            var password = $('[name=password]').val();
            var empProfile = Session.get('profileImage');
            console.log(empProfile);
            Accounts.createUser({
                email: email,
                password: password,
                profile: {
                    name:'test',
                    image: empProfile
                },
                function(error)
                {
                    if(error)
                    {
                        if(error.reason == "Email already exists.")
                        {
                            validator.showErrors({
                                email: "This email already belongs to a registered user"
                            });
                        }
                    }
                    else
                    {
                        Meteor.call('sendEmail',
                        'alice@example.com',
                        'abc@example.com',
                        'Hello from Meteor!',
                        'This is a test of Email.send.');
                        Router.go("home");
                    }
                }
            });
        }
    });
});

我不知道如何正确使用此电子邮件功能。

1 个答案:

答案 0 :(得分:4)

我可以建议一个替代解决方案吗?在服务器端向Accounts.onCreateUser()添加一个钩子以发送电子邮件:

Accounts.onCreateUser(function (options, user) {
    Meteor.call(
        'sendEmail', 
        'admin@yoursite.com',
        user.profile.email, //use the path to the users email in their profile
        'Hello from Meteor!',
        'This is a test of Email.send.'
    );
});

你真的在使用Gmail吗?谷歌的SMTP端口是465我相信,而不是25.确认您的电子邮件发送在流星之外使用该配置,然后在Meteor中尝试。我也相信谷歌将通过SMTP发送的电子邮件数量限制为每天99个,所以要小心。如果您要验证用户的电子邮件地址,请使用accounts包中的内置电子邮件验证系统。