定制 optimeconsulting/sf-emails 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

optimeconsulting/sf-emails

Composer 安装命令:

composer require optimeconsulting/sf-emails

包简介

README 文档

README

Bundle para manejo de envio y contenido de correos.

Instalación

Se debe instalar y configurar el bundle de sf-utils

Luego ejecutar:

composer require "optimeconsulting/sf-emails" "~4.1@dev"

Configuración

Agregar como un bundle en el config/bundles.php:

<?php

return [
    ...
    Optime\Email\Bundle\OptimeEmailBundle::class => ['all' => true],
];

Configuración de opciones:

Crear/Ajustar el archivo config/packages/optime_emails.yaml:

# Por ahora sin nada que agregar, no se necesita crea el archivo

Crear el archivo config/routes/optime_emails.yaml:

optime_emails:
  resource: "@OptimeEmailBundle/Controller/"
  prefix:   /{_locale}/admin/emails
  type:     attribute

IMPORTANTE

Configurar variable de entorno MAILER_DSN si no se tiene el valor real para esta variable usar MAILER_DSN=null://null

Crear entidad EmailApp

La clase EmailApp debe implementar Optime\Email\Bundle\Entity\EmailAppInterface:

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Optime\Email\Bundle\Entity\EmailAppInterface;

#[ORM\Entity]
class EmailApp implements EmailAppInterface
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column(type: 'integer')]
    private ?int $id;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function __toString(): string
    {
        return (string)$this->getId();
    }

    public function getFromEmail(): string
    {
        return 'from@from.com';
    }

    public function getFromName(): string
    {
        return 'From Name';
    }
}

Tener en cuenta que si se están usando anotaciones para el proyecto, la entidad EmailApp tambien debe usar anotaciones en vez de atributos de php.

Agregar configuracion de la entidad EmailApp en el config/packages/doctrine.yaml:

doctrine:
    ...
    orm:
        ...
        resolve_target_entities:
            Optime\Email\Bundle\Entity\EmailAppInterface: App\Entity\EmailApp

Correr comando de doctrine:

symfony console doctrine:schema:update -f

Importante

Este bundle requiere del bundle de sfutils, el se va a instalar automáticamente. De todas formas será necesario configurar dicho bundle siguiendo su documentación.

Tambien será necesario instalar y configurar las extensiones de doctrine, especificamente la de traducciones, para ello seguir la documentación del bundle StofDoctrineExtensionsBundle

Uso

Ejemplo básico:

use Optime\Email\Bundle\Service\Email\MailerFactory;
use Optime\Email\Bundle\Service\Email\Recipient\EmailRecipient;

class XXXMailerSender
{
    public function __construct(
        private MailerFactory $factory
    ) {
    }

    public function send(User $user): void
    {
        $intent = $this->factory->create('template_code_xxx');
        
        $recipient = new EmailRecipient($user->getEmail(), $user->firstName());
        $variables = [
            'first_name' => $user->firstName(),
            'last_name' => $user->lastName(),
        ];

        $intent->send($variables, $recipient);
    }
}

Custom EmailApp:

use Optime\Email\Bundle\Service\Email\MailerFactory;
use Optime\Email\Bundle\Service\Email\Recipient\EmailRecipient;
use App\Repository\EmailAppRepository;

class XXXMailerSender
{
    public function __construct(
        private MailerFactory $factory,
        private EmailAppRepository $appRepository,
    ) {
    }

    public function send(User $user): void
    {
        $app = $this->appRepository->find(3);
        $intent = $this->factory->create('template_code_xxx', $app);
        
        $recipient = new EmailRecipient($user->getEmail(), $user->firstName());
        $variables = [
            'first_name' => $user->firstName(),
            'last_name' => $user->lastName(),
        ];

        $intent->send($variables, $recipient);
    }
}

Varios usuarios:

use Optime\Email\Bundle\Service\Email\MailerFactory;
use Optime\Email\Bundle\Service\Email\Recipient\EmailRecipient;
use App\Repository\EmailAppRepository;

class XXXMailerSender
{
    public function __construct(
        private MailerFactory $factory,
        private EmailAppRepository $appRepository,
    ) {
    }

    public function send(User $userA, User $userB, User $userC): void
    {
        $app = $this->appRepository->find(3);
        $intent = $this->factory->create('template_code_xxx', $app);
        
        foreach([$userA, $userB, $userC] as $user) {
                    
            $recipient = new EmailRecipient($user->getEmail(), $user->firstName());
            
            $variables = [
                'first_name' => $user->firstName(),
                'last_name' => $user->lastName(),
                '_locale' => $user->getLocale(), // opcional, si se pasa se usa ese valor para los textos, y si no, se usa el locale de la petición actual.
            ];

            $intent->send($variables, $recipient);
        }
    }
}

App Resolver:

use Optime\Email\Bundle\Service\Email\MailerFactory;
use Optime\Email\Bundle\Service\Email\Recipient\EmailRecipient;
use App\Repository\EmailAppRepository;
use Optime\Email\Bundle\Service\Email\App\EmailAppResolver;

class XXXMailerSender
{
    public function __construct(
        private MailerFactory $factory,
        private EmailAppRepository $appRepository,
    ) {
    }

    public function send(Event $event, User $user): void
    {
        $appResolver = new EmailAppResolver(function() use ($event) {
            return $this->appRepository->findByEvent($event)
        });
    
        $intent = $this->factory->create('template_code_xxx', $appResolver);
        
        $recipient = new EmailRecipient($user->getEmail(), $user->firstName());
        $variables = [
            'first_name' => $user->firstName(),
            'last_name' => $user->lastName(),
        ];

        $intent->send($variables, $recipient);
    }
}

Variable _email_id:

Todos los templates tienen disponible una variable especial llamada _email_id la cual contiene el uuid del log del correo para poder con dicho valor generar una url y que los usuarios puedan ver el contenido del correo en el navegador.

统计信息

  • 总下载量: 3.45k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 2
  • 开发语言: JavaScript

其他信息

  • 授权协议: Unknown
  • 更新时间: 2022-05-11