1

我希望实施者在我的网站上有一个联系表。我遵循了 symfony2 文档:http ://symfony.com/fr/doc/current/cookbook/email/email.html

我使用 symfony 2.3.3。

这就是我的 config_dev.yml:

swiftmailer:
    transport: sendmail

我的contactAction控制器:

 public function contactAction(Request $request)
    {
        $this->focus = "contact";

        $form = $this->createFormBuilder()
            ->add('Sujet:', 'text')
            ->add('Service:', 'choice',
                array(
                    'choices' =>
                        array(
                            'all' => 'Communication multi-canaux (plusieurs services liés)',
                            'web' => 'Développement Web',
                            'webMarketing' => 'Web Marketing',
                            'mobile' => 'Développement mobile / tablette',
                            'brand' => 'Brand design',
                            'event' => 'Evènementiel',
                            'print' => 'Campagne print',
                        ),

                    'preferred_choices' => array('all'),
                )
            )
            ->add('Nom:', 'text')
            ->add('Societe:', 'text')
            ->add('Courriel:', 'email')
            ->add('message:', 'textarea')
            ->getForm();

        $form->handleRequest($request);

        if ($form->isValid()) {
            // Les données sont un tableau avec les clés "name", "email", et "message"
            $data = $form->getData();
            $message = \Swift_Message::newInstance()
                ->setSubject($data['Sujet'] . $data['Société'])
                ->setFrom($data['Courriel'])
                ->setTo('contact@visual-immersion.com')
                ->setBody($this->renderView('text à placer par la suite'))
            ;
            $this->get('mailer')->send($message);
        }

        $this->get('mailer')->send($message);
        return $this->render('VisualImmersionSiteBundle:Site:contact.html.twig',
            array(
                'focus' => $this->focus,
                'form'   => $form->createView(),
            ));
    }

我有这个错误:

可捕获的致命错误:传递给 Swift_Transport_SendmailTransport::__construct() 的参数 2 必须实现接口 Swift_Events_EventDispatcher,给出 Swift_Transport_StreamBuffer 的实例,在 /var/www/visual-immersion/app/cache/dev/appDevDebugProjectContainer.php 的第 2129 行调用并在/var/www/visual-immersion/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php 第 42 行

我绝对找不到问题所在。你有什么想法,或者你有没有遇到过这个错误?

谢谢您的帮助

更新:

我在 Composer 中将 SwiftMailer 包降级为 2.3.2 版本。问题已解决,但现在,我收到此错误消息;

预期响应代码 220,但得到代码“”,带有消息“”

任何想法 ?

4

2 回答 2

1

原因是您服务器中的 sendmail 功能不正确。

您可以使用命令进行测试:telnet localhost 25

如果您使用的是 Linux 服务器。您应该安装 Postfix,因为 SSMTP 不支持 telnet,而 SwitfMailer 总是在发送电子邮件之前检查 telnet。

于 2014-08-05T05:01:01.957 回答
0

这似乎是 2.3.3 的一个错误。这是讨论此事的GitHub 问题。

这里的解决方案似乎是将您的 swiftmailer-bundle 依赖项composer.json从 2.3.3 更改为 2.3.2:

"symfony/swiftmailer-bundle": "2.3.2"
于 2013-11-11T18:10:31.597 回答