2011-05-17 24 views
6

我有一個簡單的用戶註冊表單,可以讓用戶每天收到電子郵件通知,如果他們的任何項目都有活動的話......就像Stack Overflow有一個「每天通知[email protected]任何新答案」。如何在PHP中向用戶發送每日電子郵件通知?

我在LAMP環境中實現這個目前的想法是:

  1. 在用戶數據庫中,如果用戶希望每天收到的電子郵件設置一個布爾值。

  2. 如果有任何項目活動,項目將使用當前時間戳更新。

  3. 每晚(午夜),執行一個PHP文件(可能通過cron作業),掃描項目數據庫以確定哪些項目當天有活動。對於具有活動的項目,選擇項目所有者名稱並掃描用戶表以檢查用戶是否希望收到每日電子郵件通知。如果是,則添加到收件人列表;否則,忽略。

問題/顧慮我有將不勝感激之前,我開始實施一些指導:

  1. 我在共享宿主環境。我需要採取哪些預防措施,以避免被託管公司或接收郵件服務器誤認爲垃圾郵件?

  2. 我是否需要「收集」收件人列表(每次發送50封電子郵件)並向每個組發送電子郵件?這就像睡覺一樣簡單(30);每次調用郵件()之間?

  3. 我正在使用CodeIgniter框架,並將cron作業調用控制器中的相應功能以在午夜運行此功能。如何限制僅來自cron作業的調用,以防止某些未經授權的用戶從瀏覽器調用此函數?

謝謝。

回答

1
  1. 如果你確實在php中改變了「From」標題,請確保將其更改爲在該服務器上託管的域。當b.com的服務器發送mail @ a.com時,它看起來很可疑。

  2. 我會單獨發送電子郵件foreach ($Users as $User)...,因爲這允許您個性化電子郵件內容。即使您現在不需要個性化電子郵件,也可能稍後需要,並且在您需要時,它的支持已經存在。

  3. 首先,我將腳本存儲在web根目錄之外。我不確定CodeIgniter是否可以讓你這樣做,但是Apache不需要這個腳本。 Cron不關心腳本的存儲位置。另外,我已經檢查了腳本執行的時間。如果不是午夜,那麼不要發送電子郵件。此外,你可以保持一個日誌周圍,並檢查確保電子郵件尚未發送前一天發送。

+0

Re。 #3:我假設我在webroot上面保留了一個PHP文件,CodeIgniter真的不應該在意。我也可以讓cron坐在webroot之上,並調用掃描數據庫的PHP腳本,建立收件人列表,然後在午夜發送電子郵件給每個用戶。沒有? – zee 2011-05-18 13:33:02

+0

Cron作爲一個Linux程序運行,因此它可以訪問它所運行的用戶所訪問的每個文件。 – 2011-05-18 15:49:16

1

1)與SPF記錄和DKIM開始,如果你可以讓郵件服務器知道會從您的服務器

2)首先,你需要把收件人的BCC字段,使其沒有電子郵件每個用戶的系統上有49個其他用戶的電子郵件地址。更進一步的是分別完成每封電子郵件,只將收件人放在TO字段中。這種方法也可以讓你的每封電子郵件定製用戶(也許投入「你好[名]」。

3)有cron作業這樣的事情 wget http://localhost/send-emails

然後在你的腳本,檢查$_SERVER並確保您只允許來自127.0.0.1的請求

1

關於第三個問題:您可以使用.htaccess文件來阻止訪問該特定頁面,也可以使用命令行參數在cron中調用腳本並檢查該變量在$argv

1

1)SPF記錄是最重要的。使用來自域名的電子郵件so [email protected],其中whatever.com擁有正確設置的SPF記錄。

2)節制電子郵件總是很好,尤其是當第一次出發時。你應該檢查你的共享服務器策略,通常是200-500 /小時。計算出來的秒數。例如,每12秒鐘300次/小時。在發送好的郵件數週後,您應該可以發送更多的郵件。

3)您可以將cron文件放在webroot之外或通過.htaccess或其他方法限制訪問。

+0

Re。 #1:我在一個共享主機帳戶上,並擁有一些我自己的域名託管(我相信無數其他人也駐留在同一臺機器上)。如果我在DNS中爲mydomain.com設置SPF記錄,那足夠了嗎? SPF記錄是接收郵件服務器檢查以確定電子郵件是否爲垃圾郵件的一件事情? – zee 2011-05-18 13:36:19

+0

最好是獲得一個通常每月幾塊錢的專用IP,或者根據軟件包的不同有時可以免費使用,但如果您不需要這些,通常只需正確設置SPF記錄即可。 SPF是垃圾郵件設置中的一個重要因素。您仍然需要確保您的內容是合法的,並且您沒有使用太多的垃圾郵件關鍵字/短語,但要確保SPF記錄與服務器發送相匹配,這是告訴接收郵件服務器郵件合法的重要部分。 – fanfavorite 2011-05-18 14:40:27

相關問題