2016-06-14 7 views
1

Ich folgte PHPMailer Tutorial und einige Tutorials im Internet, aber ich kann immer noch nicht Ausführung weniger als 2 Sekunden. Auf vielen Webseiten heißt es, es sollte nicht mehr als 0,4s dauern. Ich habe es von meinem lokalen Rechner und von AWS ausprobiert. Ausführungszeit gleich.PHPMailer Ausführung etwa 2 Sekunden

class BatchMailer { 
    private static $mail; 
    private static $initialized = false; 

    private static function initialize() { 
     if (self::$initialized) 
      return; 

     self::$mail = new PHPMailer; 
     self::$mail->SMTPDebug = 2; 
     self::$mail->isSMTP(); 
     self::$mail->Host = 'smtp.gmail.com'; 
     self::$mail->Port = 587; 
     self::$mail->SMTPSecure = 'tls'; 
     self::$mail->SMTPAuth = true; 
     self::$mail->Username = '***'; 
     self::$mail->Password = '***'; 
     self::$mail->SMTPKeepAlive = true; 
     self::$mail->setFrom('***@gmail.com', 'Title'); 
     self::$mail->isHTML(true); 
     self::$mail->AltBody = 'Please use an HTML-enabled email client to view this message.'; 
     self::$initialized = true; 
    } 

    public static function setSubject($subject) { 
     self::initialize(); 
     self::$mail->Subject = $subject; 
    } 

    public static function setBody($body) { 
     self::initialize(); 
     self::$mail->Body = stripslashes($body); 
    } 

    public static function sendTo() { 
     self::initialize(); 
     self::$mail->clearAddresses(); 

     $recipients = array(
      '***@gmail.com' => 'Person One' 
     ); 

     foreach($recipients as $email => $name) { 
      self::$mail->AddCC($email, $name); 
     } 

     self::$mail->send(); 
     return; 
    } 

    static function test() { 
     self::setSubject('subject'); 
     self::setBody('body'); 
     self::sendTo(); 
    } 
} 

Antwort

2

SMTP ist oft langsam, vor allem, wenn Dinge wie greetdelay/tarpitting als Anti-Spam-Maßnahmen eingesetzt. 2 Sekunden ist nicht so langsam - die SMTP-Spezifikation ermöglicht Timeouts von 10-20 Minuten! Es ist wirklich unpassend für die Verwendung in Echtzeit, d. H. Während der Einreichung einer Webseite, aber das scheint nicht viele davon abzuhalten, es auf diese Weise zu benutzen. Um die Leistung zu maximieren, können Sie einen lokalen Mail-Server installieren, der als Relay verwendet wird, oder Ihre Nachricht an einen separaten Prozess senden, der nicht lange warten muss, z. B. durch Senden einer asynchronen Ajax-Anfrage von Ihrer Seite Der Benutzer ist nicht daran gehindert, andere Dinge zu tun.

Wenn Sie größere Mengen an E-Mails senden, ist es wichtig, beim Senden eine Relais- und SMTP-Keepalive zu verwenden. Ich habe keine Probleme mit über 200 Nachrichten/Sekunde mit PHPMailer.

Nette Klasse BTW - aufgeräumter als die meisten Dinge, die ich auf SO sehe! $initialized wird nicht benötigt - prüfen Sie, ob stattdessen self::$mail gesetzt ist.

+0

Vielen Dank für Ihre Antwort. Können Sie lokale Mail-Server vorschlagen, die ich mit PHP verwenden kann? – user256968

+0

Jeder wird tun, aber Postfix ist wahrscheinlich am einfachsten einzurichten. Andere sind Exim, Sendmail, Haraka, qmail. – Synchro

+1

Ich habe sendgrid Mail-Dienst verwendet, sie bieten eine SMTP-API, die die E-Mail als API-Aufruf sendet sie auch die php sdk dafür bereitgestellt haben! probier es aus, fühlte, dass es ziemlich schnell war. https://sendgrid.com/docs/Integrate/Code_Examples/v2_Mail/php.html – BlackBurn027