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?

22
demandé sur Major Productions 2017-08-02 21:29:49

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.

10
répondu Major Productions 2017-08-07 22:03:54

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);
5
répondu JGrinon 2017-08-06 10:05:39

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.

2
répondu staskrak 2017-08-05 08:23:05