Laravel 5.1发送电子邮件错误:stream_set_blocking()期望参数1为resource,null给定

时间:2016-03-20 15:01:30

标签: php email laravel laravel-5.1 swiftmailer

我正在使用Laravel 5.1,我想发送电子邮件(smtp) 这是我的.env配置:

MAIL_DRIVER=smtp
MAIL_HOST=mail.mydomain.ir
MAIL_PORT=587
MAIL_USERNAME=account@mydomain.ir
MAIL_PASSWORD= ....
MAIL_ENCRYPTION=null

,这在config/mail.php

'from' => ['address' =>env('MAIL_USERNAME', 'account@mydomain.ir'), 'name' => 'ESET'],

以及发送简单测试电子邮件的测试功能:

public function getEm()
{
    $input = [] ;
    Mail::send('emails.simple', $input, function($message) {
            $message->to('some@gmail.com', 'Learning')->subject('Contact view Our Contact Form');
    });
    return 'Your message has been sent';
}

当我在localhost(在WampServer中)测试这个项目时,我工作得很好并发送电子邮件确定!

但是当我想在服务器(在线)中使用它时,我将更改我的.env配置,因为我的主机支持说的是这样的:

MAIL_DRIVER=smtp
MAIL_HOST=localhost
MAIL_PORT=587
MAIL_USERNAME=account@mydomain.ir
MAIL_PASSWORD=....
MAIL_ENCRYPTION=null

我看到这个错误:

  

StreamBuffer.php第275行中的ErrorException:

     

stream_set_blocking()期望参数1为资源,给定

为null      

在HandleExceptions的StreamBuffer.php第275行 - > handleError('2',   'stream_set_blocking()期望参数1是资源,null   给予”,   '/home2/net45987/domains/esetn32.ir/public_html/la/user/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php',   '275',array('host'=>'localhost','timeout'=> '30','options'=>   array(),'streamContext'=>资源,'errno'=> null,'errstr'=>   null))在StreamBuffer.php第275行的stream_set_blocking(null,'1')   在Swift_Transport_StreamBuffer-> _establishSocketConnection()中   StreamBuffer.php第62行   Swift_Transport_StreamBuffer-> initialize(array('protocol'=> null,   'host'=> 'localhost','port'=> '587','超时'=> '30','阻塞'   => '1','tls'=> false,'type'=> '1','stream_context_options'=> array()))在AbstractSmtpTransport.php第113行中   Mailer.php第79行中的Swift_Transport_AbstractSmtpTransport-> start()   在Swift_Mailer->在Mailer.php中发送(对象(Swift_Message),array())   Mailer的第395行 - > sendSwiftMessage(对象(Swift_Message))in   Mailer.php第181行在Mailer->发送('emails.simple',array(),   对象(Closure))在Facade.php第222行中   Facade :: __ callStatic('send',array('emails.simple',array(),   对象(Closure)))在CallbackController.php第114行中   Mail :: send('emails.simple',array(),object(Closure))in   在CallbackController-> getEm()

的CallbackController.php第114行

1 个答案:

答案 0 :(得分:1)

你解决了这个问题已经很久了吗?我最近遇到了同样的问题。解决方法是:

  1. 云虚拟机环境不支持stream_socket_client功能。
  2. 只需将他改为fsockopen function.port是465 ssl,因为25被禁止。类似于$this->stream = @fsockopen($host, $this->params['port'], $errno, $errstr, $timeout)
  3. 在云虚拟机背景中打开fsockopen功能。
  4. 我的英语不太好,抱歉。