2013-03-07 90 views
1

我目前在構建應用程序的整理階段,並已要求用戶組進行應用生產級測試使用。我的應用程序是一個臨時訂單管理系統,當包含發票的訂單被保存時向客戶發送電子郵件。在應用開發服務器環境覆蓋郵件設置

我遇到了一個問題,當我在做一些測試昨天;此環境當前包含生產質量數據,包括舊客戶記錄。我處理了幾個訂單並忘記了功能,我做了訂單的客戶收到了電子郵件,說明訂單已完成。好,它的工作,不好,它導致這種混亂。

我寧願採取的行動是在應用程序中的某個地方設置一些東西,強制所有電子郵件,而不管收件人,發送到一個特定的地址,但我會解決只是能夠關閉它這個應用程序。關閉它在服務器級別可並不是一個最佳選擇,由於對其他應用程序進行測試這個過程電子郵件的需要,但不符合生產質量的數據填充。

是否有我可以使用的應用程序覆蓋服務器設置爲僅基於我們如何確定我們的環境,或者乾脆不發送電子郵件發送電子郵件到某個地址的任何特殊標誌或代碼?

回答

1

此解決方案假定您使用相同的郵件服務器,但只是想將電子郵件交換到測試地址(也許是你的,這樣你就可以看到結果)。它也假設你的實時服務器名稱解析爲「www.something.somethong」。而你的dev/test/qa等服務器不會。

在應用程序中CFC onApplicationStart()試試這個:

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

然後,您發送電子郵件有一點邏輯的盈郵件PARAM的這樣:

<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),是不是你的直播網站,然後將使用設置在應用程序啓動發送電子郵件和現場測試電子郵件將繼續使用正確的客戶電子郵件,更改代碼您的實時和測試代碼之間。

+0

並非所有條件都適用於我,但我可以修改此代碼以適應我的情況。 – 2013-03-08 13:43:56

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=""> 
+0

儘管William的解決方案更適合我的問題,但我也喜歡這個解決方案,並且可以想象我自己或其他人在不同情況下使用它。 – 2013-03-08 13:45:18