使用Meteor和Mailgun恢复密码

时间:2015-12-31 13:37:04

标签: javascript meteor mailgun forgot-password

我在我自己的用户帐户系统中工作,它几乎已经完成......但我现在的问题是恢复/忘记模块....

我已经按照本教程reset password with Meteor进行了操作,但是当我在忘记密码表单中提交邮件时,邮件不会被发送。

我使用Mailgun作为邮件服务器。我没有收到任何错误的控制台(我得到我的自定义消息,“电子邮件已发送。请检查您的邮箱。”)。

我认为Accounts.forgotPassword方法和错误函数工作正常,因为如果我尝试输入错误的邮件,或者更改我的process.env.MAIL_URL变量进行身份验证,则Accounts.forgotPassword会正确显示错误...但我的问题即使函数说我已正确发送邮件,也不会发送忘记邮件。

邮件服务器工作正常,因为当我测试通过控制台发送邮件到我的Mailgun服务器时,邮件被正确发送。

我已经检查了我的Mailgun仪表板,我没有看到发送的邮件......

有什么建议吗?在此先感谢新年快乐! 这是我的代码

CLIENT js

val group = whereRdd.map(collection => collection.getLong("location_id") -> collection.getInt("feel"))
  .groupByKey
  .map(grouped => grouped._1 -> Map(
    "data" -> grouped._2.toSet,
    "sum" -> grouped._2.toSet.sum,
    "amount" -> grouped._2.toSet.size,
    "avg" -> grouped._2.toSet.sum.asInstanceOf[Int] / grouped._2.toSet.size
  ))

group.foreach(g => println(g))

SERVER js

(193809797319052,Map(data -> Set(5, 10, 25, -99, 99, 15, 100), sum -> 155, amount -> 7, avg -> 22))

HTML

//config reset password
if (Accounts._resetPasswordToken) {
  Session.set('resetPassword', Accounts._resetPasswordToken);
}

Template.ResetPassword.helpers({
 resetPassword: function(){
  return Session.get('resetPassword');
  }
});

Template.ResetPassword.events({
  'submit .resetPasswordForm': function(e, t) {
    e.preventDefault();
    var resetPasswordForm = $(e.currentTarget),
        password = resetPasswordForm.find('#resetPasswordPassword').val(),
        passwordConfirm = resetPasswordForm.find('#resetPasswordPasswordConfirm').val();
        Accounts.resetPassword(Session.get('resetPassword'), password, function(err) {
        if (err) {
          console.log('We are sorry but something went wrong.');
        } else {
          console.log('Your password has been changed. Welcome back!');
          Session.set('resetPassword', null);
        }
      });
    return false;
  }
});

Template.ForgotPassword.events({
  'submit .ForgotPasswordForm': function(e, t) {
    e.preventDefault();

    var forgotPasswordForm = $(e.currentTarget),
        email = forgotPasswordForm.find('#forgotPasswordEmail').val().toLowerCase();

      Accounts.forgotPassword({email: email}, function(err) {
        if (err) {
          if (err.message === 'User not found [403]') {
            console.log('This email does not exist.');
          } else {
            console.log('We are sorry but something went wrong.');
          }
        } else {
            console.log('Email Sent. Check your mailbox.');
            console.log(email);
        }
      });

    return false;
  },
});

1 个答案:

答案 0 :(得分:2)

至少有一个问题是process.env.MAIL_URL必须是uri编码的,并且需要以smtp://开头。此外,我有这个端口设置为465而不是587,但我不久前做了这个,所以也许尝试两个。

试试这个:

smtp = {
    username: 'postmaster@sandbox757c0ce5316a4945a22181bb9b4060e9.mailgun.org',
    password: 'MyPassword',
    server: 'smtp.mailgun.org',
    port: 587
}

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

希望这有帮助。