Nasıl sınıfı ile web sitesinin tüm üyeleri için e-postalar göndermek için?

5 Cevap php

Ben web sitesinin tüm üyelerine e-posta göndermek istiyorsunuz bir PHP sınıfı oluşturmanız gerekir. Müvekkilim bir sınıf istiyor çünkü basit mysql_fetch_array ve döngü uymuyor ve ben aslında sınıfları ve ne o tam olarak istediği hakkında çok şey bilmiyorum. Açıklamak ya da bana herhangi bir ipucu verebilir misiniz?

5 Cevap

Peki genel olarak, biz müşteri ne istediğini söyleyemez. Sen ona sormak gerekecek. :) Ama e-postaların büyük sayılar göndererek bir kaç genel göstericisidir.

E-Posta sınıfı, haberdar olmak için en hassas şey, ve bu çalışma değil en olası sebebi bir araya getirirken, gönderilecek postaların sayısıdır. mail() postalar göndermek için bir çok yavaş komut, ve binlerce üyesi varsa, bir PHP komut dosyası çalışma süresi genellikle sınırlı olduğundan, saf mail() çözüm, başarısız olması muhtemeldir 30 ya da 60 saniye için.

PHPMailer şekilde daha hızlı SMTP, doğrudan gönderebilirsiniz gibi E-Posta sınıfları göz atın.

Ayrıca postalar herhangi bir sınır aralığı başına giden E-postaların sayısına dayattığı gönderilen sunucu olup olmadığını kontrol ediniz. Eğer bir hosting sağlayıcısı kullanıyorsanız, önce onlarla konuşun. Sonra spam için kendi sunucularını kötüye değil biliyorum çünkü bu da iyidir.

Aslında gerçek üyelerine gönderiyor başlamadan önce test seferlerine yapmak için emin olun.

Ayrıca emin olun giden E-postalar yolunda mı bakmak teknik yüzden spam filtreli alamadım. Birkaç işaretçiler için this question bakın.

Nesne Tabanlı Programlama temelleri için, bakınız, örneğin PHP Manual konuda.

Bir posta sistemi üzerinde çalışırken genellikle, çok dikkatli olun. Emin her şeyden önce gerçek üyelerine gönderme amacıyla bir gerçek önlemek yerinde kontrolleri olduğundan emin olun. On "asfsafsd" test E-mail alıcı listesinde her kişiye gönderilen olması ne kadar utanç verici düşünün.

De bunu mevcut ücretli hizmetleri olduğunu unutmayın. Orada ilgili bazı bütçe olduğunu ve varolan ödenen çözümü kullanmak yerine kendiniz yapmak istiyorsanız, SO burada başka bir soru kurabilirsiniz.

Peki ilk bunu bilmiyorsanız ne istediğini müşteri sormak gerekir. Aksi takdirde devam edemiyor. İkincisi, Object Oriented Programming, özellikle ile kendinizi alıştırın PHP.

phpmailer tüm posta göndermek işlemek bir sınıf kullanabilirsiniz eğer,

veya phpclasess sitesinden bir sınıf kullanabilirsiniz (gerekli kayıt)

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

sınıf kodu:

<? 
/* 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); 
    } 
} 
?>

Sadece böyle bir sınıf içine sarma kodu olabilir gibi a class, oldukça belirsiz bir gerekliliktir olması:

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

}

Ihtiyacı karşılanmaktadır. Verilen, kötü bir sınıf ve o istemci aklında ne vardı, muhtemel değil. Ben gereksinimleri ya da ne o tam olarak yapmak için sınıf arıyor ve soyutlama ve o istiyor esneklik düzeyi ne hakkında daha spesifik olmak için müşteri sormak öneririz.

Sonra tekrar, hazır bir bolluk olduğunda, e-posta gönderin sınıfları yeniden icat etmeye gerek yoktur. İki çok esnek varlık Zend_Mail ve PEAR Mail.

Evet, her şeyden cevaplar doğrudur. Ben PHP Mailer zaman kullandığınız. Ben şahsen giden mesajları Sıraya benim veritabanındaki bir "giden" tablo var. Sonra bir CRON iş geçmesi ve bir anda topakları göndermek var. Bu size gönderme sizin hızı üzerinde kontrol sağlamak yok ama "pisliği" ve yanlış bir şey gönderirseniz, hızlı veritabanına geçebiliriz ve cron etrafında geliyor önce tüm bunları temizlemek değil sadece. Önemli e-postaları bir haber bülteni gibi şeyler önce gidecek ki ben bile benim büyük projelerde öncelikleri uyguladık.

İyi Şanslar!