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 不发送邮件的主要内容,如果未能解决你的问题,请参考以下文章

Django 密码重置。不发邮件

OBIEE代理发邮件不发邮件

云计算热知识:不发朋友圈,也能谈恋爱

iPad模拟器不发邮件?

vue三级联动,不发ajax请求

不发邮件的问题处理