Use the real email API to send real email.

This commit is contained in:
Nick Martin
2012-08-17 16:33:00 -07:00
parent 910adda358
commit 41dff26890
6 changed files with 42 additions and 36 deletions

View File

@@ -1,9 +1,11 @@
Meteor.accounts.emailTemplates = {
from: "Meteor Accounts <no-reply@meteor.com>",
resetPassword: {
subject: function(user) {
return "How to reset your password on " + Meteor.absoluteUrl();
},
message: function(user, url) {
text: function(user, url) {
var greeting = user.name ? ("Hello " + user.name + ",") : "Hello,";
return greeting + "\n"
+ "\n"
@@ -18,7 +20,7 @@ Meteor.accounts.emailTemplates = {
subject: function(user) {
return "How to validate your account email on " + Meteor.absoluteUrl();
},
message: function(user, url) {
text: function(user, url) {
var greeting = user.name ? ("Hello " + user.name + ",") : "Hello,";
return greeting + "\n"
+ "\n"
@@ -33,7 +35,7 @@ Meteor.accounts.emailTemplates = {
subject: function(user) {
return "An account has been created for you on " + Meteor.absoluteUrl();
},
message: function(user, url) {
text: function(user, url) {
var greeting = user.name ? ("Hello " + user.name + ",") : "Hello,";
return greeting + "\n"
+ "\n"

View File

@@ -129,8 +129,10 @@
}));
},
function (test, expect) {
test.equal(Meteor.user().emails[1].email, email3);
test.isFalse(Meteor.user().emails[1].validated);
Meteor.default_connection.onQuiesce(expect(function () {
test.equal(Meteor.user().emails[1].email, email3);
test.isTrue(Meteor.user().emails[1].validated);
}));
},
function (test, expect) {
Meteor.logout(expect(function (error) {
@@ -173,6 +175,8 @@
Meteor.enrollAccount(enrollAccountToken, 'password', expect(function(error) {
test.isFalse(error);
}));
},
function (test, expect) {
Meteor.default_connection.onQuiesce(expect(function () {
test.equal(Meteor.user().emails.length, 1);
test.equal(Meteor.user().emails[0].email, email4);
@@ -197,4 +201,4 @@
}));
}
]);
}) ();
}) ();

View File

@@ -4,17 +4,18 @@
// the string "intercept", storing them in an array that can then
// be retrieved using the getInterceptedEmails method
//
var oldMeteorMailSend = Meteor.mail.send;
var oldEmailSend = Email.send;
var interceptedEmails = {}; // (email address) -> (array of contents)
Meteor.mail.send = function (email, subject, content) {
if (email.indexOf('intercept') === -1) {
oldMeteorMailSend(email, content);
Email.send = function (options) {
var to = options.to;
if (to.indexOf('intercept') === -1) {
oldEmailSend(options);
} else {
if (!interceptedEmails[email])
interceptedEmails[email] = [];
if (!interceptedEmails[to])
interceptedEmails[to] = [];
interceptedEmails[email].push(content);
interceptedEmails[to].push(options.text);
}
};
@@ -35,4 +36,4 @@
return Meteor.users.findOne(userId);
}
});
}) ();
}) ();

View File

@@ -5,6 +5,7 @@ Package.describe({
Package.on_use(function(api) {
api.use('accounts', ['client', 'server']);
api.use('srp', ['client', 'server']);
api.use('email', ['server']);
api.add_files('email_templates.js', 'server');
api.add_files('passwords_server.js', 'server');

View File

@@ -123,10 +123,11 @@
}});
var resetPasswordUrl = Meteor.accounts.urls.resetPassword(token);
Meteor.mail.send(
email,
Meteor.accounts.emailTemplates.resetPassword.subject(user),
Meteor.accounts.emailTemplates.resetPassword.message(user, resetPasswordUrl));
Email.send({
to: email,
from: Meteor.accounts.emailTemplates.from,
subject: Meteor.accounts.emailTemplates.resetPassword.subject(user),
text: Meteor.accounts.emailTemplates.resetPassword.text(user, resetPasswordUrl)});
},
resetPassword: function (token, newVerifier) {
@@ -213,10 +214,12 @@
var user = Meteor.users.findOne(userId);
var validateEmailUrl = Meteor.accounts.urls.validateEmail(token);
Meteor.mail.send(
email,
Meteor.accounts.emailTemplates.validateEmail.subject(user),
Meteor.accounts.emailTemplates.validateEmail.message(user, validateEmailUrl));
Email.send({
to: email,
from: Meteor.accounts.emailTemplates.from,
subject: Meteor.accounts.emailTemplates.validateEmail.subject(user),
text: Meteor.accounts.emailTemplates.validateEmail.text(user, validateEmailUrl)
});
};
// send the user an email informing them that their account was
@@ -234,10 +237,12 @@
var user = Meteor.users.findOne(userId);
var enrollAccountUrl = Meteor.accounts.urls.enrollAccount(token);
Meteor.mail.send(
email,
Meteor.accounts.emailTemplates.enrollAccount.subject(user),
Meteor.accounts.emailTemplates.enrollAccount.message(user, enrollAccountUrl));
Email.send({
to: email,
from: Meteor.accounts.emailTemplates.from,
subject: Meteor.accounts.emailTemplates.enrollAccount.subject(user),
text: Meteor.accounts.emailTemplates.enrollAccount.text(user, enrollAccountUrl)
});
};
// handler to login with password
@@ -404,10 +409,3 @@
})();
Meteor.mail = {};
Meteor.mail.send = function() {
console.log("Send mail:");
console.log(arguments);
};

View File

@@ -196,11 +196,11 @@ if (Meteor.is_server) (function () {
});
// disable sending emails
var oldMeteorMailSend = Meteor.mail.send;
Meteor.mail.send = function() {};
var oldEmailSend = Email.send;
Email.send = function() {};
var userId = Meteor.createUser({email: email},
{testOnCreateUserHook: true});
Meteor.mail.send = oldMeteorMailSend;
Email.send = oldEmailSend;
test.isTrue(userId);
var user = Meteor.users.findOne(userId);