EDM模块 v1.0.0
項目初始化&EDM模块
2024-04-27 更新日誌

电邮管理

  • 新增:SMTP 配置。
  • 新增:支持多服务商的SMTP管理 Gmail、Brevo、Mailchimp、Other。
  • 新增:支持后台即时测试发送电邮。
  • 新增:电邮模版CRUD管理。
  • 新增:電郵推銷,可選模版/自定義內容。
  • 新增:電郵模版發送前預覽。
  • 新增:發送記錄展示。
  • 新增:自定義Mail類。
EDM模块

電郵管理模組

模塊介紹

電郵管理模組提供了一個全面的解決方案,用於管理和自動化電郵通訊。該模組支持SMTP配置、電郵模板管理、即時發送測試、以及電郵推廣活動,適合需要高效電郵交互的現代Web應用。通過友好的用戶界面和靈活的後端服務,開發者可以輕鬆地整合和使用這些功能,以提高用戶溝通的效率和效果。

功能特性

支持以下功能和特性:

  • SMTP配置:允許用戶配置SMTP服務詳情,支持多個郵件服務提供商。
  • 多服務商管理:集成多家知名SMTP服務,如Gmail、Brevo及Mailchimp。
  • 即時測試發送:提供後台發送測試功能,確保電郵設置的有效性。
  • 電郵模板CRUD操作:完整的創建、讀取、更新和刪除功能,用於管理電郵模板。
  • 電郵推銷工具:支持使用模板或自定義內容進行電郵推銷,增加用戶互動。
  • 發送前預覽:在發送電郵前提供內容預覽,確保信息準確無誤。
  • 發送記錄:記錄每一次的發送紀錄,便於追踪和分析。
  • 自定義Mail類:支持開發者自定義Mail類,滿足特定需求。

使用方式

  • 配置SMTP:用戶需在後台配置SMTP服務商信息,包括服務器地址、端口、用戶名等。
  • 模板管理:用戶可以創建、編輯、刪除和查看電郵模板。
  • 發送測試:在發送實際郵件前,可進行測試以檢查配置。
  • 進行電郵推銷:選擇適合的模板或輸入自定義內容,進行電郵推廣活動。

自定義Mail類:

範例:SMTPMail

<?php

namespace Modules\Edm\Domain\SMTP;

use Bingo\Enums\Code;
use Bingo\Exceptions\BizException;
use Illuminate\Mail\Mailable;
use Illuminate\Support\Facades\Mail;
use Modules\Edm\Domain\Email\Logs;

class SMTPMail
{
    public function __construct(
        protected readonly SMTPConfig $smtpConfig,
        protected readonly Logs $mailLogService,
    ) {
    }

    public function send($to, $subject, $content, $service)
    {
        // 使用邮件配置服务获取和设置邮件配置
        $config = $this->smtpConfig->getAndSetMailConfig($service);
        // 创建邮件日志记录
        $logs = $this->mailLogService->createMailLog($to, $service, $subject, $content, $config['from']);
        // 使用自定义的邮件驱动来发送邮件
        $mailer = Mail::mailer($config['driver']);
        // 尝试发送邮件,并处理异常
        $this->attemptSendMail($mailer, $to, $subject, $content, $logs);
        // 保存邮件发送日志
        $this->mailLogService->saveMailLog($logs);
        return true;
    }

    protected function attemptSendMail($mailer, $to, $subject, $content, &$logs)
    {
        try {
            $mailer->to($to)->send($this->buildMailable($subject, $content));
            $logs['status'] = 1; // 发送成功
        } catch (\Exception $e) {
            $logs['status'] = 2; // 发送失败
            $this->mailLogService->saveMailLog($logs); // 保存发送失败的日志
            BizException::throws(Code::FAILED, '邮件发送失败:'.$e->getMessage());
        }
    }

    protected function buildMailable($subject, $htmlContent)
    {
        return new class ($subject, $htmlContent) extends Mailable {
            public $subject;
            public $htmlContent;

            public function __construct($subject, $htmlContent)
            {
                $this->subject = $subject;
                $this->htmlContent = $htmlContent;
            }

            public function build()
            {
                return $this->subject($this->subject)
                    ->html($this->htmlContent);
            }
        };
    }
}

后台菜单

  • 市場營銷
  • 市場營銷電郵推銷
  • 市場營銷電郵推銷電郵發送記錄
  • 市場營銷電郵推銷電郵推銷
  • 市場營銷電郵推銷電郵模版管理