2017-08-24 140 views
0

我无法从我的cakephp 3网站发送邮件。我尝试了一个simiple testmail.php文件,我收到了电子邮件,但是当我尝试在app.php上设置相同的用户名和密码时,我正在连接超时。错误:[Cake Network Exception SocketException]连接超时

Error: [Cake\Network\Exception\SocketException] Connection timed out 

这是1and1.com。在本地主机上设置时,我可以发送邮件。

什么是错的:

这里是error.log中:

2017-08-24 14:05:09 Error: [Cake\Network\Exception\SocketException] Connection timed out 
Request URL: /contactus/ 
Referer URL: https://example.com/ 
Stack Trace: 
#0 /homepages/30/d665828522/htdocs/app/vendor/cakephp/cakephp/src/Mailer/Transport/SmtpTransport.php(207): Cake\Network\Socket->connect() 
#1 /homepages/30/d665828522/htdocs/app/vendor/cakephp/cakephp/src/Mailer/Transport/SmtpTransport.php(162): Cake\Mailer\Transport\SmtpTransport->_connect() 
#2 /homepages/30/d665828522/htdocs/app/vendor/cakephp/debug_kit/src/Mailer/Transport/DebugKitTransport.php(79): Cake\Mailer\Transport\SmtpTransport->send(Object(Cake\Mailer\Email)) 
#3 /homepages/30/d665828522/htdocs/app/vendor/cakephp/cakephp/src/Mailer/Email.php(1344): DebugKit\Mailer\Transport\DebugKitTransport->send(Object(Cake\Mailer\Email)) 
#4 /homepages/30/d665828522/htdocs/app/src/Controller/UsersController.php(335): Cake\Mailer\Email->send() 
#5 /homepages/30/d665828522/htdocs/app/src/Controller/UsersController.php(113): App\Controller\UsersController->_sendVerificationCode(Object(Cake\ORM\Entity)) 
#6 [internal function]: App\Controller\UsersController->ajaxRegister() 
#7 /homepages/30/d665828522/htdocs/app/vendor/cakephp/cakephp/src/Controller/Controller.php(435): call_user_func_array(Array, Array) 
#8 /homepages/30/d665828522/htdocs/app/vendor/cakephp/cakephp/src/Http/ActionDispatcher.php(121): Cake\Controller\Controller->invokeAction() 
#9 /homepages/30/d665828522/htdocs/app/vendor/cakephp/cakephp/src/Http/ActionDispatcher.php(95): Cake\Http\ActionDispatcher->_invoke(Object(App\Controller\UsersController)) 
#10 /homepages/30/d665828522/htdocs/app/vendor/cakephp/cakephp/src/Http/BaseApplication.php(83): Cake\Http\ActionDispatcher->dispatch(Object(Cake\Network\Request), Object(Cake\Network\Response)) 
#11 /homepages/30/d665828522/htdocs/app/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Http\BaseApplication->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response), Object(Cake\Http\Runner)) 
#12 /homepages/30/d665828522/htdocs/app/vendor/cakephp/cakephp/src/Routing/Middleware/RoutingMiddleware.php(62): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response)) 
#13 /homepages/30/d665828522/htdocs/app/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Routing\Middleware\RoutingMiddleware->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response), Object(Cake\Http\Runner)) 
#14 /homepages/30/d665828522/htdocs/app/vendor/cakephp/cakephp/src/Routing/Middleware/AssetMiddleware.php(88): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response)) 
#15 /homepages/30/d665828522/htdocs/app/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Routing\Middleware\AssetMiddleware->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response), Object(Cake\Http\Runner)) 
#16 /homepages/30/d665828522/htdocs/app/vendor/cakephp/cakephp/src/Error/Middleware/ErrorHandlerMiddleware.php(81): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response)) 
#17 /homepages/30/d665828522/htdocs/app/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Error\Middleware\ErrorHandlerMiddleware->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response), Object(Cake\Http\Runner)) 
#18 /homepages/30/d665828522/htdocs/app/vendor/cakephp/cakephp/src/Http/Runner.php(51): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response)) 
#19 /homepages/30/d665828522/htdocs/app/vendor/cakephp/cakephp/src/Http/Server.php(90): Cake\Http\Runner->run(Object(Cake\Http\MiddlewareQueue), Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response)) 
#20 /homepages/30/d665828522/htdocs/app/webroot/index.php(37): Cake\Http\Server->run() 
#21 {main} 

回答

-1

能否请您确认您的自定义EmailTransport配置,并确保您使用您的自定义配置EmailTransport,而不是默认的一个?

在App.php EmailTransport配置应该是这样的:

'EmailTransport' => [ 
     'default' => [ 
      'className' => 'Mail', 
      // The following keys are used in SMTP transports 
      'host' => 'localhost', 
      'port' => 25, 
      'timeout' => 30, 
      'username' => 'user', 
      'password' => 'secret', 
      'client' => null, 
      'tls' => null, 
      'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null), 
     ], 
     'custom' => [ 
      'className' => 'Smtp', 
      // The following keys are used in SMTP transports 
      'host' => 'A.B.C.D', // Ip of your server 
      'port' => XX, // Port that you use: 25 or 465 or 587 
      'timeout' => 60, 
      'username' => 'MyUsername', 
      'password' => 'MyPassword', 

      'client' => null, 
      'tls' => true, 
      'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null), 
     ], 
     'debug' => [ 
      'className' => 'Debug', 
      // The following keys are used in SMTP transports 
      'host' => 'A.B.C.D', // Ip of your server 
      'port' => XX, // Port that you use: 25 or 465 or 587 
      'timeout' => 60, 
      'username' => 'MyUsername', 
      'password' => 'MyPassword', 

      'client' => null, 
      'tls' => null, 
      'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null), 
     ], 
     'gmail' => [ 
      'host' => 'ssl://smtp.gmail.com', 
      'port' => 465, 
      'timeout' => 30, 
      'username' => '[email protected]', 
      'password' => 'password_of_test', 
      'headers' => array(
       'X-Mailer' => 'PHP' 
      ), 
      'charset' => 'UTF8', 
      'headerCharset' => 'UTF8', 
      'className' => 'Smtp', 
      'tls' => null 
     ], 

    ], 

而且你的控制器内发送的邮件是这样的:

<?php 
    namespace App\Controller; 

    use Cake\Mailer\Email; 
    /* ... */ 

    private function sendResetEmail($msg, $user) { 

     $email = new Email(); 
     $email->transport('custom'); // Here we call to ou custom config 

     $email->template('YourEmailTemplate'); 
     $email->emailFormat('both'); 
     $email->from('[email protected]'); 
     $email->to($user->email, $user->username); 
     $email->subject('Reset your password'); 
     $email->viewVars(['msg' => $msg, 'username' => $user->username]); 
     try { 
      $email->send(); 
      } catch(Exception $e) { 
      throw new Exception("Exception caught with message: " . $e->getMessage().'\n'.$email->smtpError); 
      } 
    } 

希望它可以帮助

+0

我试过的设置本地主机正常工作时,我上传相同的服务器,它不工作。 – TheDevMan

+0

也许在你的服务器上有防火墙。如果它是一个Linux,尝试ping服务器,如果它回答了尝试用telnet手动连接到你的smtp服务器:“** telnet [地址或你的服务器] [端口,25/465或587] **”。在窗口上,您可以使用** putty **来检查连接。 – Benfarhat

+0

正如我之前所说,没有防火墙问题,因为testmail.php工作正常与SMTP 25/465/587都工作。 – TheDevMan