vkr/external-email-bundle

一个用于加载外部文件中电子邮件内容的Symfony2/3包。包括通配符解析

1.0.3 2017-03-23 22:43 UTC

This package is auto-updated.

Last update: 2024-09-20 23:53:01 UTC


README

当前状态下,此包可以执行两项操作。首先,它会从一个外部文件(无论是您的系统还是互联网)中获取内容并发送它作为电子邮件消息。其次,它还可以将文件中包含的任何通配符替换为您想要的任何值。通配符解析的规则可以包括任何类型的PHP代码。

安装

此包依赖于Symfony和VKRSettingsBundle,有关其安装的详细信息,请参阅该包的文档。

您需要配置一些设置。

mailer_from_addressmailer_from_name对应于电子邮件From头的名称和地址。

还有两个任意命名的设置,一个用于外部文件位置,另一个用于电子邮件主题。您需要为使用此包发送的每条消息定义一对这些设置。文件位置设置可以是完整的系统路径或URL。

有关如何配置设置,请参阅VKRSettingsBundle文档。

使用方法

无通配符

如果没有通配符,使用方法很简单。在控制器中编写此代码

$emailParser = $this->get('vkr_external_email.parser');
$message = $emailParser->parse('file_location_setting', 'email_subject_setting',
                               'receiver@address.com', []);
$mailer = $this->get('mailer');
$mailer->send($message);

有通配符

您可以在外部文件中包含任意数量的待解析通配符。如果您选择使用它们,则需要编写一些额外的代码。

通配符名称

通配符名称可以包括只包含大写ASCII字母数字字符和下划线,并且必须以字母开头。您需要在通配符前后包含%符号:%MY_WILDCARD%

通配符解析器

对于您创建的每个通配符,您需要编写一个解析器类,该类定义了如何转换此通配符。解析器类只是一个必须实现VKR\ExternalEmailBundle\Interfaces\EmailParserInterface并定义其parse()方法的PHP类。

解析器类的名称应遵循一种约定:将'Parser'附加到小驼峰式的通配符名称。因此,如果您的通配符称为MY_WILDCARD,则您的解析器类应称为MyWildcardParser。这些类的命名空间没有约定。

以下是一个简单的解析器类的示例

class MyWildcardParser implements VKR\ExternalEmailBundle\Interfaces\EmailParserInterface
{
    public function parse($additionalArguments=[])
    {
        return 'foo';
    }
}

此代码表示,您的外部文件中的每个%MY_WILDCARD%实例都将转换为foo

定义您的解析器类后,您必须启动它们。为了做到这一点,您必须将解析器类实例的数组作为parse()方法的第四个参数传递。

$wildcardParsers = [
    new MyWildcardParser(),
    new SomeOtherWildcardParser(),
];
$message = $emailParser->parse('file_location_setting', 'email_subject_setting',
                               'receiver@address.com', $wildcardParsers);

建议将所有解析器注册为Symfony服务,并通过$this->get()实例化它们。

额外参数

您可能想要将参数传递给解析器的parse()方法。为了做到这一点,您可以指定任意数量的额外参数,并将它们作为第五个参数传递。

$wildcardParsers = [
    new MyWildcardParser(),
];
$args = [
    'value' => 'bar',
];
$message = $emailParser->parse('file_location_setting', 'email_subject_setting',
                               'receiver@address.com', $wildcardParsers);

然后,在您的解析器中

    public function parse($additionalArguments=[])
    {
        if (isset($additionalArguments['value'])) {
            return $additionalArguments['value'];
        }
        return 'foo';
    }

现在%MY_WILDCARD%将更改为'bar'而不是'foo'。

需要注意的是,如果您有多个解析器,所有参数都将传递给每个解析器。为了避免意外行为,为每个解析器使用唯一的参数名称。

API

void ExternalEmailParser::__construct(VKR\SettingsBundle\Services\SettingsRetriever $settingsRetriever)

Swift_Message ExternalEmailParser::parse(string $emailFileSettingName, string $emailSubjectSettingName, string $receiverAddress, VKR\ExternalEmailBundle\Interfaces\EmailParserInterface[] $wildcardParsers, array $additionalArguments=[])

第四个参数不能为空,如果没有解析器,则传递空数组。