我的网络托管服务在php中禁用了proc_open函数,因此我无法再发送电子邮件了。
我收到以下错误日志:
> proc_open() has been disabled for security reasons
我使用 Laravel 默认的 Swiftmailer。 有什么我能做的吗?
我的网络托管服务在php中禁用了proc_open函数,因此我无法再发送电子邮件了。
我收到以下错误日志:
> proc_open() has been disabled for security reasons
我使用 Laravel 默认的 Swiftmailer。 有什么我能做的吗?
proc_open
仅在Swiftmailer使用外部可执行文件(如sendmail)时才需要。您仍应该能够使用不同的传输方式,如SMTP、Mailgun或文档中描述的其他驱动程序。.env
文件中使用以下内容:MAIL_DRIVER=smtp
MAIL_HOST=your.smtp.host // (copy from your mail client)
MAIL_PORT=your.smtp.port // (copy from your mail client)
MAIL_USERNAME=your.smtp.username // (copy from your mail client)
MAIL_PASSWORD=your.smtp.password // (copy from your mail client)
这可能不适合作为永久解决方案,但可以让您测试无需 proc_open 就能发送邮件。我使用 Mailgun 的免费版并可以推荐它。
.env
文件中写着 smtp
但实际上并未使用,那么您应该去哪里查找呢?当然是 config/mail.php
!请检查 .env
中指定的驱动程序是否真正被使用,例如 'driver' => env('MAIL_DRIVER')
。 - Don't Panic请检查并更改您的php.ini
文件中是否包含此行。
disable_functions = exec,system,dl,passthru,chown,shell_exec,popen,proc_open
请查看这里,这是一个被安全模式禁用的函数列表。
更新
一旦您找到了它,请按照以下说明操作:
从php.ini
文件中的disable_functions中删除proc_open
或者
如果您没有访问/权限,请向您的托管提供商请求删除上述字符串。