Email METEOR:无法向多个用户发送电子邮件
当我有新帖子时,我需要通过他们的电子邮件通知所有用户 server/methods.jsEmail METEOR:无法向多个用户发送电子邮件,email,meteor,Email,Meteor,当我有新帖子时,我需要通过他们的电子邮件通知所有用户 server/methods.js Meteor.methods({ sendNewsletter: function(doc) { var pipeline = [ {$group: {_id:"$emails.address"}} ]; var to = Meteor.users.aggregate(pipeline); var text = "Title: " + doc.title +
Meteor.methods({
sendNewsletter: function(doc) {
var pipeline = [
{$group: {_id:"$emails.address"}}
];
var to = Meteor.users.aggregate(pipeline);
var text = "Title: " + doc.title + "\n\n"
+ "Summary: " + doc.summary + "\n\n\n\n"
this.unblock();
// Send the e-mail
Email.send({
to: to,
from: "noreply@domain.com",
subject: "MyApp - " + doc.title,
text: text
});
}
});
在客户端调用sendNewsletter的方法时,我在终端上收到以下警告:
I20151030-04:16:42.039(7)? Exception while invoking method 'sendNewsletter' RecipientError: Can't send mail - all recipients were rejected
I20151030-04:16:42.041(7)? at Object.Future.wait (/Users/user/.meteor/packages/meteor-tool/.1.1.9.1f0n2l1++os.osx.x86_64+web.browser+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:398:15)
I20151030-04:16:42.042(7)? at smtpSend (packages/email/email.js:86:1)
I20151030-04:16:42.042(7)? at Object.Email.send (packages/email/email.js:176:1)
I20151030-04:16:42.043(7)? at maybeAuditArgumentChecks (livedata_server.js:1692:12)
I20151030-04:16:42.043(7)? at livedata_server.js:708:19
I20151030-04:16:42.043(7)? at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1)
I20151030-04:16:42.044(7)? at livedata_server.js:706:40
I20151030-04:16:42.044(7)? at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1)
I20151030-04:16:42.044(7)? at livedata_server.js:704:46
I20151030-04:16:42.044(7)? - - - - -
I20151030-04:16:42.045(7)? at SMTPClient._actionRCPT (/Users/user/.meteor/packages/email/.1.0.7.11df8pa++os+web.browser+web.cordova/npm/node_modules/simplesmtp/lib/client.js:909:27)
I20151030-04:16:42.045(7)? at SMTPClient._onData (/Users/user/.meteor/packages/email/.1.0.7.11df8pa++os+web.browser+web.cordova/npm/node_modules/simplesmtp/lib/client.js:329:29)
I20151030-04:16:42.045(7)? at CleartextStream.emit (events.js:95:17)
I20151030-04:16:42.045(7)? at CleartextStream.<anonymous> (_stream_readable.js:765:14)
I20151030-04:16:42.046(7)? at CleartextStream.emit (events.js:92:17)
I20151030-04:16:42.046(7)? at emitReadable_ (_stream_readable.js:427:10)
I20151030-04:16:42.046(7)? at _stream_readable.js:420:7
I20151030-04:16:42.046(7)? at process._tickCallback (node.js:448:13)
I20151030-04:16:42.039(7)?调用方法“sendNewsletter”RecipientError时出现异常:无法发送邮件-所有收件人均被拒绝
I20151030-04:16:42.041(7)?在Object.Future.wait(/Users/user/.meteor/packages/meteor tool/.1.1.9.1f0n2l1++os.osx.x86_64+web.browser+web.cordova/mt os.osx.x86_64/dev_bundle/server lib/node_modules/fibers/Future.js:398:15)
I20151030-04:16:42.042(7)?在smtpSend(packages/email/email.js:86:1)
I20151030-04:16:42.042(7)?在Object.Email.send(packages/Email/Email.js:176:1)
I20151030-04:16:42.043(7)?在MaybauditArgumentChecks(livedata_server.js:1692:12)
I20151030-04:16:42.043(7)?在livedata_server.js:708:19
I20151030-04:16:42.043(7)?在[object object].\uu.extend.withValue(packages/meteor/dynamics\u nodejs.js:56:1)
I20151030-04:16:42.044(7)?在livedata_server.js:706:40
I20151030-04:16:42.044(7)?在[object object].\uu.extend.withValue(packages/meteor/dynamics\u nodejs.js:56:1)
I20151030-04:16:42.044(7)?在livedata_server.js:704:46
I20151030-04:16:42.044(7)-
I20151030-04:16:42.045(7)?在SMTPClient.\u actionRCPT(/Users/user/.meteor/packages/email/.1.0.7.11df8pa++os+web.browser+web.cordova/npm/node\u modules/simplestp/lib/client.js:909:27)
I20151030-04:16:42.045(7)?在SMTPClient.onData(/Users/user/.meteor/packages/email/.1.0.7.11df8pa++os+web.browser+web.cordova/npm/node_modules/simplestp/lib/client.js:329:29)
I20151030-04:16:42.045(7)?在CleartextStream.emit(events.js:95:17)
I20151030-04:16:42.045(7)?在CleartextStream。(_stream_readable.js:765:14)
I20151030-04:16:42.046(7)?在CleartextStream.emit(events.js:92:17)
I20151030-04:16:42.046(7)?在emitReadable上(_stream_readable.js:427:10)
I20151030-04:16:42.046(7)?at_stream_readable.js:420:7
I20151030-04:16:42.046(7)?在进程中调用(node.js:448:13)
有人知道如何向多个收件人发送电子邮件吗?谢谢,,,,重新编写
服务器/methods.js
文件获取to
变量以保存电子邮件地址数组。
由于Meteor不支持MongoDB中的distinct(尚未),您只需在MongoShell中使用它作为db.users.distinct(“emails.address”)
,就可以了
使用underline.js库、和中的三种方法从用户集合中获取不同的电子邮件地址
首先在光标上使用将返回的流星光标转换为数组。例如:
var users = Users.find({}, { fields: {"emails": true} }).fetch();
然后使用方法通过转换函数(iteratee)映射列表中的每个文档,在另一个数组中生成一个仅包含电子邮件地址值的新数组。定义转换函数如下
var callback = function(doc) {
var emailAddresses = [];
for (var i = 0; i < doc.emails.length; i++) {
emailAddresses.push(doc.emails[i].address);
}
return emailAddresses;
};
var emails = _.map(users, callback);
通过使用来展平阵列,以获得可用的阵列,然后使用方法返回一组独特的阵列,如下所示:
var uniqueEmails = _.uniq(_.flatten(emails));
总之,您的代码现在应该有一个电子邮件地址数组,然后可以发送
Meteor.methods({
sendNewsletter: function(doc) {
var users = Users.find({}, { fields: {"emails": true} }).fetch();
var callback = function(doc) {
var emailAddresses = [];
for (var i = 0; i < doc.emails.length; i++) {
emailAddresses.push(doc.emails[i].address);
}
return emailAddresses;
};
var emails = _.map(users, callback);
var to = _.uniq(_.flatten(emails));
var text = "Title: " + doc.title + "\n\n"
+ "Summary: " + doc.summary + "\n\n\n\n"
this.unblock();
// Send the e-mail
Email.send({
to: to,
from: "noreply@domain.com",
subject: "MyApp - " + doc.title,
text: text
});
}
});
Meteor.methods({
发送通讯:功能(文档){
var users=users.find({},{字段:{“emails”:true}}).fetch();
var callback=函数(doc){
var emailAddresses=[];
对于(var i=0;i
查看下面的演示
var用户=[
{
“_id”:“UKN9MLO3版权所有”,
“电子邮件”:[
{
“地址”:a@a.com",
“已验证”:错误
}
]
},
{
“_id”:“5SXRXRXRARIYHRQACE”,
“电子邮件”:[
{
“地址”:b@a.com",
“已验证”:错误
}
]
},
{
“_id”:“WMHWxeymY4ATWLXjz”,
“电子邮件”:[
{
“地址”:c@a.com",
“已验证”:错误
}
]
}
];
var callback=函数(d){
var emailAddresses=[];
对于(var i=0;i
hi@MichelFloyd。。是的,这就是问题所在。我已经问了这个问题的解决办法:你说的带逗号的字符串是什么意思?哦,没关系。调用“字符串或字符串数组”,这样您就走上了正确的轨道。@KarinaL不用担心,乐意帮助。
Meteor.methods({
sendNewsletter: function(doc) {
var users = Users.find({}, { fields: {"emails": true} }).fetch();
var callback = function(doc) {
var emailAddresses = [];
for (var i = 0; i < doc.emails.length; i++) {
emailAddresses.push(doc.emails[i].address);
}
return emailAddresses;
};
var emails = _.map(users, callback);
var to = _.uniq(_.flatten(emails));
var text = "Title: " + doc.title + "\n\n"
+ "Summary: " + doc.summary + "\n\n\n\n"
this.unblock();
// Send the e-mail
Email.send({
to: to,
from: "noreply@domain.com",
subject: "MyApp - " + doc.title,
text: text
});
}
});