2017-09-18 3 views
5

Zunächst möchte ich StackOVerflow und seinen Benutzern für die Hilfe bei der Lösung einer Reihe von technischen Problemen danken. Ich habe diesen Account heute erstellt, da ich nicht sehen konnte, dass ähnliche Probleme angesprochen werden.Verzögerung per E-Mail senden PHP CodeIgniter

Das Problem - Ich bin mit einem Problem mit dem Senden von E-Mails in PHP CodeIgniter stecken. Die Funktion $ this-> email-> send() benötigt jedes Mal ca. 3-4 Sekunden um sie auszuführen.

Wir haben eine soziale Plattform, auf der Nutzer kommen und Dinge veröffentlichen. Jedes Mal, wenn der Nutzer ein neues Update hochlädt, möchten wir ihm eine E-Mail senden. Das Problem ist, die E-Mail-Funktion dauert etwa 3-4 Sekunden und wir würden es lieben, es unter 1 Sekunde herunterzubringen.

Gibt es eine Möglichkeit, den Sende-E-Mail-Prozess parallel auszuführen? Sagen Sie einen Python-Code, der kontinuierlich ausgeführt wird, um neue Updates zu holen und E-Mails an diese Benutzer zu senden. Jede bessere Methode als das?

Technologie-Stack - PHP CI, MySQL, Apache, Windows-

Dies ist der E-Mail-Code, der auf jedes neues Update aufgerufen wird -

$config = Array(
     'protocol' => 'smtp', 
     'smtp_host' => 'smtp.gmail.com', 
     'smtp_port' => 587, 
     'smtp_user' => '[email protected]', 
     'smtp_pass' => 'password', 
     'mailtype' => 'html', 
     'charset' => 'utf-8', 
     'smtp_crypto' => "tls" 
     ); 

$this->load->library('email', $config); 
$this->email->set_newline("\r\n"); 
$this->email->set_mailtype("html"); 
$this->email->from('[email protected]', 'Support'); 
$this->email->to($this->session->userdata['email']); 
$this->email->subject('You have posted a new update'); 
$this->email->message('Please login to check your new update. Do not reply to this email. For any issues reach out to [email protected]'); 

if (!$this->email->send()) 
{ 
    show_error($this->email->print_debugger()); 
} 
else 
{ 
    echo true; 
} 
+0

Hallo, Nun, das wäre großartig, wenn Sie die Antwort finden, lassen Sie es uns wissen. Aber ich denke, dass eine gute Wartezeit sein kann, auch wenn Sie E-Mails von Hotmail oder Gmail senden, ich denke, ich brauche länger als 1 Minute. –

+0

Ich würde vorschlagen, dass Sie asynchrone Funktionen verwenden, um die E-Mail zu senden. Dies wird Ihnen helfen, Ihre Logik schneller abzuschließen und schnelle Antworten zu geben. Für weitere Informationen können Sie https://stackoverflow.com/questions/13846192/php-threading-call-to-a-php-function-asynchronous –

+0

Vielen Dank für Ihre Antworten. Versuche die asynchronen Methoden. –

Antwort

1

Es ist mein Vorschlag, dass die email in databse speichern und senden Diese E-Mail mit Crone Job. Der Benutzer sollte also nicht darauf warten, E-Mails zu senden.

Wenn Sie Code für cron Job brauchen und smtp mailer Kommentar nur auf Am

+0

Danke für die Antwort. Das einzige Problem bei diesem Ansatz ist, dass ich die Datenbank kontinuierlich anpingen müsste, um zu prüfen, ob es Updates gibt. Das könnte meine Datenbank langsamer machen. Es besteht auch die Möglichkeit von Deadlocks, wenn die Anzahl der Benutzer gleichzeitig Updates durchführt. –

+0

E-Mail abrufen, die nicht gesendet wurde, und Limit 10 festlegen, und die Jobzeit für den Crone auf 30 Sek. Setzen. –

+0

kann es sein, wird sich nicht auf Ihre db auswirken, wenn ich nicht falsch bin –

1

Wenn Ihre Funktion schneller funktionieren, aber E-Mail zu senden ist langsamer, muss es Problem für Ihre SMTP-Verbindung sein. Entweder ist Ihr Server nicht viel schneller, um SMTP schnell zu verbinden, oder das SMTP, das Sie verwenden, verlangsamt sich etwas langsamer. Versuchen Sie in diesem Fall mit einem Google Mail-SMTP und sehen Sie sich das Ergebnis an.

+0

Danke für Ihre Antwort. Ich benutze Google Mail-SMTP-Server mit folgenden in meiner Konfigurationsvariablen. 'smtp_host' => 'smtp.gmail.com', 'smtp_port' => 587, –

+0

versuchen Sie es mit Ihrem Server SMTP und sehen Sie das Ergebnis. –

+0

Zusätzlich: Wie viel RAM verwenden Sie in Ihrem Server? –

Verwandte Themen