Laravel/XAMPP/Sendmail 不发送邮件
Posted
技术标签:
【中文标题】Laravel/XAMPP/Sendmail 不发送邮件【英文标题】:Laravel/XAMPP/Sendmail not sending mail 【发布时间】:2013-05-28 07:01:41 【问题描述】:我对 XAMPP 和 WAMP 也有同样的问题。我不确定是什么导致了这个问题,因为日志文件中绝对没有任何内容。
我三次检查了我的配置,一切正常。我什至关闭了防火墙,但没有任何反应。
Laravel 4 抛出这个(超时)异常:Symfony\Component\Debug\Exception\FatalErrorException
\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php165
public function readLine($sequence)
if (isset($this->_out) && !feof($this->_out))
$line = fgets($this->_out);
if (strlen($line)==0)
这个函数 Laravel 4 用来读取模板文件。但是,访问该文件没有问题,因为它已正确命名并位于正确的文件夹中。发送邮件的方法是这样的:
Mail::send('emails.activate', array('url' => $url), function($message)
$message->to(trim(Input::get('email')))->subject('Account activation.');
);
还有来自配置文件夹的 Laravel 的 mail.php:
<?php
return array(
'driver' => 'smtp', // Changed this to mail() and sendmail same error
'host' => 'smtp.gmail.com',
'port' => 465,
'from' => array('address' => 'admin@localhost.com', 'name' => 'Support Team'),
'encryption' => 'tls',
'username' => '****@gmail.com',
'password' => '*****',
'sendmail' => 'C:\xampp\sendmail\sendmail.exe -t',
);
在我的 php.ini 文件中,我有:
[mail function]
; XAMPP: Comment out this if you want to work with an SMTP Server like Mercury
SMTP = smtp.gmail.com
smtp_port = 465
; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = ****@gmail.com
; XAMPP: Comment out this if you want to work with fakemail for forwarding to your mailbox (sendmail.exe in the sendmail folder)
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"
在我的 sendmail.ini 中我有:
smtp_server=smtp.gmail.com
smtp_port=465
smtp_ssl=auto
error_logfile=error.log
auth_username=****@gmail.com
auth_password=****
pop3_server=
pop3_username=
pop3_password=
force_sender=
force_recipient=
hostname=
我已经正确设置了一切,我关闭了防火墙,检查了我的路由器无论如何都无法追踪它。
【问题讨论】:
【参考方案1】:我发布了一个答案here 可能会解决一些问题。
总之,使用465端口时,需要将默认加密设置从tls改为ssl。
'host' => 'smtp.gmail.com',
'port' => 465,
'encryption' => 'ssl',
【讨论】:
【参考方案2】:你现在可能想通了,但我认为问题出在你的
Mail::send('emails.activate', array('url' => $url), function($message)
$message->to(trim(Input::get('email')))->subject('Account activation.');
);
尝试将其更改为:
$to = trim(Input::get('email'));
$subject = 'Account activation.'; //for illustration purposes
Mail::send('emails.activate', array('url' => $url), function($message) use ($to, $subject)
$message->to($to)->subject($subject);
);
【讨论】:
【参考方案3】:如果 gmail 阻止您并且不允许您使用您的凭据登录,请尝试此操作。
使用您的 gmail 帐户登录,然后转到: https://accounts.google.com/b/0/DisplayUnlockCaptcha
然后单击继续,然后您将有几分钟的时间发送带有您的代码的邮件。 在此之后,谷歌将允许从新来源登录该帐户。
【讨论】:
【参考方案4】:我知道这是一个旧线程,但对于那些感兴趣的人来说。当前从 localhost 使用 Gmail 的要求完全不同。你可以如下配置你的 Laravel .env 文件
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=YOURID@GMAIL.COM
MAIL_PASSWORD=YOURPASSWORD
MAIL_ENCRYPTION=tls
可选:
MAIL_FROM_ADDRESS=YOURID@gmail.com
MAIL_FROM_NAME="$APP_NAME"
建议在 laravel 上配置 PHP 以发送电子邮件之前。我使用假的 sendemail 并且它有效。您需要做的就是配置您的sendemail.ini file
。
您可以查看这篇文章以了解如何执行此操作 https://***.com/a/18185233/14106184
【讨论】:
以上是关于Laravel/XAMPP/Sendmail 不发送邮件的主要内容,如果未能解决你的问题,请参考以下文章