Symfony 3.3 et Swiftmailer-mail créé et envoyé par controller différé par le serveur
j'essaie D'utiliser Swiftmailer pour envoyer des e-mails depuis un site web. Les e-mails sont de plus en plus différés parce que Swiftmailer tente d'utiliser L'adresse IP de mon serveur plutôt que localhost comme relais:
Aug 2 14:18:28 picus sm-mta[21171]: v72IIS0I021171: from=<Test@test.com>, size=347, class=0, nrcpts=1, msgid=<91d4a1a70de9fed0a2c04e682e435405@swift.generated>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Aug 2 14:18:28 picus sm-mta[21173]: v72IIS0I021171: to=<person@gmail.com>, 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.
Mon Symfony contrôleur de code, de config, et des paramètres -
Code du contrôleur pertinent:
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('person@gmail.com')
->setBody("{$data['name']} wrote the following message:nn{$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
ce qui est vraiment frustrant, c'est que si je crée un message en utilisant bin/console swiftmailer:email:send
, puis rincer la bobine (bin/console swiftmailer:spool:send
), il est envoyé correctement. quand je crée et envoie un message à travers mon contrôleur qu'il y a un problème.
Qu'est-ce que je fais de mal?
3 réponses
Ouf
c'était une erreur DNS de mon côté qui causait le problème. À savoir, que j'ai oublié de pointer mes enregistrements MX vers les serveurs de messagerie de Google, donc sendmail prenait le example.com
partie de l'adresse de destination et d'essayer de l'utiliser comme un relais smtp, même si je n'ai pas de serveur de messagerie configuré.
mes excuses pour toute cette consternation. J'espère que ma réponse pourra être utile aux autres qui se cognent la tête contre le mur.
pourquoi utilisez-vous le Transport sendmail au lieu du transport SMTP?
https://swiftmailer.symfony.com/docs/sending.html
essaye ceci:
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 }
paramètres.yml
parameters:
mailer_transport: smtp
mailer_host: smtp.office365.com
mailer_user: user@example.com
mailer_password: my_password
mailer_port: 587
mailer_encryption: tls
Controller
$message = \Swift_Message::newInstance()
->setSubject('Subject')
->setFrom(array('user@example.com' => 'My name'))
->setTo(array($user->getMail()))
->setBcc(array('copy1@example.com', 'copy2@example.com'))
->setBody(
$this->renderView(
'template.html.twig',
array('vars' => $vars)
),
'text/html'
);
$this->get('mailer')->send($message);
je peux vous suggérer d'essayer cette méthode:
$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);
Vous pouvez l'envelopper dans un message d'envoi du simple YouMailService. Ou vous pouvez insérer ce code dans votre controller. Ce sera suffisant.