在Application.cfm中切换邮件服务器

时间:2012-08-10 16:32:39

标签: coldfusion smtp coldfusion-9 application.cfm

我们使用coldfusion 9,并使用我们网站用来发送电子邮件的个人SMTP帐户发送限制。我希望在两台服务器之间切换,具体取决于它的时间。

<cfif timeformat(now(),'HH:mm:ss') GT '12:00:00' >
  <cfset email.username="foo@bar.com" />
  <cfset email.password="s3cr3t" />
<cfelse>
  <cfset email.username="baz@bar.com" />
  <cfset email.password="s3cr3t2" />
</cfif>

我想在Application.cfm(我们不使用cfc)中执行此操作,而不必修改任何cfmail代码......

2 个答案:

答案 0 :(得分:2)

如果您想在每台服务器之间拆分电子邮件量,我建议保留一个值,告诉您下一步要使用哪台服务器:

这将放在你的appplication文件中。

    <cfscript>
        // get this hour
        ThisHour = hour(now());
        ServerOneHours = "1,3,5,7,9,11,13,15,17,19,21,23";
        if (listFind(ServerOneHours, ThisHour) gt 0) {
          application.email.username = "foo@bar.com";
          application.email.password = "s3cr3t";
        } else {
          application.email.username = "foo@ffooodoijdbar.com";
          application.email.password = "s3cr6516516513t";
        } 
    </cfscript>
</cffunction>

每当使用cfmail时,它都会使用当前设置:

<cfmail username="#application.email.username#" 
    password="#application.email.password#">

答案 1 :(得分:1)

如果所有cfmail标记都使用cf admin中存储的身份验证,则可以使用ServiceFactoryMailSpooler在运行时更改应用中的设置。

var mss = createObject('java','coldfusion.server.ServiceFactory').getMailSpoolService();
mss.setServer('you-mail-server-host-or-ip');
mss.setUsername('you-mail-server-username');
mss.setPassword('you-mail-server-password');

您可以使用get()方法返回设置:

var mss = createObject('java','coldfusion.server.ServiceFactory').getMailSpoolService();
var host = mss.getServer();
var user = mss.getUsername();
var pass = mss.getPassword();

getPassword()返回加密的密码。每次设置密码时,它都会使用新的盐。

如果要自动在服务器之间切换,请创建一个计划任务,在超出时或按预定义的时间间隔检查配额和交换机。