Отправить почту PHP из symfony

Я хотел бы спросить о том, как отправить PHP mail() из фреймворка Symfony, компонента symfony mailer.

"symfony/mailer": "5.0.*",

DSN:

MAILER_DSN=mail://localhost

Метод контроллера:

public function test(): Response
{
    $transport = new EsmtpTransport('localhost');
    $mailer = new Mailer($transport);

    $username = $this->getUser()->getUsername();

    /** @var Users $user */
    $user = $this->getDoctrine()->getRepository(Users::class)->findOneBy(['username' => $username]);

    if (!$user)
        return new Response("User $username not found! Email not tested.");

    $to = $user->getEmail();

    if ($to) {
            $email = new Email();
            $email->from('[email protected]');
            $email->to($to);
            $email->subject('Test mail');
            $email->text('This is test mail from ... for user ' . $to);
            $mailer->send($email);

            return new Response('Mail send!');
    }

    return new Response('Mail not sent - user email information missing!');
}

person acqsk    schedule 10.06.2020    source источник
comment
использование почтовой функции php — не самая умная вещь, потому что она блокирует и иногда бывает очень-очень медленной. вы, вероятно, можете написать свой собственный транспорт для компонента почтовой программы, если вы действительно хотите его использовать, но, может быть, у вас есть подходящий вариант использования, почему вы хотите использовать mail() php? для локального тестирования есть fakesmtp или даже нулевая почтовая программа, для отладки которой вы можете использовать профайлер.   -  person Jakumi    schedule 10.06.2020
comment
@Jakumi Привет, большое спасибо за более глубокое объяснение. По вашей рекомендации лучше использовать smtp? Если я хочу использовать mail(), есть ли транспорт для этого в компоненте почтовой программы Symfony? Спасибо.   -  person acqsk    schedule 10.06.2020
comment
лучше использовать smtp. в компоненте почтовой программы Symfony по умолчанию нет транспорта для mail php, однако есть транспорт для sendmail linux (искать в /usr/bin/sendmail. mail php - насколько я знаю - использует какую-то команду операционной системы , это также должно быть настроено, иначе ваша почта тоже не дойдет до адресата. Я собираю ваши новые данные, поэтому я бы просто настоятельно рекомендовал использовать smtp. Он стандартизирован, его довольно легко настроить, и он не имеет ничего недостатки mail/sendmail   -  person Jakumi    schedule 10.06.2020


Ответы (1)


Если я правильно понял ваш вопрос, вы хотите использовать новый компонент Symfony mailer для отправки электронных писем.

Некоторое время назад я написал mailService, используя компонент почтовой программы, может быть, вы можете вдохновиться этим?

namespace App\Service;

use App\Utils\Utils;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;

class MailService
{
    private $mailer;

    /**
     * MailService constructor.
     *
     * @param $mailer
     */
    public function __construct(MailerInterface $mailer)
    {
        $this->mailer = $mailer;
    }

    /**
     * @param string $renderedView
     * @param string $adresse
     * @param string $subject
     *
     * @throws TransportExceptionInterface
     * here $renderedview is a a twig template i used to generate my email html
     */
    public function sendMail(string $renderedView, string $adresse, string $subject, string $env)
    {
        if ('dev' !== $env) {
            $email = (new Email())
                ->from([email protected])
                ->to($adresse)
                ->subject($subject)
                ->html($renderedView);

            $this->mailer->send($email);
        }
    }
}

Вам нужно будет настроить MAILER_DSN в соответствии с вашими параметрами почтовой программы.

( https://symfony.com/doc/current/components/mailer.html )

внутри документации вы найдете, как обращаться с некоторыми распространенными почтовыми программами или настроить их самостоятельно.

удачи и удачных экспериментов :)

person Elvandar    schedule 11.06.2020