使用 Meteor 和 Mailgun 恢复密码
Posted
技术标签:
【中文标题】使用 Meteor 和 Mailgun 恢复密码【英文标题】:Recover password with Meteor and Mailgun 【发布时间】:2016-04-05 11:24:19 【问题描述】:我正在使用自己的用户帐户系统,它几乎完成了......但我现在的问题是恢复/忘记模块......
我已经按照这个教程reset password with Meteor,但是当我在忘记密码表单中提交我的邮件时邮件没有发送。
我使用 Mailgun 作为邮件服务器。我没有通过控制台收到任何错误(我收到我的自定义消息“已发送电子邮件。检查您的邮箱。”)。
我认为 Accounts.forgotPassword 方法和错误函数工作正常,因为如果我尝试输入错误的邮件,或者更改我的 process.env.MAIL_URL 变量进行身份验证,Accounts.forgotPassword 会正确处理错误......但我的问题是即使功能告诉我邮件已正确发送,也不会发送忘记邮件。
邮件服务器工作正常,因为当我测试通过控制台向我的 Mailgun 服务器发送邮件时,邮件已正确发送。
我检查了我的 Mailgun 仪表板,但我没有看到发送的邮件...
有什么建议吗?提前致谢,新年快乐!! 这是我的代码
客户端 js
//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;
,
);
服务器 js
process.env.MAIL_URL = 'postmaster@sandbox757c0ce5316a4945a22181bb9b4060e9.mailgun.org:MyPassword@smtp.mailgun.org:587';
HTML
<template name="ForgotPassword">
<div class="modal fade" id="ForgotPassword" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Recover password</h4>
</div>
<div class="modal-body">
<form class="ForgotPasswordForm" method="post">
<p>email: <input id="forgotPasswordEmail" type="text" name="email" placeholder="email"></p>
<button type="submit" class="btn btn-primary" value="Send">Submit</button>
<p>Not a member yet?<a href="#" class="js-register">Join us!</a></p>
</form>
</div>
<div class="modal-footer">
<!--<p><a href="#" class="btn btn-primary">Login with Facebook</a></p>-->
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<!--<button type="submit" value="Register" class="btn btn-primary js-confirm-register">Save changes</button>-->
</div>
</div>
</div>
</div>
</template>
<!-- template reset password -->
<template name="ResetPassword">
#if resetPassword
<form class="resetPasswordForm" method="post">
<input id="resetPasswordPassword" name="password" placeholder="New Password" type="password" >
<input id="resetPasswordPasswordConfirm" name="password-confirm" placeholder="Confirm" type="password" >
<input class="btn-submit" type="submit" value="Reset">
</form>
<!-- end #reset-password-form -->
/if
</template>
【问题讨论】:
【参考方案1】:至少有一个问题是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;
希望这会有所帮助。
【讨论】:
哎呀!!我是个笨蛋!!;)你救了我的命!;)非常感谢。效果很好!正确的 MAIL_URL 最后是 MAIL_URL = 'smtp://postmaster@sandbox757c0ce5316a4945a22181bb9b4060e9.mailgun.org:d4ba89f36403b402f5717fc5e28cb769@smtp.mailgun.org:587';以上是关于使用 Meteor 和 Mailgun 恢复密码的主要内容,如果未能解决你的问题,请参考以下文章