如何在课堂上为所有网站成员发送电子邮件?

时间:2010-01-06 11:18:51

标签: php mysql

我需要创建一个PHP类,它将向网站的所有成员发送电子邮件。简单的mysql_fetch_array和循环不适合,因为我的客户端想要一个类,我实际上对类和他到底想要什么并不了解。你能解释或给我任何提示吗?

5 个答案:

答案 0 :(得分:4)

总的来说,我们无法告诉您客户想要什么。你必须问他。 :)但是有一些关于发送大量电子邮件的一般指示。

在整理电子邮件课程时,要注意的最敏感的事情,以及最不可能的原因是要发送的邮件数量。 mail()是一个非常慢的发送邮件的命令,如果你有成千上万的成员,纯mail()解决方案可能会失败,因为PHP脚本的运行时间通常限制在30或60秒。

查看可以直接通过SMTP发送的PHPMailer等电子邮件类,速度更快。

还要确保检查邮件发送的服务器是否对每个间隔的传出电子邮件数量有任何限制。如果您使用的是托管服务提供商,请先与他们联系。这也很好,因为他们知道你不会滥用他们的服务器垃圾邮件。

确保在实际开始发送给实际成员之前进行测试运行。

还要确保您的外发电子邮件看起来像o.k.从技术上讲,他们不会过滤垃圾邮件。请参阅this question以获取一些指示。

有关面向对象编程的基础知识,请参阅例如关于这个问题的PHP Manual

通常,在邮件系统上工作时要非常小心。确保您有适当的检查,以防止在一切正常之前实际发送给实际成员。想象一下,如果将10个“asfsafsd”测试电子邮件发送给收件人列表中的每个人,会有多么尴尬。

不要忘记有可用的付费服务也可以这样做。如果涉及一些预算,并且您希望使用现有的付费解决方案而不是自己动手,那么您可以在此处设置另一个问题。

答案 1 :(得分:1)

首先,如果你不知道,你应该问你的客户他想要什么。否则你无法继续。其次,让自己熟悉Object Oriented Programming,特别是PHP

答案 2 :(得分:0)

如果可以使用phpmailer是一个处理所有邮件发送的类,

或使用phpclasess网站上的一个类(必需的注册表)

http://www.phpclasses.org/browse/package/1553.html

班级代码:

<? 
/* sendMail Class - by André Cupini - andre@neobiz.com.br */ 
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); 
    } 
} 
?>

答案 3 :(得分:0)

拥有是一个非常模糊的要求,因为你可以简单地将你的代码包装成这样的类:

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

}

满足要求。当然,这是一个糟糕的课程,而且可能不是,客户的想法。我建议让你的客户更具体地说明要求或他正在寻找的课程,以及他所寻求的抽象和灵活程度。

然后,当有足够多的可用时,没有必要重新发明可以发送电子邮件的类。两个非常灵活的是Zend_MailPEAR Mail

答案 4 :(得分:0)

是的,以上所有答案都是正确的。我一直在使用PHP Mailer。我个人在我的数据库中有一个“发件箱”表,我在那里对外发消息进行排队。然后我有一个CRON工作经历并一次发送大块。这不仅可以让你控制你的发送速度,而且如果你“搞砸”并发错了,你可以快速进入数据库并在cron出现之前全部清除它们。我甚至在我的大项目中实施了优先级,这样重要的电子邮件就会在简报之前发布。

祝你好运!