当前位置: 首页 > 知识库问答 >
问题:

如何从Symfony2服务类发送电子邮件?

宇文灿
2023-03-14

我可以成功地使用下面的代码从控制器发送电子邮件:

$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);

我必须如何修改代码以从服务类使用它?

共有2个答案

魏元白
2023-03-14

这取决于您如何声明服务。如果你把整个服务容器传递给它,你不需要改变任何东西,否则你至少需要邮件和模板服务传递给它,并更直接地调用($this-

另见https://stackoverflow.com/a/12905319/258674

徐正雅
2023-03-14

您的服务具有外部依赖性,特别是邮件服务。可以注入服务容器本身,也可以注入邮件服务。

如果您的服务只需要mailer服务而不需要其他服务,我建议只使用mailer服务。

以下是如何配置DIC,以使用setter注入邮件服务:

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

在类中,编写setter:

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);
    }
}

注意:您必须在控制器中呈现模板并传递到此电子邮件功能,或者插入模板服务并在服务中呈现。

 类似资料:
  • 我创建了下一个类: 我在我的服务中声明它是一项服务。yml 在我的控制器中,调用服务: 电子邮件已发送,但页面仍在加载30秒,我有一个来自开发人员工具栏的警报:加载Web调试工具栏时发生错误(404:未找到)。您想打开分析器吗?如果接受消息,Symfony分析器不显示任何错误。如果取消,消息开发人员工具栏不会出现。 我做错了什么? 非常感谢。

  • 问题内容: 我希望我的网站能够发送电子邮件而不刷新页面。所以我想使用Javascript。 这是我要调用的函数的方式,但是我不确定要在javascript函数中放入什么。通过研究,我发现了一个使用mailto方法的示例,但是我的理解是实际上并没有直接从站点发送邮件。 所以我的问题是,我在哪里可以找到要放在JavaScript函数中的内容,以便直接从网站发送电子邮件。 问题答案: 您不能直接使用ja

  • 我试图发送电子邮件使用gmail smtp使用javax.mail.下面是我的代码 代码工作正常当我在本地服务器上运行它时,但当我尝试在Elastic beanstek上运行它时(我的服务器在AWS EBS上运行),身份验证失败异常即将到来注意:我已打开从Google A/c设置访问不太安全的应用程序,但我仍然收到此错误 javax.mail.身份验证失败异常:534-5.7.14请通过您的网络浏

  • 问题内容: 我在寻找有关如何 从localhost WAMP发送电子邮件的 适当信息。以及如何获得从特定的授权电子邮件地址发送电子邮件的授权以发送任何其他电子邮件地址。 如何配置这整个步骤向我解释了细节,我已经在这里访问了一些Stack Overflow的答案以及博客文章,但是所有内容都很混乱且过时,因此可能无法正常工作。所以我需要Stack Overflow用户帮助。谢谢。 问题答案: 从配置工

  • 我有一个服务器与静态IP在我的家里,我服务我自己的网页与一个域和所有工作良好。 在我的网页,你可以通过电子邮件和密码注册。当您注册一个名为nodemailer的节点模块,从google帐户发送电子邮件时,问题是google帐户有一个发送电子邮件的限制。 所以我需要将nodemailer模块连接到我自己家里的服务器上。 我在谷歌上搜索,但没有类似的答案。 如何在NodeJS中使用后缀?? http: