everlutionsk/email-bundle-2

Everlution 邮件组件,用于 Symfony 框架

安装次数: 9,648

依赖者: 2

建议者: 0

安全: 0

星标: 2

关注者: 9

分支: 3

开放问题: 2

类型:everlution-bundle

v2.0.0 2022-11-15 11:50 UTC

This package is auto-updated.

Last update: 2024-09-13 20:21:52 UTC


README

这个 Symfony 组件提供通过各种邮件系统发送和接收邮件消息的机制。

安装

composer require everlutionsk/email-bundle-2

启用组件

// app/AppKernel.php
public function registerBundles()
{
    return array(
        // ...
        new Everlution\EmailBundle\EverlutionEmailBundle()
    );
}

配置组件

以下配置片段描述了如何配置组件。配置需要服务的名称,这些服务实现相应的接口。唯一的例外是 域名,其中您应设置类似于 appdomain.com 的内容。

# app/config/config.yml

# Doctrine Configuration
doctrine:
    orm:
        entity_managers:
            default:
                mappings:
                    EverlutionEmailBundle: ~

# EmailBundle Configuration
everlution_email:
    domain_name: APP_DOMAIN
    enforced_delivery_address: EMAIL_ADDRESS|NULL
    mail_system: Implementation of Outbound\MailSystem\MailSystem
    async_stream: Implementation of Support\Stream\Stream
    attachment_swappers:
        inbound: Implementation of Inbound\Attachment\AttachmentSwapper
        outbound: Implementation of Outbound\Attachment\AttachmentSwapper
    request_processors:
        inbound: Implementation of Inbound\RequestProcessor
        outbound_message_event: Implementation of Outbound\MessageEvent\RequestProcessor

mail_system - 用于发送邮件消息的服务名称。此服务通常与 SMTP 服务器或某些事务性邮件平台(如 Mandrill)进行通信。

enforced_delivery_address - [可选] 用于覆盖每条外发消息中的收件人地址的电子邮件地址。

async_stream - 组件允许异步发送邮件消息。邮件消息存储在内存中,直到向此 Stream 添加某个值。一个好的例子是 Symfony 的 kernel.terminate 事件 Stream。

attachment_swappers - 在发送或接收消息后,组件尝试使用此 附件交换器 保存消息的附件。这些交换器可以以各种方式保存附件。

request_processors - 组件提供处理 传入消息外发消息事件 的通用机制。这些事件可能发生在例如外部 邮件系统 尝试发送计划中的消息时。然而,不同的 邮件系统 以不同的格式发送数据。请求处理器将此数据转换为此组件所知格式。

路由

组件提供处理 传入消息外发消息事件 的控制器。

# Handle outbound message events.
everlution.email.outbound_message_event:
    pattern: CUSTOM_PATTERN
    defaults: { _controller: everlution.email.outbound.message_event.controller:handleMessageEvent }
    methods: POST

# Handle inbound messages.
everlution.email.inbound:
    pattern: CUSTOM_PATTERN
    defaults: { _controller: everlution.email.inbound.controller:handleInbound }
    methods: POST

基本用法

创建新的外发消息

$message = new OutboundMessage();
$message->setSubject('Subject');
$message->setText('Message text.');             // Text for basic insight in email client.
$message->setHtml('<img src="cid:logo">');      // Email body.
$message->setFromEmail('support@example.com');
$message->setFromName('Sender name');
$message->setReplyTo('reply@example.com');
$message->setRecipients([
    new ToRecipient('recipient@mail.com', 'Recipient name'),
    new CcRecipient('cc-recipient@mail.com', 'Cc recipient name'),
    new BccRecipient('bcc-recipient@mail.com', 'Bcc recipient name'),
]);

$image = new BasicAttachment('image/png', 'logo', file_get_contents('logo.png'));
$attachment = new BasicAttachment('application/pdf', 'document.pdf', file_get_contents('document.pdf'));

$message->setImages([$image]);            // Images included into email body. 
$message->setAttachments([$attachment]);

获取邮件发送器

同步邮件发送器 - 立即调用邮件系统。

$mailer = $this->get('everlution.email.outbound.synchronous_mailer');

异步邮件发送器 - 在向相应的 Stream 添加值后调用邮件系统。

$mailer = $this->get('everlution.email.outbound.asynchronous_mailer');

发送/安排消息

$mailer->sendMessage($message);
$mailer->scheduleMessage($message, new \DateTime('+ 30 minutes'));

高级用法

消息转换器

每个消息在转发到 邮件系统 之前都可以进行修改。

转换外发消息
注册实现 OutboundMessageTransformer 的服务并添加以下标签

everlution.email.outbound.message_transformer

转换传入消息
注册实现 InboundMessageTransformer 的服务并添加以下标签

everlution.email.inbound.message_transformer

消息模板

某些 邮件系统 支持消息模板,这些模板在该系统中定义。以下代码显示了如何使用这些模板。

$parameter = new Parameter('PARAMETER_NAME', 'PARAMETER_VALUE');
$template = new Template('TEMPLATE_NAME', [$parameter]);

$message->setTemplate($template);

处理传入消息

传入消息可以通过监听 everlution.email.inbound 事件来处理。事件是 InboundEvent 的实例,包含有关 传入消息 和其 可存储版本(已保存到数据库中)的信息。


注意:如果应用程序不需要在数据库中创建与传入消息的关联,则应忽略消息的可存储版本。

模拟邮件系统

使用 everlution.email.mock.mail_system 服务作为邮件系统(请参阅 配置组件 部分)。

支持的邮件系统

Mandrill