2016-08-07 29 views
1

Befehlsfunktionsenden Mail von localhost über Symfony2 Befehl Swiftmailer

$message = \Swift_Message::newInstance('test') 
      ->setContentType("text/html") 
      ->setFrom('[email protected]') 
      ->setTo('[email protected]'); 

     $message->setBody('test'); 

     if ($this->getApplication()->getKernel()->getContainer()->get('mailer')->send($message)) 
     { 
      return true; 
     } 
     return false; 

Verwendung Wenn ich Befehl ausführen in Command Line I wahr bekommen wie E-Mail gesendet wird.

Paramters.yml

mailer_transport: gmail 
mailer_host: smtp.gmail.com 
mailer_user: [email protected] 
mailer_password: xxxxxxxxxxxxx 

config.yml

swiftmailer: 
    spool: 
     type: file 
     path: "%kernel.root_dir%/../swiftmailer" 
    transport: %mailer_transport% 
    host:  %mailer_host% 
    username: %mailer_user% 
    password: %mailer_password% 

ich irgendwo gelesen hatte, dass Symfony Profiler verwendet werden können, um zu sehen, ob E-Mail gesendet hat, aber ich möchte nur körperlich senden Sie eine E-Mail an meine Adresse zu Testzwecken. Ich brauche nur Informationen, wo ich falsche Dinge tue.

Ich muss beachten Sie, dass ich Gerät Sicherheits-Tool in Google Mail-Konto erlaubt.

Kann das der Grund sein, warum die Mail nicht gesendet wird?

Antwort

2

Ja! Ich habe eine Lösung gefunden.

Ich hatte Spule in Config.yml entfernt und fügen Sie Port und Verschlüsselung hinzu.

# Swiftmailer Configuration 
swiftmailer: 
    transport: %mailer_transport% 
    host:  %mailer_host% 
    port:  %mailer_port% 
    encryption: %mailer_encryption% 
    username: %mailer_user% 
    password: %mailer_password% 

und in Parameters.yml

mailer_transport: gmail 
mailer_host: smtp.gmail.com 
mailer_port: 465 
mailer_encryption: ssl 
mailer_user: [email protected] 
mailer_password: yourNewGeneratedAppPassword 

nach, dass ich zur Verfügung Fehler sehen mit

$mailer = $this->getContainer()->get('mailer'); 

$logger = new \Swift_Plugins_Loggers_ArrayLogger(); 
$mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger)); 

Dann nach Botschaft, die ich verwendet habe gesendet wird:

echo $logger->dump(); 

Fehler im Terminal drucken.

Unten ist die ganze Funktion.

public function sendMail($email, $data) 
    { 
     $mailer = $this->getContainer()->get('mailer'); 

     $logger = new \Swift_Plugins_Loggers_ArrayLogger(); 
     $mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger)); 

     $message = \Swift_Message::newInstance('test') 
      ->setContentType("text/html") 
      ->setFrom('[email protected]') 
      ->setTo($email); 

     $message->setBody($data); 

     if ($mailer->send($message)) 
     { 
      echo $logger->dump(); 
      return true; 
     } 
     return false; 
    } 

Tipps:

Auch müssen Sie Ihre App authentifizieren, natürlich, wenn Sie gmail. über diesen Link https://myaccount.google.com/security

Es ist Link

App-Passwort

Hier Beschreibung https://support.google.com/accounts/answer/185833?hl=en

Nach Klick ist es müssen Sie benutzerdefinierte Namen geben zu deiner App ein d neues Passwort generieren, die Sie in

Parameters.yml >> mailer_password verwenden, werden:

App mit Google Mail-Konto zu verbinden.