在 Meteor 中使用电子邮件验证注册不起作用?应该怎么做?

Signup with email verification in Meteor not working? How should it be done?

我正在尝试在 Meteor 中创建带有电子邮件验证的自定义注册页面。我想使用 Mandrill 发送验证邮件。在 server 文件夹中,我有一个方法-

addUser: function(user) {
    console.log("Adding User - ", user);
    var userOptions = {
        email: user.email, password: user.password,
        profile: {firstname: user.firstname, lastname: user.lastname}
    };

    var createdUser = Accounts.createUser(userOptions);
    console.log("CreatedUser-", createdUser);
    Accounts.onCreateUser(function(options, createdUser) {
        if (options.profile) {
            createdUser.profile = options.profile;
        }
        else {
            createdUser.profile = {};
        }
        Accounts.sendVerificationEmail(createdUser._id, createdUser.email);
        return createdUser;
    });

Accounts.createUser方法正在插入一条记录,但是邮件没有发出。我还使用 Mandrill smtp 凭据定义了 process.env.MAIL_URL。我厌倦了浏览文档并检查了几个博客,但似乎没有任何效果。如果我删除 createUser() 则用户不会插入 mongo 数据库并且 onCreateUser() 失败并出现异常。我已经阅读了 Meteor 文档,但仍然对 onCreateUser() 的工作原理感到困惑? onCreateUser() 方法将如何获取选项和用户参数?我一直坚持这个,任何 guidance/help 表示赞赏。在经历了关于 Whosebug 的另一个问题之后,我删除了电子邮件 pacakge。我确实已将 wylio:mandrill 添加到项目中。我需要电子邮件包吗?

我认为您只需要像这样设置一个配置设置:

Accounts.config({
  sendVerificationEmail: true
});

如果不设置为true(默认为false),它会将邮件内容输出到服务器控制台,这有利于测试,但显然不利于实际发送邮件。

我会重新添加电子邮件包,我认为您需要它来发送电子邮件。希望对您有所帮助。

为了发送电子邮件,我在服务器端添加了 gmail smtp。一旦我建立了一些动力,稍后会研究山魈。

var smtp = {
    host: "smtp.gmail.com",
    port: "465",
    username: "<your gmail id without @gmail.com>",
    password: "<your password>",
    //ssl: true
};

我为此在 gmail 上创建了一个单独的帐户。为了添加用户,我不得不更改代码。我首先在客户端使用 Accounts.createUser() 创建了用户,然后在服务器端 js.

调用了一个方法来发送具有 Accounts.sendVerificationEmail() 的电子邮件
//client-side
var createdUserId = Accounts.createUser(userOptions, function(error) {
                console.log(error);
}); 
Meteor.call('registerUser', createdUserId);

//Server-side
registerUser: function(createdUserId) {
....
    Accounts.sendVerificationEmail(createdUser._id);
....
}