在dev服务器环境的应用程序中覆盖邮件设置

时间:2013-03-07 19:04:13

标签: coldfusion cfml

我目前正处于构建应用程序的最后阶段,并已要求用户组对应用程序执行生产级使用测试。我的应用程序是一个临时订单管理系统,在保存包含发票的订单时向客户发送电子邮件。

昨天我在做一些测试时遇到了问题;此环境目前包含生产质量数据,包括旧客户记录。我处理了几个订单,忘记了功能,以及我收到订单的客户说收到的订单已经完成。很好,它有效,不好导致这种混乱。

我更喜欢的操作是在应用程序中的某个位置设置一些强制所有电子邮件的内容,无论收件人是谁,都要发送到特定的地址,尽管我愿意只是为了能够将其关闭单独申请。由于需要对处理电子邮件的其他应用程序执行测试但未填充生产质量数据,因此在服务器级别将其关闭不是首选选项。

我是否可以使用任何特定的标记或代码来覆盖应用程序中的服务器设置,以便根据我们识别环境的方式或完全不发送电子邮件的方式将电子邮件发送到某个地址?

2 个答案:

答案 0 :(得分:2)

参考此页: http://cookbooks.adobe.com/post_How_can_I_use_Application_level_SMTP_Server_Settin-16469.html

出于测试目的,您可以将SMTP服务器设置为不存在的IP地址。 cfmail例程仍然有效,coldfusion会将其移动到无法传递的文件夹中。

您可以在其周围添加<cfif>语句,以确定您是在生产URL还是开发URL上,以便它在生产服务器上使用正确的服务器,或者在开发服务器上使用“假”服务器。或者在生产服务器上,有一个开/关变量,可用于通过smtp服务器测试电子邮件或关闭电子邮件并将它们路由到虚假的SMTP服务器。

如果您使用的是8.0或更早版本,则可以为您的邮件服务器设置应用程序级变量,并修改您的cfmail标记以供参考:

<cfmail server="#application.mailserver#" to="" from="" subject="">

答案 1 :(得分:1)

此解决方案假设您使用相同的邮件服务器,但只想将电子邮件交换到测试地址(可能是您的,因此您可以看到结果)。它还假设您的实时服务器名称解析为具有“www.something.somethong”的内容。你的dev / test / qa等服务器没有。

在您的应用程序cfc onApplicationStart()中尝试:

<cfscript>
  if(listFirst(CGI.SERVER_NAME,'.') != 'www') {
    Application.szEmailToTestEnv = 'test@somewhere.com'; // Use your test email here
  }
</cfscript>

然后,您发送电子邮件的位置在您的邮件参数前面有一些逻辑:

<cfscript>
  if(isDefined('Application.szEmailToTestEnv') && len(Application.szEmailToTestEnv)) {
    Variables.szEmailTo = Application.szEmailToTestEnv;
  } else Variables.szEmailTo = Variables.qCustomerEmail;
</cfscript>

然后在你的cfmail中:

<cfmail to="#Variables.szEmailTo#"....

根据需要调整范围和变量名称和值。 基本上,任何不是您的实时网站的“网站”(例如dev.yoursite.com)将使用您在应用启动时设置的测试电子邮件发送电子邮件,并且实时将继续使用正确的客户电子邮件,而不会更改代码之间的代码你的实时和测试代码。