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