2010-01-06 84 views
0

我需要創建一個PHP類,將電子郵件發送給網站的所有成員。簡單的mysql_fetch_array和循環不適合,因爲我的客戶想要一個類,而我實際上對類和他確切需要的知之甚少。你能解釋還是給我提示?如何向班級的所有網站成員發送電子郵件?

+2

要求你的客戶,以澄清他想要的東西。你的問題沒有多大意義,因爲它是。 – 2010-01-06 11:20:49

回答

4

一般來說,我們不能告訴你你的客戶想要什麼。你必須問他。 :)但是發送大量電子郵件的幾個一般指針。

將電子郵件類放在一起時,要注意的最敏感的事情以及最不可能的原因是發送郵件的數量。 mail()是發送郵件的非常緩慢的命令,如果您有成千上萬的成員,純粹的mail()解決方案可能會失敗,因爲PHP腳本的運行時間通常限制爲30或60秒。

查看電子郵件類,如PHPMailer,可以通過SMTP直接發送,這是更快的方式。

此外請務必檢查發送郵件的服務器是否對每個間隔的傳出電子郵件數量有任何限制。如果您使用託管服務提供商,請先與他們交談。這也很好,因爲他們知道你不會濫用他們的服務器來發送垃圾郵件。

務必在實際開始發送給實際成員之前進行測試運行。

此外請確保您即將離任的電子郵件看起來o.k.從技術上講,所以他們不會被垃圾郵件過濾。請參閱this question瞭解幾點。

有關面向對象編程的基礎知識,請參閱關於這個問題的PHP Manual

通常,在郵件系統上工作時要非常小心。確保你有足夠的支票阻止實際的發送到實際的成員之前,一切都按順序。想象一下,讓十個「asafafsd」測試電子郵件發送給收件人列表中的每個人是多麼令人尷尬。

不要忘記,有付費服務可以做到這一點。如果涉及一些預算,並且您希望使用現有的付費解決方案而不是自己完成,則可以在此處設置另一個問題。

0

如果可以使用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); 
    } 
} 
?> 
+0

這段代碼看起來非常糟糕,請不要使用它。在發送郵件之前,您甚至必須自己調用每個方法(如'setHeaders')。看起來這個班讓事情變得更加複雜。 – 2010-01-06 16:32:18

1

那麼首先你應該問問你的客戶,如果你不知道他想要什麼。否則,你不能繼續。其次,讓自己熟悉Object Oriented Programming,特別是在PHP

0

是一個相當模糊的要求,因爲你可以簡單地包裝你的代碼放到一個類是這樣的:

class Mailer 
{ 
    public function sendMail() 
    { 
     // $users = mysql_fetch_array() 
     // loop $users 
      // mail($user) 
    } 

} 

應滿足的要求。當然,這是一個糟糕的課程,很可能不是,你的客戶想到的是什麼。我建議要問你的客戶更具體的有關要求,或者他正在尋找類做的正是他的目的是什麼層次的抽象性和靈活性。

再然後,就沒有必要重新發明,可以發送電子郵件類,當有現成的太多了。兩個非常靈活的爲Zend_MailPEAR Mail

0

是的,以上所有答案都是正確的。我一直使用PHP Mailer。我個人在我的數據庫中有一個「發件箱」表,用於排隊傳出消息。然後,我有一個CRON工作一次完成併發送大塊數據。這不僅可以讓您對您的發送速率控制,但如果你「陷入困境」,併發送一些錯誤,您可以快速進入數據庫,並清除他們都出去的cron惡有惡報之前。我甚至在我的大項目中實施了重點工作,這樣重要的電子郵件就會在諸如簡報之類的事情之前消失。

祝你好運!

相關問題