new enviar correo php symfony email swiftmailer

php - enviar - symfony 4 swiftmailer



Symfony 3.3 y Swiftmailer-correo creado y enviado por el controlador diferido por el servidor (3)

Intento utilizar Swiftmailer para enviar correos electrónicos desde un sitio web. Los correos electrónicos siguen diferidos porque Swiftmailer está intentando usar la dirección IP de mi servidor en lugar de localhost como retransmisión:

Aug 2 14:18:28 picus sm-mta[21171]: v72IIS0I021171: from=<[email protected]>, size=347, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1] Aug 2 14:18:28 picus sm-mta[21173]: v72IIS0I021171: to=<[email protected]>, delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=120347, relay=example.com. [my.servers.ip.address], dsn=4.0.0, stat=Deferred: Connection refused by example.com.

El código, la configuración y los parámetros de mi controlador Symfony -

Código de controlador relevante:

if ($form->isSubmitted() && $form->isValid()) { $data = $form->getData(); $this->addFlash(''success'', ''Message sent successfully''); $data[''message''] = str_replace("/n.", "/n..", $data[''message'']); $mail = (new /Swift_Message()) ->setSubject("[From My Website] - {$data[''subject'']}") ->setFrom($data[''email'']) ->setTo(''[email protected]'') ->setBody("{$data[''name'']} wrote the following message:/n/n{$data[''message'']}"); $this->get(''mailer'')->send($mail); return $this->redirect($this->generateUrl(''_home'')); }

config.yml :

# Swiftmailer Configuration swiftmailer: transport: ''%mailer_transport%'' host: ''%mailer_host%'' username: ''%mailer_user%'' password: ''%mailer_password%'' port: ''%mailer_port%'' spool: type: file path: ''%kernel.cache_dir%/swiftmailer/spool''

parameters.yml :

parameters: mailer_transport: sendmail mailer_host: 127.0.0.1 mailer_user: null mailer_password: null mailer_port: null

Lo que es realmente frustrante es que si creo un mensaje usando bin/console swiftmailer:email:send , y luego descargue el spool ( bin/console swiftmailer:spool:send ) se envía correctamente. Solo cuando creo y envío un mensaje a través de mi controlador, surge un problema.

¿Qué estoy haciendo mal?


¿Por qué usa Sendmail Transport en lugar de SMTP Transport?

https://swiftmailer.symfony.com/docs/sending.html

Prueba esto:

config.yml

# Swiftmailer Configuration swiftmailer: transport: "%mailer_transport%" host: "%mailer_host%" username: "%mailer_user%" password: "%mailer_password%" port: "%mailer_port%" encryption: "%mailer_encryption%" spool: { type: memory }

parameters.yml

parameters: mailer_transport: smtp mailer_host: smtp.office365.com mailer_user: [email protected] mailer_password: my_password mailer_port: 587 mailer_encryption: tls

Controlador

$message = /Swift_Message::newInstance() ->setSubject(''Subject'') ->setFrom(array(''[email protected]'' => ''My name'')) ->setTo(array($user->getMail())) ->setBcc(array(''[email protected]'', ''[email protected]'')) ->setBody( $this->renderView( ''template.html.twig'', array(''vars'' => $vars) ), ''text/html'' ); $this->get(''mailer'')->send($message);


Ooof

Fue un error de DNS de mi parte lo que estaba causando el problema. A saber, que olvidé apuntar mis registros MX a los servidores de correo de Google, por lo que sendmail tomaba la parte example.com de la dirección de destino e intentaba usarla como un retransmisor smtp, aunque no tenía un servidor de correo configurado. .

Disculpas por toda la consternación. Espero que mi respuesta pueda ser útil para otros golpeando sus cabezas contra la pared.


Puedo sugerirle que pruebe este enfoque:

$mailer = $container->get(''mailer''); $spool = $mailer->getTransport()->getSpool(); $transport = $container->get(''swiftmailer.transport.real''); $sender = ''your_sender''; $recipient = ''your_recipient''; $title = ''your_title''; $body = ''your_message''; $charset = "UTF-8"; $email = $mailer->createMessage() ->setSubject($title) ->setFrom("$sender") ->setTo("$recipient") ->setCharset($charset) ->setContentType(''text/html'') ->setBody($body) ; $send = $mailer->send($email); $spool->flushQueue($transport);

Puede envolver esto en un mensaje de envío del servicio YouMailService simple. O puede insertar este código en su controlador. Esto será suficiente.