我正在使用Meteor.js及其标准邮件包来销售团队发送来自不同电子邮件帐户的电子邮件。
我有一个在启动时触发的默认电子邮件设置
Meteor.startup(function ()
{
console.log('Setting default Email') ;
setupEmail( null ) ;
});
然后我将setupEmail函数切换到新设置或默认值,具体取决于传递的参数
setupEmail = function( eName, ePass, eServer, ePort )
{
if( eName )
{
smtp =
{
username: eName ,
password: ePass ,
server: eServer,
port: ePort
}
}
else
{
smtp =
{
username: 'aaaaa@bbbbbbbbbbb.com', // default for mails
password: 'xxxxxxxx',
server: 'yyy.zzz.com',
port: 999
}
}
然后我设置了Email.Send
使用的Process.env MAIL_URL process.env.MAIL_URL = 'smtp://' + encodeURIComponent(smtp.username) + ':' + encodeURIComponent(smtp.password) + '@' + encodeURIComponent(smtp.server) + ':' + smtp.port;
console.log(process.env) ;
return true ;
}
然后在我的应用程序中,我可以切换到调用setupEmail(em,pass,server,port)的用户电子邮件设置。使用Email.send()发送电子邮件,然后将其切换回默认设置setupEmail(null)
var emailSend = function (from, to, cc, sub, msg, emailObj)
{
setupEmail(emailObj.email, emailObj.pass, emailObj.server, emailObj.port ) ;
ret = Email.send({
from: from,
to: to,
cc: cc,
replyTo: to ,
subject: sub,
text: msg
});
setupEmail( null, null, null, null ) ;
return ret ;
}
它似乎有效,但我面临的问题是,切换到用户设置和发送实际电子邮件然后切换回默认设置之间的时间可能会有所不同,来自不同客户端的另一个请求可以进入并尝试发送期望默认设置的电子邮件,当它没有找到它时,会收到错误:收件人错误:无法发送邮件 - 所有收件人都被拒绝了#39;
我可以确保所有Email.Send调用都有一个调用,在调用之前将Process.Env设置为默认值,但认为时间问题会回来。
我想做的是把
全部包含在一个非异步块中,以保证一个接一个地执行,并且没有其他电子邮件发送调用。
也许我可以将所有这些包装成一个单一的流星方法......默认情况下会阻塞{除非我明确地调用this.unblock()} ......这可行吗?
任何人都面临类似的挑战?提前致谢。