Ich verwende den folgenden Code, um E-Mails in Laravel 5.1 zu senden

Mail::send('Project.Emails.Award', $data, function($message) 
{
    $message
            ->to('EmailAddress', 'EmailAddress')
            ->subject('hi');
});

Hier ist das Problem, dass die obige Funktion mindestens 5 Sekunden benötigt, um die Verarbeitung abzuschließen.

Frage : Gibt es asynchrone Bereitstellungsmethoden, bei denen ich nicht auf die Antwort warten muss?


Update für Bounty

Jemand kann schrittweise Richtlinien für das Einrichten der Warteschlange auf Localhost und GoDaddy bereitstellen.

12
user5694966 26 Dez. 2015 im 04:18

2 Antworten

Beste Antwort

Je nachdem, welchen Mail-Treiber Sie verwenden oder verwenden müssen, gibt es möglicherweise andere Optionen, um die Leistung zu verbessern. Der effektivste Weg, um die Benutzeroberfläche ansprechbar zu halten, ist jedoch das Einreihen der E-Mail-Nachrichten.

Mit Ihrem Code wäre dies so einfach wie:

Mail::queue('Project.Emails.Award', $data, function($message) 
{
    $message
            ->to('EmailAddress', 'EmailAddress')
            ->subject('hi');
});

Sie müssen jedoch Warteschlangen eingerichtet haben, und bei einigen können Sie dies nicht ordnungsgemäß tun verwaltete Server.

8
Marcel Gwerder 31 Dez. 2015 im 10:15

Ich poste dies auf Anfrage von Helper und um einen API-Ansatz dafür zu demonstrieren.

Mailgun ist wahrscheinlich die beste Option, da Sie jeden Monat 10.000 E-Mails kostenlos erhalten und zahlen Sie danach für jede E-Mail eine kleine Gebühr.

Laravel wird mit den Treibern ausgeliefert, die bereits in Mailgun integriert werden können, und so ist der Einstieg wirklich einfach .

Zunächst müssen Sie sich nur für ein Mailgun-Konto registrieren und Ihre Domain einrichten:

  1. Registrieren Sie sich für Mailgun
  2. Richten Sie Ihre Domain auf Mailgun ein
  3. Überprüfen Sie die Domäne und aktualisieren Sie Ihre DNS-Einträge, um den Besitz nachzuweisen und die SPF- und DKIM-Authentifizierung zuzulassen

Sobald dies erledigt ist, müssen Sie nur noch Ihre Anwendung konfigurieren, um sie zu verwenden. Dieses Handbuch behandelt die Konfiguration von Mailgun auf Laravel ganz gut, aber im Wesentlichen Sie:

  1. Fügen Sie Guzzle hinzu, falls Sie es noch nicht haben (während Sie Ihre E-Mails über eine API an Mailgun senden, damit sie in die Warteschlange gestellt und gesendet werden) composer require "guzzlehttp/guzzle=~5.0"
  2. Stellen Sie sicher, dass Ihre config/services.php -Datei mit der folgenden Konfiguration übereinstimmt, damit wir unsere Daten sicher aufbewahren und sie einfach in der .env -Datei speichern können

D.h.

'mailgun' => [
    'domain' => env('MAILGUN_DOMAIN'),
    'secret' => env('MAILGUN_SECRET'),
  ],
  1. Fügen Sie die erforderlichen Felder zu unserer .env - Datei hinzu und füllen Sie sie mit den richtigen Werten

Z.B

MAIL_DRIVER=mailgun
MAIL_HOST=smtp.mailgun.org
MAIL_PORT=587
MAIL_USERNAME=XXX
MAIL_PASSWORD=XXX
MAIL_ENCRYPTION=tls
MAILGUN_DOMAIN=THE-DOMAIN-SETUP-IN-MAILGUN
MAILGUN_SECRET=THE-API-KEY-FOR-DOMAIN

Sobald Sie alles eingerichtet haben, können Sie einfach den Befehl Mail::send() verwenden, um E-Mails wie zuvor zu versenden. Dies erfolgt jedoch sofort (abhängig von Ihrem Server - meine ist ziemlich einfach und sendet E-Mails sofort ):

Mail::send('Project.Emails.Award', $data, function($message) 
{
    $message
            ->to('EmailAddress', 'EmailAddress')
            ->subject('hi');
});
0
James 1 Jän. 2016 im 02:27