2010-01-06 83 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恶有恶报之前。我甚至在我的大项目中实施了重点工作,这样重要的电子邮件就会在诸如简报之类的事情之前消失。

祝你好运!

相关问题