Say I have the following script on page.cfm. Everytime somebody comes to page.cfm, an e-mail is sent to me. So if 1000 people come to page.cfm, I get 1000 e-mails.
<cfmail to="joe@smith.com"
from="error@smith.com"
subject="Error"
type="text">
A person visited.
</cfmail>
I would like to limit it so I only get e-mails when the first 5 people visit in one day.
So if 2 people visit today, I get 2 e-mails. if 5 people visit I get 5, but if 100 people visit, I still get only 5 e-mails. And then the cycle continues the next day (if 2 people visit only 2 e-mails are send, but if 100 people visit only 5 e-mails are sent)
How can I do this with ColdFusion only? (without cfschedule)
The simplest way I can think of is to put a counter and a date stamp in a pair of Application variables.
Then, for each request, check the date you've recorded. If it's not today, reset the counter variable to 1 and re-set the date to today.
Then, where you're putting the cfmail tag, do a check to see if the counter has reached your limit. If not, send the mail. Either way, increment the counter.
In Application.cfc onApplicationStart():
<cfset application.alertDate = now()>
<cfset application.alertCount = 1>
(the above is mostly to ensure that the variables exist when used later)
In 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>