1

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

我昨天在做一些测试时遇到了一个问题;此环境当前包含生产质量数据,包括旧客户记录。我处理了一些订单并忘记了功能,我为订单下订单的客户收到了说订单已完成的电子邮件。很好,它起作用了,不好的是它导致了这种混乱。

我更喜欢的操作是在应用程序中的某处设置一些东西,强制所有电子邮件(无论收件人如何)都发送到特定地址,尽管我会满足于仅针对此应用程序将其关闭即可。由于需要对处理电子邮件但未填充生产质量数据的其他应用程序执行测试,因此在服务器级别关闭它不是首选选项。

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

4

2 回答 2

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="">
于 2013-03-07T19:11:43.400 回答
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)都将使用您在应用启动时设置的测试电子邮件发送电子邮件,并且实时将继续使用正确的客户电子邮件,而无需更改代码您的实时和测试代码。

于 2013-03-07T20:41:43.007 回答