2012-04-12 152 views
1

假設我在page.cfm上有以下腳本。每次有人來到page.cfm,電子郵件都會發送給我。所以如果有1000人來到page.cfm,我會收到1000封電子郵件。ColdFusion限制爲每天發送5封電子郵件

<cfmail to="[email protected]" 
from="[email protected]" 
subject="Error" 
type="text"> 
A person visited. 
</cfmail> 

我想限制它,所以我只收到第一個5人在一天內訪問的電子郵件。

因此,如果2人今日訪問,我會收到2封電子郵件。如果有5人訪問,我會得到5,但如果有100人訪問,我仍然只能收到5封電子郵件。然後週期繼續第二天(如果2人訪問只有2封電子郵件發送,但如果100人訪問只發送5封電子郵件)

我怎樣才能用ColdFusion做到這一點? (不cfschedule)

+0

爲什麼不直接設置Google Analytics?每隔一段時間在網上檢查一次。似乎電子郵件將是一個討厭的,如果你沒有對他們做任何事情? – 2012-04-22 23:24:25

回答

7

最簡單我能想到的方法是在一對應用程序變量中放置一個計數器和一個日期戳記。

然後,對於每個請求,檢查您記錄的日期。如果不是今天,請將計數器變量重置爲1並將日期重新設置爲今天。

然後,在您放置cfmail標籤的位置,檢查計數器是否已達到您的限制。如果沒有,發送郵件。無論哪種方式,增加計數器。

在的Application.cfc onApplicationStart():

<cfset application.alertDate = now()> 
<cfset application.alertCount = 1> 

(以上是主要是爲了確保以後使用時存在的變量)

在的Application.cfc onRequestStart():

<cfif dateCompare(application.alertDate,now(),"d") EQ -1)> 
    <cfset application.alertCount = 1> 
    <cfset application.alertDate = now()> 
</cfif> 

In page.cfm:

<cfset application.alertCount++> 
<cfif application.alertCount LTE 5> 
    <cfmail ... > 
</cfif> 
+0

你能告訴我這是怎麼完成的? – Mike 2012-04-12 18:45:48

+4

你能用標準英語嗎?這真的很基本。這不是偶然的家庭作業,是嗎? – ale 2012-04-12 18:46:48

+0

對不起,速記。這不是一項家庭作業,它是針對我網站上的錯誤處理腳本。出現錯誤時,我會遇到數千封電子郵件。我覺得5足夠提醒。非常感謝您的幫助。 – Mike 2012-04-12 18:58:20

2

Store中應用程序範圍內訪問/電子郵件數,每天重置應用範圍由要麼

  1. Store中應用範圍的最後一個訪問者日期,以及和 加一些邏輯復位計數,或

  2. 使用cfscheduler到數每天重置爲0

0

晚會到了,我不能評論以前的答案,所以我會這樣做。兩個給出的答案都可以工作,但是您確實需要知道,如果應用程序結束,那些應用程序範圍變量將消失並重新初始化。如果它對你很重要,你會希望將值保存在某個地方,像使用getProfileString/setProfileString訪問的INI文件可以工作,或者是數據庫中的表。