【问题标题】:Error 500 when sending email with CakePHP 3使用 CakePHP 3 发送电子邮件时出现错误 500
【发布时间】:2016-10-09 22:06:29
【问题描述】:

我正在使用 CakePHP 3 开发一个小型网页。它具有一个非常简单的联系表单,可以使用来自 1and1.es 的 SMTP 服务器发送电子邮件。

这是我在 config/app.php 中的传输配置:

'EmailTransport' => [
    'smtp' => [
        'className' => 'Smtp',
        // The following keys are used in SMTP transports
        'host' => 'smtp.1and1.es',
        'port' => 587,
        'timeout' => 30,
        'username' => 'myuser@mydomain.es',
        'password' => 'mypassword',
        'client' => null,
        'tls' => true,
        'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null),
    ],
],

它在本地开发服务器上运行良好(Ubuntu 14.04 上的 Xampp):我收到了所有电子邮件。但是在使用上述相同配置的生产服务器(1and1 共​​享服务器)上时,它会引发 500 Internal Server Error。两台服务器上的 PHP 版本相同。

我在 Stackoverflow 上发现了类似的问题,但没有任何帮助。顺便说一句,我无法访问服务器中的 apache 错误日志。

任何帮助将不胜感激。提前致谢。

编辑:

我刚刚发现 Cakephp error.log 文件有一些相关信息:

2016-10-09 22:18:38 Error: [Cake\Network\Exception\SocketException] Connection timed out
Request URL: /home/index
Referer URL: http://monitomolon.es/
Stack Trace:
#0 /homepages/14/d393557898/htdocs/monitomolon/vendor/cakephp/cakephp/src/Mailer/Transport/SmtpTransport.php(207): Cake\Network\Socket->connect()
#1 /homepages/14/d393557898/htdocs/monitomolon/vendor/cakephp/cakephp/src/Mailer/Transport/SmtpTransport.php(162): Cake\Mailer\Transport\SmtpTransport->_connect()
#2 /homepages/14/d393557898/htdocs/monitomolon/vendor/cakephp/cakephp/src/Mailer/Email.php(1344): Cake\Mailer\Transport\SmtpTransport->send(Object(Cake\Mailer\Email))
#3 /homepages/14/d393557898/htdocs/monitomolon/src/Form/ContactForm.php(56): Cake\Mailer\Email->send('Nombre: Diego A...')
#4 /homepages/14/d393557898/htdocs/monitomolon/vendor/cakephp/cakephp/src/Form/Form.php(179): App\Form\ContactForm->_execute(Array)
#5 /homepages/14/d393557898/htdocs/monitomolon/src/Controller/HomeController.php(13): Cake\Form\Form->execute(Array)
#6 [internal function]: App\Controller\HomeController->index()
#7 /homepages/14/d393557898/htdocs/monitomolon/vendor/cakephp/cakephp/src/Controller/Controller.php(435): call_user_func_array(Array, Array)
#8 /homepages/14/d393557898/htdocs/monitomolon/vendor/cakephp/cakephp/src/Http/ActionDispatcher.php(122): Cake\Controller\Controller->invokeAction()
#9 /homepages/14/d393557898/htdocs/monitomolon/vendor/cakephp/cakephp/src/Http/ActionDispatcher.php(96): Cake\Http\ActionDispatcher->_invoke(Object(App\Controller\HomeController))
#10 /homepages/14/d393557898/htdocs/monitomolon/vendor/cakephp/cakephp/src/Http/BaseApplication.php(83): Cake\Http\ActionDispatcher->dispatch(Object(Cake\Network\Request), Object(Cake\Network\Response))
#11 /homepages/14/d393557898/htdocs/monitomolon/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/14/d393557898/htdocs/monitomolon/vendor/cakephp/cakephp/src/Routing/Middleware/RoutingMiddleware.php(53): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#13 /homepages/14/d393557898/htdocs/monitomolon/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/14/d393557898/htdocs/monitomolon/vendor/cakephp/cakephp/src/Routing/Middleware/AssetMiddleware.php(88): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#15 /homepages/14/d393557898/htdocs/monitomolon/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/14/d393557898/htdocs/monitomolon/vendor/cakephp/cakephp/src/Error/Middleware/ErrorHandlerMiddleware.php(81): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#17 /homepages/14/d393557898/htdocs/monitomolon/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/14/d393557898/htdocs/monitomolon/vendor/cakephp/cakephp/src/Http/Runner.php(51): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#19 /homepages/14/d393557898/htdocs/monitomolon/vendor/cakephp/cakephp/src/Http/Server.php(92): Cake\Http\Runner->run(Object(Cake\Http\MiddlewareQueue), Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#20 /homepages/14/d393557898/htdocs/monitomolon/webroot/index.php(37): Cake\Http\Server->run()
#21 {main}

【问题讨论】:

  • 如果您无法找到/访问错误或将问题缩小到数组的一部分之外,我们将无法帮助您。
  • 那么 http 服务器的错误日志文件是怎么说的呢? 我们当然不能告诉你...
  • 所以,我预期的连接超时可能意味着您的 1and1 主机正在阻止 SMTP 连接。
  • 谢谢,@JonStirling。但是,为什么它在我的本地主机上工作而在远程服务器上失败?
  • @Diego 再次,可能 1and1 阻止了连接。我很确定 1and1 不会运行你的个人电脑;)

标签: php email smtp cakephp-3.0


【解决方案1】:

好吧,1and1.es 客户服务告诉我,smtp 服务器仅供电子邮件客户端使用,因此在我的共享服务器中禁止在脚本中使用它。所以,我通过使用原生 PHP 函数 mail() 和默认的 CakePHP 传输解决了这个问题。这样简单定义EmailTransport

'EmailTransport' => [
    'mail' => [
        'className' => 'Mail',
    ],
], 

【讨论】:

  • 您能否详细说明如何解决此问题?我对 1and1 也有同样的问题?
  • 更新了答案,@TheDevMan。
  • 您根本不需要任何其他详细信息。
猜你喜欢
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
相关资源
最近更新 更多