使用Swift Mailer在Laravel中无法发送电子邮件-提供程序禁用了proc_open()函数

3

我的网络托管服务在php中禁用了proc_open函数,因此我无法再发送电子邮件了。

我收到以下错误日志:

> proc_open() has been disabled for security reasons

我使用 Laravel 默认的 Swiftmailer。 有什么我能做的吗?


你使用哪个操作系统? - lewis4u
你使用哪个邮件驱动程序,你的邮件配置是什么? - Don't Panic
MAIL_DRIVER=sendmail MAIL_HOST=localhost MAIL_PORT=25 - robcaa
MAIL_DRIVER=smtp MAIL_HOST=localhost MAIL_PORT=25 MAIL_ENCRYPTION=null - Ryan Worth
2个回答

6
proc_open仅在Swiftmailer使用外部可执行文件(如sendmail)时才需要。您仍应该能够使用不同的传输方式,如SMTP、Mailgun或文档中描述的其他驱动程序
作为测试,请尝试使用SMTP驱动程序,并输入您自己的SMTP邮件详细信息 - 无论您从何处使用电子邮件客户端发送电子邮件,都可以尝试在您的.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 的免费版并可以推荐它。


即使使用smtp,我仍然遇到proc_open错误,有什么想法吗?这是我的.env详细信息:MAIL_DRIVER = smtp MAIL_HOST = smtp.gmail.com MAIL_PORT = 465 MAIL_FROM_ADDRESS = myemail@gmail.com MAIL_FROM_NAME = myemail@gmail.com MAIL_USERNAME = myusername MAIL_PASSWORD = 'mypasswordwithspecialcharacters' MAIL_ENCRYPTION = ssl - Shamseer Ahammed
1
@ShamseerAhammed 正如我的回答所说,只有在使用外部可执行文件时才会出现该错误。因此,如果您的 .env 文件中写着 smtp 但实际上并未使用,那么您应该去哪里查找呢?当然是 config/mail.php!请检查 .env 中指定的驱动程序是否真正被使用,例如 'driver' => env('MAIL_DRIVER') - Don't Panic

2

请检查并更改您的php.ini文件中是否包含此行。

disable_functions = exec,system,dl,passthru,chown,shell_exec,popen,proc_open

请查看这里这是一个被安全模式禁用的函数列表。

更新
一旦您找到了它,请按照以下说明操作: 从php.ini文件中的disable_functions中删除proc_open

或者

如果您没有访问/权限,请向您的托管提供商请求删除上述字符串。


我调用了phpinfo()并搜索了proc_open()。以下是结果:disable_functions: dl、system、passthru、kill、virtual、http_connect、connect、link、popen、...、openlog、shell_exec、exec、proc_open - robcaa
1
我向我的主机提出了问题,收到了这样的回答:“由于安全原因,我们不会重新启用此功能。” - robcaa
那我可以在不使用proc_open的情况下使用SwiftMailer吗? - robcaa
@robcaa:抱歉,我对此一无所知,但您可以在swiftmailer上提出您的第二个问题。 - AddWeb Solution Pvt Ltd
1
为什么有人会将proc_open从禁用函数中删除!?请不要误导人们,这是一个非常危险的函数,不应该使用。 - Mecanik
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接