2

我对 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=

我已经正确设置了一切,我关闭了防火墙,检查了我的路由器无论如何都无法跟踪它。

4

4 回答 4

4

我在这里发布了一个答案,可能会为某些人解决这个问题。

总之,使用465端口时,需要将默认加密设置从tls改为ssl。

'host' => 'smtp.gmail.com',
'port' => 465, 
'encryption' => 'ssl',
于 2014-07-21T20:59:54.703 回答
0

你现在可能想通了,但我认为问题出在你的

    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);
});
于 2013-06-06T12:57:58.293 回答
0

如果 gmail 阻止您并且不允许您使用您的凭据登录,请尝试此操作。

使用您的 gmail 帐户登录,然后转到: https ://accounts.google.com/b/0/DisplayUnlockCaptcha

然后单击继续,然后您有几分钟的时间发送带有您的代码的邮件。在此之后,谷歌将允许从新来源登录该帐户。

于 2015-01-06T14:41:03.900 回答
0

我知道这是一个旧线程,但对于那些感兴趣的人。当前从 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}"

建议先配置 PHP 以在 laravel 上发送电子邮件。我使用假的 sendemail 并且它有效。您需要做的就是配置您的sendemail.ini file.

您可以查看这篇文章以了解如何做到这一点 https://stackoverflow.com/a/18185233/14106184

于 2020-10-14T16:31:02.973 回答