vkr / external-email-bundle
一个用于加载外部文件中电子邮件内容的Symfony2/3包。包括通配符解析
Requires
- php: >=5.6
- symfony/symfony: ~2.8|~3.0
- vkr/settings-bundle: ~1.1
Requires (Dev)
- phpunit/phpunit: >=5.4
This package is auto-updated.
Last update: 2024-09-20 23:53:01 UTC
README
当前状态下,此包可以执行两项操作。首先,它会从一个外部文件(无论是您的系统还是互联网)中获取内容并发送它作为电子邮件消息。其次,它还可以将文件中包含的任何通配符替换为您想要的任何值。通配符解析的规则可以包括任何类型的PHP代码。
安装
此包依赖于Symfony和VKRSettingsBundle,有关其安装的详细信息,请参阅该包的文档。
您需要配置一些设置。
mailer_from_address和mailer_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=[])
第四个参数不能为空,如果没有解析器,则传递空数组。