Trao đổi về dự án
PHP symfony

Cách tạo một phương thức gửi email tùy chỉnh với Symfony Mailer

Hôm nay, chúng ta sẽ tìm hiểu cách tạo một phương thức truyền email tùy chỉnh với Symfony Mailer. Đối với ví dụ này, chúng ta sẽ tạo một phương thức truyền có tên là “pt”. Yêu cầu Trước Trước khi bắt đầu, hãy đảm bảo bạn đã cài đặt và cấu hình Symfony Maile...

Chaîne de validation d’un transport de courriel
Hôm nay, chúng ta sẽ tìm hiểu cách tạo một phương thức truyền email tùy chỉnh với Symfony Mailer. Đối với ví dụ này, chúng ta sẽ tạo một phương thức truyền có tên là “pt”.

Yêu cầu Trước

Trước khi bắt đầu, hãy đảm bảo bạn đã cài đặt và cấu hình Symfony Mailer và HttpClient trong dự án của bạn. Bạn có thể thêm chúng vào dự án của bạn bằng các lệnh sau:

composer require symfony/mailer
composer require symfony/http-client

Tạo Lớp Truyền Thông

Điều đầu tiên cần làm là tạo một lớp mới thực hiện Symfony\Component\Mailer\Transport\TransportInterface. Chúng ta sẽ gọi nó là PtTransport. Dưới đây là một ví dụ về những gì có thể trông như thế nào:

// src/Mailer/Transport/PtTransport.php

namespace App\Mailer\Transport;

use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Component\Mailer\Transport\TransportInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Mime\RawMessage;
use Symfony\Contracts\HttpClient\HttpClientInterface;

class PtTransport implements TransportInterface
{
    private $httpClient;
    private $username;
    private $password;
    private $endpointUrl;

    public function __construct(HttpClientInterface $httpClient, string $username, string $password, string $endpointUrl)
    {
        $this->httpClient = $httpClient;
        $this->username = $username;
        $this->password = $password;
        $this->endpointUrl = $endpointUrl;
    }

    public function send(RawMessage $message, ?Symfony\Component\Mailer\Envelope $envelope = null): ?Symfony\Component\Mailer\SentMessage
    {
        // Implémentez ici votre logique d'envoi d'e-mail
        // Vous pouvez utiliser $this->httpClient pour faire une requête HTTP à $this->endpointUrl
    }

    public function __toString(): string
    {
        return sprintf('pt://%s@%s', $this->username, $this->endpointUrl);
    }
}

Tạo Lớp Nhà Máy

Tiếp theo, chúng ta cần tạo một lớp nhà máy sẽ chịu trách nhiệm tạo ra các thể hiện của PtTransport. Chúng ta sẽ gọi lớp này là PtTransportFactory. Dưới đây là một ví dụ về những gì có thể trông như thế nào:

// src/Mailer/Transport/PtTransportFactory.php

namespace App\Mailer\Transport;

use Symfony\Component\Mailer\Exception\UnsupportedSchemeException;
use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
use Symfony\Component\Mailer\Transport\Dsn;
use Symfony\Component\Mailer\Transport\TransportInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;

class PtTransportFactory extends AbstractTransportFactory
{
    private $httpClient;

    public function __construct(HttpClientInterface $httpClient)
    {
        $this->httpClient = $httpClient;
    }

    public function supports(Dsn $dsn): bool
    {
        return 'pt' === $dsn->getScheme();
    }

    public function create(Dsn $dsn): TransportInterface
    {
        return new PtTransport(
            $this->httpClient,
            $dsn->getUser(),
            $dsn->getPassword(),
            $dsn->getOption('endpoint_url')
        );
    }
}

Cấu Hình

Sau đó, chúng ta cần đăng ký PtTransportFactory như một dịch vụ và gắn nó với mailer.transport_factory. Dưới đây là cách làm điều này trong services.yaml:

services:
    App\Mailer\Transport\Pt

Tiếp theo, chúng ta cần đăng ký PtTransportFactory như một dịch vụ và gắn nó với mailer.transport_factory. Dưới đây là cách làm điều này trong services.yaml:

services:
    App\Mailer\Transport\PtTransportFactory:
        tags: ['mailer.transport_factory']
        arguments:
            $httpClient: '@http_client'

Sử Dụng

Bây giờ, bạn có thể sử dụng phương thức truyền email tùy chỉnh mới của mình bằng cách cấu hình DSN mailer của bạn trong tệp .env của bạn:

MAILER_DSN=pt://username:password@default?endpoint_url=https://your-endpoint-url

Và đó là nó! Bạn hiện đã có một phương thức truyền email tùy chỉnh với Symfony Mailer. Lần tiếp theo bạn gửi email, Symfony sẽ sử dụng phương thức truyền mới của bạn.

Kết Luận

Symfony Mailer là một công cụ mạnh mẽ và linh hoạt để quản lý việc gửi email trong các ứng dụng Symfony của bạn. Bằng cách tạo một phương thức truyền email tùy chỉnh, bạn có thể dễ dàng tích hợp bất kỳ dịch vụ gửi email nào vào ứng dụng của mình, ngay cả khi nó không được hỗ trợ trực tiếp bởi Symfony Mailer.

Tôi hy vọng bài viết này hữu ích và giờ đây bạn đã có hiểu biết tốt hơn về cách sử dụng Symfony Mailer để tạo một phương thức truyền email tùy chỉnh.

Chaîne de validation d’un transport de courriel

Xác nhận vận chuyển mà không tiết lộ thông tin đăng nhập

Các cơ chế xác thực của nhà cung cấp dịch vụ thư điện tử đang phát triển. Hãy lưu trữ các bí mật ngoài kho lưu trữ, sử dụng một tài khoản kỹ thuật với quyền tối thiểu và trước tiên thử gửi đến một địa chỉ được kiểm soát.

  • Kiểm tra mã hóa TLS, cổng và phương thức xác thực mà nhà cung cấp yêu cầu.
  • Kiểm tra nhật ký ứng dụng và hàng đợi, mà không hiển thị mật khẩu.
  • Đối với Google, ưu tiên « Đăng nhập bằng Google »; một mật khẩu ứng dụng yêu cầu xác thực hai bước và phải có khả năng bị thu hồi.

Tham chiếu : tài liệu Google về mật khẩu ứng dụng.

Chia sẻ bài viết