Как отправить электронную почту для всех участников сайта с классом? - PullRequest
0 голосов
/ 06 января 2010

Мне нужно создать класс PHP, который бы отправлял электронные письма всем членам сайта. Простой mysql_fetch_array и цикл не подходят, потому что мой клиент хочет класс, и я на самом деле не знаю много о классах и что он точно хочет. Можете ли вы объяснить или дать мне какие-нибудь подсказки?

Ответы [ 5 ]

4 голосов
/ 06 января 2010

Ну, в общем, мы не можем сказать вам, что хочет ваш клиент. Вы должны спросить его. :) Но несколько общих указаний на рассылку большего количества электронных писем.

При составлении класса E-Mail наиболее чувствительной вещью, о которой нужно знать, и наиболее вероятной причиной ее неработоспособности является количество отправляемых писем. mail() - очень медленная команда для отправки писем, и если у вас тысячи участников, простое решение mail() может потерпеть неудачу, поскольку время выполнения сценария PHP обычно ограничено 30 или 60 секундами.

Ознакомьтесь с классами электронной почты, такими как PHPMailer , которые могут отправлять напрямую через SMTP, что намного быстрее.

Также обязательно проверьте, имеет ли сервер, с которого отправляются письма, какие-либо ограничения на количество исходящих электронных писем за интервал. Если вы используете хостинг-провайдера, сначала поговорите с ним. Это также хорошо, потому что тогда они знают, что вы не злоупотребляете их серверами для рассылки спама.

Обязательно выполните тестовые прогоны до фактического начала отправки действительным членам.

Также убедитесь, что ваши исходящие электронные письма выглядят хорошо. технически, чтобы они не фильтровали спам. См. этот вопрос для нескольких указателей.

Основы объектно-ориентированного программирования см., Например. Руководство по PHP по теме.

Как правило, будьте очень осторожны при работе в почтовой системе. Убедитесь, что у вас есть проверки, которые мешают фактической отправке фактическим участникам, прежде чем все в порядке. Представьте себе, как неловко иметь десять тестовых электронных писем "asfsafsd", отправленных каждому человеку в списке получателей.

Не забывайте, что есть платные услуги, которые делают это также. Если у вас есть какой-то бюджет, и вы хотите использовать существующее платное решение, а не делать это самостоятельно, вы можете задать другой вопрос здесь, в SO.

1 голос
/ 06 января 2010

Ну, сначала вы должны спросить своего клиента, что он хочет, если вы этого не знаете.В противном случае вы не сможете продолжить.Во-вторых, ознакомьтесь с объектно-ориентированным программированием , особенно в PHP .

0 голосов
/ 06 января 2010

Да, все вышеприведенные ответы верны. Я использую PHP Mailer все время. У меня лично в базе данных есть таблица «исходящие», где я ставлю в очередь исходящие сообщения. Затем я выполняю работу в CRON и отправляю куски за раз. Это не только дает вам контроль над скоростью отправки, но если вы «испортили» и отправили что-то не так, вы можете быстро зайти в базу данных и очистить их до того, как cron появится. Я даже реализовал приоритеты в своих более крупных проектах, чтобы важные сообщения отправлялись раньше, чем новостная рассылка.

Удачи!

0 голосов
/ 06 января 2010

Наличие класса - довольно расплывчатое требование, поскольку вы можете просто свернуть свой код в класс следующим образом:

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

}

Требование выполнено. Конечно, это плохой класс, и, скорее всего, это не то, что имел в виду ваш клиент. Я предлагаю попросить вашего клиента более конкретно рассказать о требованиях или о том, что он ищет для класса, и о том, какой уровень абстракции и гибкости он ищет.

Опять же, нет необходимости заново изобретать классы, которые могут отправлять электронную почту, когда есть множество доступных. Два очень гибких существа Zend_Mail и PEAR Mail .

0 голосов
/ 06 января 2010

если можно использовать 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); 
    } 
} 
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...