2010-01-06 3 views
0

J'ai besoin de créer une classe PHP qui enverrait des e-mails à tous les membres du site. Mysql_fetch_array simple et boucle ne rentre pas parce que mon client veut une classe et je ne sais pas grand chose sur les classes et ce qu'il veut exactement. Pouvez-vous m'expliquer ou me donner des indices?Comment envoyer des e-mails pour tous les membres du site avec la classe?

+2

Demandez à votre client de clarifier ce qu'il veut. Votre question n'a pas beaucoup de sens telle qu'elle est. –

Répondre

4

Eh bien en général, nous ne pouvons pas vous dire ce que veut votre client. Vous devrez lui demander. :) Mais quelques conseils généraux sur l'envoi d'un plus grand nombre de courriels.

Lorsque vous créez une classe de courrier électronique, la chose la plus sensible à connaître et la raison la plus probable de son échec est le nombre de courriers à envoyer. mail() est une commande très lente pour l'envoi de mails, et si vous avez des milliers de membres, une solution mail() pure risque d'échouer, car le temps d'exécution d'un script PHP est généralement limité à 30 ou 60 secondes.

Jetez un coup d'œil à des classes d'E-Mailing comme PHPMailer qui peuvent envoyer directement via SMTP, ce qui est beaucoup plus rapide.

Assurez-vous également de vérifier si le serveur à partir duquel les mails sont envoyés a une limite imposée sur le nombre de courriels sortants par intervalle. Si vous utilisez un fournisseur d'hébergement, parlez-en d'abord. C'est aussi bien parce qu'ils savent que vous n'utilisez pas leurs serveurs pour du spam. Assurez-vous de faire des tests avant de commencer réellement l'envoi aux membres actuels.

Assurez-vous également que vos courriels sortants ont l'air o.k. techniquement, ils ne sont pas filtrés par le spam. Voir this question pour quelques pointeurs.

Pour les notions de base sur la programmation orientée objet, voir par ex. le PHP Manual sur le sujet.

En règle générale, soyez très prudent lorsque vous travaillez sur un système de publipostage. Assurez-vous d'avoir des chèques en place qui empêchent l'envoi aux membres réels avant que tout soit en ordre. Imaginez combien il est embarrassant d'avoir dix e-mails de test "asfsafsd" envoyés à chaque personne sur la liste des destinataires.

N'oubliez pas que des services payants sont également disponibles. S'il y a un budget impliqué, et que vous souhaitez utiliser une solution payante existante plutôt que de le faire vous-même, vous pouvez créer une autre question ici sur SO.

0

si peut utiliser phpmailer est une classe qui gère tout envoi de courrier,

ou utiliser une classe à partir du site phpclasess (registre obligatoire)

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

le code de classe:

<? 
/* 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

Ce code a l'air très très mauvais, ne l'utilisez pas. Vous devez même appeler chaque méthode (comme 'setHeaders') par vous-même avant d'envoyer le mail. On dirait que cette classe rend les choses plus compliquées comme elles le sont. –

1

Eh bien d'abord vous devriez demander à votre client ce qu'il veut si vous ne le savez pas. Sinon, vous ne pouvez pas continuer. Deuxièmement, vous familiariser avec Object Oriented Programming en particulier dans PHP.

0

Ayant une classe est une exigence assez vague, comme vous pouvez simplement envelopper votre code dans une classe comme celle-ci:

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

} 

Exigence satisfaite.Certes, c'est une mauvaise classe et ce n'est probablement pas ce que votre client avait en tête. Je suggère de demander à votre client d'être plus précis sur les exigences ou sur ce qu'il cherche à faire exactement pour la classe et sur le niveau d'abstraction et de flexibilité qu'il recherche.

Ensuite, il n'est pas nécessaire de réinventer les classes qui peuvent envoyer des emails, quand il y a une pléthore facilement disponible. Deux très flexibles étant Zend_Mail et PEAR Mail.

0

Oui, toutes les réponses ci-dessus sont vraies. J'utilise PHP Mailer tout le temps. J'ai personnellement une table "outbox" dans ma base de données où je file les messages sortants. Ensuite, j'ai un travail CRON à travers et envoyer des morceaux à la fois. Non seulement cela vous donne le contrôle sur votre taux d'envoi, mais si vous "gâcher" et envoyer quelque chose de mal, vous pouvez rapidement aller dans la base de données et les effacer avant que le cron arrive. J'ai même mis en place des priorités dans mes plus gros projets afin que d'importants courriels sortent avant des choses comme un bulletin d'information.

Bonne chance!

Questions connexes