Laravel / XAMPP / Sendmail不发送邮件

时间:2013-06-01 15:56:23

标签: apache laravel smtp xampp sendmail.exe

我对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 个答案:

答案 0 :(得分:3)

我发布了一个答案here,可能会解决这个问题。

简而言之,当使用端口465时,需要将默认加密设置从tls更改为ssl。

'host' => 'smtp.gmail.com',
'port' => 465, 
'encryption' => 'ssl',

答案 1 :(得分: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);
});

答案 2 :(得分:0)

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

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

然后点击“继续”,您只需几分钟即可使用您的代码发送邮件。 在此之后谷歌将允许从新来源登录该帐户。

答案 3 :(得分:0)

我知道这是一个老话题,但对于那些感兴趣的人来说。当前从本地主机使用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://stackoverflow.com/a/18185233/14106184