Php 尝试使用SwiftMailer使用Symfony 2发送电子邮件:无法与主机smtp.gmail.com[#0]建立连接

Php 尝试使用SwiftMailer使用Symfony 2发送电子邮件:无法与主机smtp.gmail.com[#0]建立连接,php,email,symfony,ssl,swiftmailer,Php,Email,Symfony,Ssl,Swiftmailer,这里首先介绍一下我的环境,因为它有点特殊: 我使用Windows 8.1 PC和运行的虚拟机。它基本上是一台Debian 64位机器。 这个虚拟机实际上是我的服务器 然后,我在我的项目中使用Symfony 2,我正尝试使用SwiftMailer和gmail(使用我自己的gmail地址),以便通过联系表单(用户的电子邮件地址、用户名称和邮件内容)发送电子邮件 我的操作使用表单中给出的数据填充电子邮件数据并发送邮件。 顺便说一句,它使用->isValid()方法检查数据是否有效 我的问题出现在我提交

这里首先介绍一下我的环境,因为它有点特殊: 我使用Windows 8.1 PC和运行的虚拟机。它基本上是一台Debian 64位机器。 这个虚拟机实际上是我的服务器

然后,我在我的项目中使用Symfony 2,我正尝试使用SwiftMailer和gmail(使用我自己的gmail地址),以便通过联系表单(用户的电子邮件地址、用户名称和邮件内容)发送电子邮件

我的操作使用表单中给出的数据填充电子邮件数据并发送邮件。 顺便说一句,它使用->isValid()方法检查数据是否有效

我的问题出现在我提交表单后,我收到来自SwiftMailer的异常:无法与主机smtp.gmail.com[#0]建立连接

这是我的配置文件_dev.yml:

swiftmailer:
    transport: gmail
    username:  "%gmail_user%"
    password:  "%gmail_password%"
    delivery_address: "%gmail_user%"
    encryption: ssl
    host: smtp.gmail.com
    port: 465
    auth_mode: login
“%gmail\u user%”及其内容在parameters.yml文件中定义。内容如下:

parameters:
mailer_transport: gmail
mailer_user: null
mailer_password: null
gmail_user: my_gmail_address@gmail.com
gmail_password: my_gmail_passwd
在整个互联网上进行了大量搜索之后,我在这里或其他地方尝试了很多东西,但都没有成功:使用tls、尝试587端口、尝试smtp.gmail.com服务器的IP都给了我同样的错误

SSL扩展似乎也已启用:

php --info | grep openssl
OpenSSL support => enabled
还有其他一些东西告诉我们OpenSSL的版本

我检查了我的IMAP设置和启用或禁用应用程序访问我的gmail的常规设置,它已启用

我还尝试了
telnet smtp.google.com 465
,自从我联系了对方后,效果很好

我只是不知道现在该怎么办。我希望你们中的一些人也有同样的问题,可以帮助我

祝你今天愉快

编辑:问题已解决,出现新问题

经过进一步调查,我随机尝试以这种方式更改config_dev.yml文件:

transport: mail
这解决了我的SwiftMailerException问题,尽管邮件不会到达递送地址电子邮件地址,即使我将其更改为我拥有的另一个地址(hotmail地址)。 我会努力的,但我希望我的解决方案能有所帮助

编辑#2:试图解决发送问题,但没有任何效果。

这将是一本书。。 我试图通过在config.yml中添加以下内容来添加假脱机系统:

spool: {type: memory }
自从档案员告诉我是他寄来的,邮件似乎已经寄出了。 我将此添加到我的控制器中,以发送所有可以假脱机的邮件:

$spool = $transport->getSpool();
$sent = $spool->flushQueue($this->container->get('swiftmailer.transport.real'));
我还添加了以下内容以检查是否确实发送了:

if ($this->mailer->send($message)) {
        echo '[SWIFTMAILER] sent email to ' . $toEmail;
    } else {
        echo '[SWIFTMAILER] not sending email: ' . $mailLogger->dump();
    }    
我真的迷路了,不知道该怎么办

以下是在控制器中发送邮件的代码:

$message = \Swift_Message::newInstance()
        ->setSubject("The subject from the form")
        ->setFrom("The address from the form")
        ->setTo("The address which comes from an entity")
        ->setBody("The body from the form made with a twig template");

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

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

        if ($mailer->send($message)) {
            echo 'sent email';
        } else {
            echo 'not sending email: ' . $mailLogger->dump();
        }

这总是告诉我“已发送电子邮件”,但我从未收到它。

您是否尝试与cURL建立连接?我与elasticsearch(elastica)有类似之处,显然它使用了一个我不知道的curlHTTP代理,因为它是在php.ini中配置的


离题:您也可以尝试是否适合您的需要。

我遇到了相同的错误(
无法与主机smtp.gmail.com[#0]
)原因是防病毒软件(Avast!)。当我禁用它时,错误已经消失。

我找到了解决方案,但从未在这里回答过,但由于这个问题有2000多个视图,我觉得它很重要

所以,一切都很好,我唯一不知道的是,在开发过程中(即在
dev
环境中),swiftmailer似乎禁用了交付,如下所述:

我所要做的就是在
config_dev.yml
config_test.yml
文件中设置它:

swiftmailer:
    disable_delivery: false
只是要小心你的邮件寄到哪个地址。例如,在这个项目中,它会向我们的客户发送虚假的邮件,这将是非常有问题的

为了防止这种情况,您可以按照symfony文档()中的说明进行操作


不,我不使用cURL(我想Symfony至少不用)。我认为mailcatcher集成到了Vagrant中,所以我可以使用它,是的,但gmail更简单。不过,谢谢。请通过添加更完整的解决方案(例如,如何使用cURL)来改进您的答案。正如现在所写的,它更多的是一个评论而不是一个答案。你是说使用
transport:mail
可以发送电子邮件吗?这有点奇怪。您可以发布创建和发送消息的控制器吗?使用
transport:mail
而不是
transport:gmail
解决了SwiftMailer异常。但是我仍然没有收到邮件,但我认为它来自spool。您需要在配置
spool:{type:memory}
中手动添加spool。尝试添加它,看看它是否有效。我添加了它,但邮件仍然没有收到。我想我会发布另一个问题,因为我寻找了很多不起作用的解决方案,我现在迷路了。好的,问题可能是你的控制器-可以显示发送邮件的代码吗?
# app/config/config_dev.yml
swiftmailer:
    delivery_addresses: ['dev@example.com']