Отправить письмо после успешной регистрации пользователя, используя meteor js

Я хочу добавить функциональность электронной почты в свое приложение. Я добавил пакет электронной почты и выполнил шаги в соответствии с предоставленной документацией

Я хочу, чтобы, когда пользователь регистрировался сам, электронное письмо должно быть отправлено после успешной регистрации.

Вот что я попробовал:

сервер /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;
});

Вот мой сервер /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 ответ

Решение

Могу ли я предложить альтернативное решение? Добавьте хук к 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 для Google - 465, я думаю, а не 25. Подтвердите, что отправка вашей электронной почты работает за пределами метеора, используя эту конфигурацию, а затем попытайтесь сделать это в Метеоре. Я также считаю, что Google ограничивает количество писем, отправляемых через SMTP, до 99 в день, поэтому будьте осторожны с этим. Если вы хотите подтвердить адрес электронной почты пользователя, используйте встроенную систему проверки электронной почты в accounts пакет.

Другие вопросы по тегам