我需要創建一個PHP類,將電子郵件發送給網站的所有成員。簡單的mysql_fetch_array和循環不適合,因爲我的客戶想要一個類,而我實際上對類和他確切需要的知之甚少。你能解釋還是給我提示?如何向班級的所有網站成員發送電子郵件?
回答
一般來說,我們不能告訴你你的客戶想要什麼。你必須問他。 :)但是發送大量電子郵件的幾個一般指針。
將電子郵件類放在一起時,要注意的最敏感的事情以及最不可能的原因是發送郵件的數量。 mail()
是發送郵件的非常緩慢的命令,如果您有成千上萬的成員,純粹的mail()
解決方案可能會失敗,因爲PHP腳本的運行時間通常限制爲30或60秒。
查看電子郵件類,如PHPMailer,可以通過SMTP直接發送,這是更快的方式。
此外請務必檢查發送郵件的服務器是否對每個間隔的傳出電子郵件數量有任何限制。如果您使用託管服務提供商,請先與他們交談。這也很好,因爲他們知道你不會濫用他們的服務器來發送垃圾郵件。
務必在實際開始發送給實際成員之前進行測試運行。
此外請確保您即將離任的電子郵件看起來o.k.從技術上講,所以他們不會被垃圾郵件過濾。請參閱this question瞭解幾點。
有關面向對象編程的基礎知識,請參閱關於這個問題的PHP Manual。
通常,在郵件系統上工作時要非常小心。確保你有足夠的支票阻止實際的發送到實際的成員之前,一切都按順序。想象一下,讓十個「asafafsd」測試電子郵件發送給收件人列表中的每個人是多麼令人尷尬。
不要忘記,有付費服務可以做到這一點。如果涉及一些預算,並且您希望使用現有的付費解決方案而不是自己完成,則可以在此處設置另一個問題。
如果可以使用phpmailer是一類處理所有郵件發送,
或使用來自phpclasess網站(需要註冊)一類
http://www.phpclasses.org/browse/package/1553.html
類代碼:
<?
/* sendMail Class - by André Cupini - [email protected] */
class sendMail
{
var $to;
var $cc;
var $bcc;
var $subject;
var $from;
var $headers;
var $html;
function sendMail()
{
$this->to = NULL;
$this->cc = NULL;
$this->bcc = NULL;
$this->subject = NULL;
$this->from = NULL;
$this->headers = NULL;
$this->html = FALSE;
}
function getParams($params)
{
$i = 0;
foreach ($params as $key => $value) {
switch($key) {
case 'to':
$this->to = $value;
break;
case 'cc':
$this->cc = $value;
break;
case 'bcc':
$this->bcc = $value;
break;
case 'subject':
$this->subject = $value;
break;
case 'from':
$this->from = $value;
break;
case 'submitted':
NULL;
break;
default:
$this->body[$i]["key"] = str_replace("_", " ", ucWords(strToLower($key)));
$this->body[$i++]["value"] = $value;
}
}
}
function setHeaders()
{
$this->headers = "From: $this->from\r\n";
if($this->html === TRUE) {
$this->headers.= "MIME-Version: 1.0\r\n";
$this->headers.= "Content-type: text/html; charset=iso-8859-1\r\n";
}
if(!empty($this->cc)) $this->headers.= "Cc: $this->cc\r\n";
if(!empty($this->bcc)) $this->headers.= "Bcc: $this->bcc\r\n";
}
function parseBody()
{
$count = count($this->body);
for($i = 0; $i < $count; $i++) {
if($this->html) $content.= "<b>";
$content .= $this->body[$i]["key"].': ';
if($this->html) $content.= "</b>";
if($this->html) $content .= nl2br($this->body[$i]["value"])."\n";
else $content .= $this->body[$i]["value"];
if($this->html) $content.= "<hr noshade size=1>\n";
else $content.= "\n".str_repeat("-", 80)."\n";
}
if($this->html) {
$content = "
<style>
BODY {
font-family: verdana;
font-size: 10;
}
</style>
".$content;
}
$this->body = $content;
}
function send()
{
if(mail($this->to, $this->subject, $this->body, $this->headers)) return TRUE;
else return FALSE;
}
function set($key, $value)
{
if($value) $this->$key = $value;
else unset($this->$key);
}
}
?>
這段代碼看起來非常糟糕,請不要使用它。在發送郵件之前,您甚至必須自己調用每個方法(如'setHeaders')。看起來這個班讓事情變得更加複雜。 – 2010-01-06 16:32:18
那麼首先你應該問問你的客戶,如果你不知道他想要什麼。否則,你不能繼續。其次,讓自己熟悉Object Oriented Programming,特別是在PHP。
是的,以上所有答案都是正確的。我一直使用PHP Mailer。我個人在我的數據庫中有一個「發件箱」表,用於排隊傳出消息。然後,我有一個CRON工作一次完成併發送大塊數據。這不僅可以讓您對您的發送速率控制,但如果你「陷入困境」,併發送一些錯誤,您可以快速進入數據庫,並清除他們都出去的cron惡有惡報之前。我甚至在我的大項目中實施了重點工作,這樣重要的電子郵件就會在諸如簡報之類的事情之前消失。
祝你好運!
- 1. 如何通過ASP.NET向成員發送批量電子郵件?
- 2. 有機團體管理員如何向所有團隊成員發送大量電子郵件?
- 3. 備份網站文件和向他們發送電子郵件
- 4. 如何從我的網站發送電子郵件?
- 5. 如何向Laravel重新發送未發送的電子郵件?
- 6. 如何使用工作流向一個團隊的所有成員發送電子郵件?
- 7. 如何將所有電子郵件合併到我的網站?
- 8. 發送PHP確認電子郵件管理員電子郵件發送
- 9. 發生500錯誤時向管理員發送電子郵件
- 10. 如何發送自動電子郵件給沒有激活帳戶的成員
- 11. 如何重新發送所有失敗的電子郵件(msdb.dbo.sp_send_dbmail)
- 12. 如何發送電子郵件到特定的電子郵件?
- 13. 如何向plesk 9.5.4中的所有客戶發送電子郵件?
- 14. 如何向所有數據輸入的用戶發送電子郵件
- 15. 生成的電子郵件,不發送
- 16. Laravel - 如何發送電子郵件給所有用戶
- 17. HTML向電子郵件發送答案
- 18. PHP發送電子郵件多次發送電子郵件
- 19. 如何通過電子郵件發送電子郵件地址
- 20. 總是向管理員發送確認電子郵件
- 21. 發送電子郵件與OVH託管網站的問題
- 22. 在php中發送電子郵件時的網站性能
- 23. 公共網站的「發送電子郵件」功能
- 24. PHP不從我的網站發送電子郵件
- 25. PHPMailer的回聲的向成功發送的電子郵件
- 26. 從asp.net 4.0網站向多個收件人發送電子郵件
- 27. ASP.net 3.5發送網頁電子郵件
- 28. 「無法發送電子郵件,請與網站管理員聯繫。」
- 29. Log4Net +完成後發送電子郵件?
- 30. 發送電子郵件完成
要求你的客戶,以澄清他想要的東西。你的問題沒有多大意義,因爲它是。 – 2010-01-06 11:20:49