为啥我的带有帐户包的 Meteor 应用程序没有发送验证电子邮件?
Posted
技术标签:
【中文标题】为啥我的带有帐户包的 Meteor 应用程序没有发送验证电子邮件?【英文标题】:How come my Meteor app with accounts package is not sending a verification email?为什么我的带有帐户包的 Meteor 应用程序没有发送验证电子邮件? 【发布时间】:2013-08-24 12:01:21 【问题描述】:我正在制作一个流星应用程序,我添加了 mrt accounts-password 包以及 mrt accounts-ui-bootstrap-dropdown。
我已经添加了登录按钮,这样用户就可以创建一个帐户,而且效果很好。我正在使用所有默认值。
在服务器上我有代码:
Accounts.config(
sendVerificationEmail: true,
forbidClientAccountCreation: false
);
当我创建一个新帐户时,服务器控制台会打印:
I20130821-18:31:42.105(-4)? ====== BEGIN MAIL #0 ======
I20130821-18:31:42.106(-4)? MIME-Version: 1.0
I20130821-18:31:42.107(-4)? From: "Meteor Accounts" <no-reply@meteor.com>
I20130821-18:31:42.108(-4)? To: hidden@hidden.edu
I20130821-18:31:42.108(-4)? Subject: How to verify email address on localhost:3000
I20130821-18:31:42.109(-4)? Content-Type: text/plain; charset=utf-8
I20130821-18:31:42.109(-4)? Content-Transfer-Encoding: quoted-printable
I20130821-18:31:42.109(-4)? Hello,
I20130821-18:31:42.110(-4)? To verify your account email, simply click the link below.
I20130821-18:31:42.110(-4)? http://localhost:3000/#/verify-email/C2vJeaDLeMkkWmcRY
I20130821-18:31:42.111(-4)? Thanks.
I20130821-18:31:42.111(-4)? ====== END MAIL #0 ======
所以它看起来像是从服务器发送电子邮件,但我从未在收件箱中收到验证电子邮件。而且我试了很多次,已经一个多小时了!我还检查了我的垃圾邮件文件夹。什么给了?
提前致谢
【问题讨论】:
【参考方案1】:要配置MAIL_URL
,别忘了添加核心邮件包:
meteor add email
然后,服务器端:
// server/smtp.js
Meteor.startup(function ()
smtp =
username: 'your_username', // eg: server@gentlenode.com
password: 'your_password', // 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;
);
了解更多:Verify an Email with Meteor Accounts.
【讨论】:
【参考方案2】:请看这里:http://docs.meteor.com/#email
如果未设置 MAIL_URL(例如,在本地运行应用程序时),Email.send 会将消息输出到标准输出
像 Meteor 这样的 Web 服务器不能自己发送电子邮件,它们需要一个 SMTP 服务器来做到这一点。您需要设置一个并使用MAIL_URL
变量进行设置。
【讨论】:
啊,我明白了,所以我要在环境文件中添加 'var MAIL_URL = smtp://USERNAME:PASSWORD@HOST:PORT/' 吗?我从来没有添加到 env 文件中,我该怎么做? 不,您将其设置为环境变量。或者,您可以使用process.env.MAIL_URL = ...
设置它,但这是一种 hacky 方法。
啊,所以要将其设置为环境变量,我只需在终端中输入“export MAIL_URL = smtp://USERNAME:PASSWORD@HOST:PORT/”?这会将它添加到我的本地机器环境中,但是如果我部署到 Heroku,有没有办法在实际的流星项目中包含一个特殊的 .env 文件,该文件只能由 Heroku 服务器读取?
有一个命令:heroku config:set MAIL_URL=...
。您还需要以同样的方式设置ROOT_URL
和很可能BUILDPACK_URL
。
或者,您可以使用命令 MAIL_URL=... meteor
运行您的应用 - 如果您有多个应用,则特别方便。以上是关于为啥我的带有帐户包的 Meteor 应用程序没有发送验证电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章
Angular-Meteor - 如何在基于包的设计中包含 ng 模板?