Laravel 10 使用 Symphony 邮件程序使用默认电子邮件模板

问题描述 投票:0回答:1

我想使用 symphony mailer Transport 将以下代码转换为 symphony mailer。但如果不使用 twig 概念,我就无法在 symphony mailer 中添加现有的模板。

现有代码:

$data = array(.....);
$subject = "Test Email";
Mail::send('mail.invitation', $data, function($message)
{
    $message
        ->to($this->toEmail)
        ->from($this->fromEmail)
        ->subject($subject);
});

同样:

$transport = Transport::fromDsn(env('MAILER_DSN'));
$mailer = new Mailer($transport);
$data = array(.....);
$subject = "Test Email";
        
$email = (new Email())
    ->from($this->fromEmail)
    ->to($this->toEmail)
    ->priority(Email::PRIORITY_HIGH)
    ->subject($subject)
    ->text('Sending emails')
    ->html('mail.invitation', $data);

    $mailer->send($email);

请帮助我并提前致谢。

php laravel symfony mailer
1个回答
0
投票

要将现有代码转换为使用 Symfony Mailer 并包含 HTML 模板,您可以按照以下步骤操作。由于您不想使用 Twig,因此您可以通过手动嵌入带有动态数据占位符的 HTML 模板来创建电子邮件内容。

以下是如何实现此目标的示例:

创建带有占位符的 HTML 模板:您可以使用将被动态数据替换的简单占位符,而不是使用 Twig。

<!-- mail/invitation.html -->
<!DOCTYPE html>
<html>
<head>
    <title>Invitation</title>
</head>
<body>
    <p>Hello, {{ name }}!</p>
    <p>You are invited to our event on {{ event_date }}.</p>
    <p>Best regards,<br>{{ sender_name }}</p>
</body>
</html>

加载模板并替换占位符:在 PHP 代码中,加载 HTML 模板并用实际数据替换占位符。

<?php
use Symfony\Component\Mailer\Transport;
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Mime\Email;

// Load HTML template
$templatePath = 'path/to/mail/invitation.html';
$templateContent = file_get_contents($templatePath);

// Data to be replaced in the template
$data = [
    'name' => 'John Doe',
    'event_date' => 'June 15, 2024',
    'sender_name' => 'Event Organizer'
];

// Replace placeholders with actual data
foreach ($data as $placeholder => $value) {
    $templateContent = str_replace('{{ ' . $placeholder . ' }}', $value, $templateContent);
}

// Email subject
$subject = "Test Email";

// Create the Transport and Mailer instances
$transport = Transport::fromDsn($_ENV['MAILER_DSN']);
$mailer = new Mailer($transport);

// Create the Email instance
$email = (new Email())
    ->from('[email protected]')
    ->to('[email protected]')
    ->priority(Email::PRIORITY_HIGH)
    ->subject($subject)
    ->html($templateContent);

// Send the email
$mailer->send($email);

在此方法中:

加载 HTML 模板:从文件中读取模板。 替换占位符:使用 str_replace 将模板中的占位符替换为 $data 数组中的实际值。 创建并发送电子邮件:使用填充的模板内容创建电子邮件并使用 Symfony Mailer 发送。 确保根据您的具体要求调整路径和数据。此方法避免使用 Twig,同时仍然允许您使用具有动态内容的 HTML 模板。

© www.soinside.com 2019 - 2024. All rights reserved.