【问题标题】:Prepend email subject prefix when send mails with Laravel使用 Laravel 发送邮件时添加电子邮件主题前缀
【发布时间】:2013-12-30 22:04:46
【问题描述】:

如果我像这样使用 Laravel 发送电子邮件:

Mail::send('folder.view', $data, function($msg)
{
    $msg->to('dest@email.com');
    $msg->subject('email subject');
}); 

我想扩展 Laravel 的核心类 Illuminate\Mail\Message.php 像这样设置默认主题前缀:

[Projectname] email subject

如何扩展核心类以避免被作曲家更新覆盖?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    子类Message 并将您的代码放入不同的命名空间和文件中:

    <?php
    
    namespace my\namespace;
    
    class MyMessage extends Illuminate\Mail\Message
    {
        // ...
    }
    

    【讨论】:

    • 这正是我所做的。我的课程在 app/lib/Message.php 并且 app/lib 也是自动加载的。但是当我发送电子邮件时,我的主题仍然相同;没有前缀。我使用了 Karl Laurentius Roos 发布的方法。这正是我所做的。
    • @HeikoK.,您可能还需要提供自己的 MailServiceProviderconfigure Laravel to use it via its Inversion of Control container
    • 能否提供完整的代码示例? Message 类是 MailServiceProvider 的基础类。对不起,我有点困惑,无法理解它。我对 Laravel 很陌生...:-/
    • @HeikoK.,我目前没有可用于测试的 Laravel 项目。不幸的是,看起来覆盖邮件功能有点涉及;邮件没有Manager class。正如我上面所说,我相信你必须提供你自己的 MailServiceProvider 来扩展 Laravel ,也许还需要一个 Mailer 。然后你可以使用the IoC container 将其插入 Laravel。
    【解决方案2】:

    请随意接受 Chris 的回答,因为他是正确的,我只是在扩展他所说的话。 Illuminate\Mail\Message 有一个subject() 方法,它是设置主题的方法。它看起来像这样:

    /**
     * Set the subject of the message.
     *
     * @param  string  $subject
     * @return \Illuminate\Mail\Message
     */
    public function subject($subject)
    {
        $this->swift->setSubject($subject);
    
        return $this;
    }
    

    如果你像 Chris 在他的回答中所说的那样扩展它,你可以像这样扩展它:

    public function subject($subject)
    {
        $this->swift->setSubject('[' . Config::get('app.project_name') . '] ' . $subject);
    
        return $this;
    }
    

    假设您设置了 app.project_name 配置指令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 2014-11-21
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      • 2022-08-13
      相关资源
      最近更新 更多