【问题标题】:Error: [Cake\Network\Exception\SocketException] Connection timed out错误:[Cake\Network\Exception\SocketException] 连接超时
【发布时间】:2017-08-25 07:39:09
【问题描述】:

我无法从我的 cakephp 3 网站发送邮件。我尝试了一个简单的 testmail.php 文件,我收到了电子邮件,但是当我尝试在 app.php 上设置相同的用户名和密码时,连接超时。

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

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

可能出了什么问题:

这是错误日志:

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}

【问题讨论】:

    标签: php cakephp cakephp-3.0


    【解决方案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' => 'test@gmail.com',
                '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('noreply@example.com');
            $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);
              }
        }
    

    希望对你有帮助

    【讨论】:

    • 我在 localhost 上尝试的设置在我将其上传到服务器时正常工作,但它不起作用。
    • 也许您的服务器上有防火墙。如果是 linux,请尝试 ping 服务器,如果回答,请尝试使用 telnet 手动连接到您的 smtp 服务器:“telnet [地址或您的服务器] [端口、25/465 或 587] ”。在窗口中,您可以检查与 putty 的连接。
    • 正如我之前所说,没有防火墙问题,因为 testmail.php 与 SMTP 25/465/587 一起工作正常。
    猜你喜欢
    • 2021-04-18
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多