在platform.sh为Symfony 3项目配置smtp

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在platform.sh为Symfony 3项目配置smtp相关的知识,希望对你有一定的参考价值。

我尝试在platform.sh上为我的Symfony 3项目配置SMTP,但我没有让它工作。

我按照这个文档[https://docs.platform.sh/administration/web/email.html#sending-e-mail][1]

我无法编辑parameters.yml,因为它是在构建过程中生成的。所以我试着编辑paramters.yml.dist。并使用以下代码更新它:

mailer_transport:  smtp
mailer_host:       "%env(PLATFORM_SMTP_HOST)%"
mailer_user:       null
mailer_password:   null

当我这样做时,我将在构建期间收到以下错误消息:

W:   [RuntimeException]                                                               
W:   An error occurred when executing the "'cache:clear --no-warmup'" command:        
W:                                                                                    
W:     [SymfonyComponentDependencyInjectionExceptionParameterNotFoundException]    
W:     You have requested a non-existent parameter "env(platform_smtp_host)". 

所以我尝试编辑paramters_platform.php并添加以下代码:

$container->setParameter('mailer_host','%env(PLATFORM_SMTP_HOST)%');

然后构建过程将工作,但我在加载网站时收到以下错误消息:

ParameterNotFoundException in ParameterBag.php line 84:
You have requested a non-existent parameter "env(platform_smtp_host)".
in ParameterBag.php line 84
at ParameterBag->get('env(platform_smtp_host)') in ParameterBag.php line 200
at ParameterBag->resolveString('%env(PLATFORM_SMTP_HOST)%', array('mailer_host' => true, 'env(platform_smtp_host)' => true)) in ParameterBag.php line 171
at ParameterBag->resolveValue('%env(PLATFORM_SMTP_HOST)%', array('mailer_host' => true)) in ParameterBag.php line 200
at ParameterBag->resolveString('%mailer_host%', array('mailer_host' => true)) in ParameterBag.php line 171
at ParameterBag->resolveValue('%mailer_host%', array()) in ParameterBag.php line 161
at ParameterBag->resolveValue(array('transport' => '%mailer_transport%', 'host' => '%mailer_host%', 'username' => '%mailer_user%', 'password' => '%mailer_password%'), array()) in ParameterBag.php line 161
at ParameterBag->resolveValue(array(array('transport' => '%mailer_transport%', 'host' => '%mailer_host%', 'username' => '%mailer_user%', 'password' => '%mailer_password%'))) in MergeExtensionConfigurationPass.php line 45
at MergeExtensionConfigurationPass->process(object(ContainerBuilder)) in MergeExtensionConfigurationPass.php line 39
at MergeExtensionConfigurationPass->process(object(ContainerBuilder)) in Compiler.php line 104
at Compiler->compile(object(ContainerBuilder)) in ContainerBuilder.php line 597
at ContainerBuilder->compile() in bootstrap.php.cache line 2687
at Kernel->initializeContainer() in bootstrap.php.cache line 2465
at Kernel->boot() in bootstrap.php.cache line 2496
at Kernel->handle(object(Request)) in app_dev.php line 30

有没有人设法让SMTP在plaform.sh上工作?或者有没有人知道如何摆脱这个问题?

非常感谢你!

答案

看起来你正在使用旧的Symfony 3x版本。 %env()%语法在3.2版本中引入。作为解决方法,您可以在配置目录中创建parameters.php文件,并将其导入config.yml。在这个文件里面只需使用getenv() php函数设置所需的容器参数:

<?php

$container->setParameter('mailer_host', getenv('PLATFORM_SMTP_HOST'));

一些文章:

设置外部参数:http://symfony.com/doc/3.3/configuration/external_parameters.html getenv():http://php.net/manual/en/function.getenv.php

以上是关于在platform.sh为Symfony 3项目配置smtp的主要内容,如果未能解决你的问题,请参考以下文章

在 Symfony 3 中为集合的每个元素应用特定的验证组

在命令 symfony 3.4 上获取项目目录

如何在 AWS elasticbeanstalk 上部署 symfony 3 项目

将现有的 Symfony 项目从 2.8.* 更新到 4.26.3

php Platform.sh提供的Magento 2 Env.php配置文件

为啥在 prod mod 的 symfony 5.3 中出现 503 错误,而在 dev mod 中却没有