Php Yii2-在运行时设置邮件传输参数

Php Yii2-在运行时设置邮件传输参数,php,yii2,Php,Yii2,我正在尝试设置邮件程序的配置,例如在下面添加的基本模板config/web.php中 $config = [ 'components' => [ 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'useFileTransport' => false, 'transport' => [ '

我正在尝试设置邮件程序的配置,例如在下面添加的基本模板
config/web.php

$config = [
    'components' => [
        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'useFileTransport' => false,
            'transport' => [
                'class' => 'Swift_SmtpTransport',
                'host' => 'testmailhost.com', // want to replace with $mail_host
                'username' => 'test@test.com',
                'password' => 'testing111',
                'port' => '587',
                'encryption' => 'tls'
            ]
        ]
    ]
];
现在我想设置存储在数据库表设置中的主机、用户名、密码端口等的值。那么如何替换这些值呢

我已经创建了一个组件,可以按如下方式访问这些值

$st = Yii::$app->getTable;
$mail_host = $st->settings('general', 'mail_host');

Yii2 Mailer类为您提供了一个名为的公共方法,您可以将传输配置数组作为param传递给该方法

在配置中,只需添加mailer组件配置,并通过自定义组件添加
传输
配置

$config = [
    'components' => [
        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'useFileTransport' => false,
        ]
    ]
];
请参阅下面的代码,您现在可以在组件中使用它从数据库添加传输配置

Yii::$app->mailer->setTransport(
        [
            'class' => 'Swift_SmtpTransport',
            'host' => 'localhost', 
            'username' => 'username',
            'password' => 'password',
            'port' => '587', 
            'encryption' => 'tls'
        ]
    );

希望这会有所帮助。

Yi2 Mailer类为您提供了一个名为的公共方法,您可以将传输配置数组作为参数传递给该方法

在配置中,只需添加mailer组件配置,并通过自定义组件添加
传输
配置

$config = [
    'components' => [
        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'useFileTransport' => false,
        ]
    ]
];
请参阅下面的代码,您现在可以在组件中使用它从数据库添加传输配置

Yii::$app->mailer->setTransport(
        [
            'class' => 'Swift_SmtpTransport',
            'host' => 'localhost', 
            'username' => 'username',
            'password' => 'password',
            'port' => '587', 
            'encryption' => 'tls'
        ]
    );

希望这能有所帮助。

那么你的意思是,在我的组件中,我可以添加上面的代码片段并使用-例如“username”=>$username,-对吗?我还可以为其他参数这样做吗-例如,我想包括贝宝信息,比如-“client\u id”=>“YOUR-client-id-FROM-paypal”,“client\u secret”=>“YOUR-client-secret-FROM-paypal”,但您声明了Yi2 mailer类提供公共方法
setTransport
。那么我如何才能为这些参数实现这一点呢?@Joshi Mailer类与Paypal凭据无关,上面的答案是针对Mailer组件的,如果您还有其他问题,请添加新的,是的,您可以通过复制粘贴的方式使用上述代码段,只需更改数据库中的
用户名
密码
,非常感谢您的帮助。我将为paypal添加另一个问题。嗨,Omer,我为paypal参数添加了另一个问题-链接--请看一下,它是如何解决的。您的意思是,在我的组件中,我可以添加上述代码片段并使用-例如“username”=>$username,-我说得对吗?我还可以为其他参数做这件事吗-例如,我想包括贝宝信息,比如-'client\u id'=>'YOUR-client-id-FROM-paypal','client\u secret'=>'YOUR-client-secret-FROM-paypal',但您声明yii2 mailer类提供公共方法
setTransport
。那么我如何才能为这些参数实现这一点呢?@Joshi Mailer类与Paypal凭据无关,上面的答案是针对Mailer组件的,如果您还有其他问题,请添加新的,是的,您可以通过复制粘贴的方式使用上述代码段,只需更改数据库中的
用户名
密码
,非常感谢您的帮助。我将为paypal添加另一个问题。嗨,Omer,我为paypal参数添加了另一个问题-链接--请看一看,它是如何解决的。