簡體   English   中英

如何從Symfony2服務類發送電子郵件?

[英]How can I send emails from a Symfony2 service class?

我可以成功使用followig代碼從控制器發送電子郵件:

$message = \Swift_Message::newInstance()
    ->setSubject('Hello Email')
    ->setFrom('send@example.com')
    ->setTo('recipient@example.com')
    ->setBody($this->renderView('HelloBundle:Hello:email.txt.twig', array('name' => $name)))
;
$this->get('mailer')->send($message);

我如何修改代碼以從服務類中使用它?

您的服務具有外部依賴性,尤其是郵件服務。 您可以注入服務容器本身,也可以注入郵件服務。

如果您的服務只需要郵件服務而沒有別的,我建議只注入郵件服務。

以下是如何配置DIC以使用setter注入郵件服務:

<service id="my.service" class="Acme\DemoBundle\Service\Hello">
    <call method="setMailer">
        <argument type="service" id="mailer" />
    </call>
</service>

在你的課堂上,寫下你的二傳手:

class Hello
{
    protected $mailer;

    public function setMailer($mailer)
    {
        $this->mailer = $mailer;
    }

    public function sendEmail()
    {
        $message = \Swift_Message::newInstance()
            ->setSubject('Hello Email')
            ->setFrom('send@example.com')
            ->setTo('recipient@example.com')
            ->setBody($this->renderView('HelloBundle:Hello:email.txt.twig', array('name' => $name)))
        ;
        $this->mailer->send($message);
    }
}

注意:您必須在控制器中呈現模板並傳遞給此電子郵件功能,或者在您的服務中注入模板服務並進行渲染。

這取決於您如何聲明服務。 如果您將整個服務容器傳遞給它,您將不需要更改任何內容,否則您將需要至少傳遞給它的郵件和模板服務並更直接地調用( $this->get('service')將導致致命錯誤sinc取決於container

另請參見https://stackoverflow.com/a/12905319/258674

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM