Karena berbagai alasan saya ingin/perlu mencatat semua email yang dikirim melalui situs web saya yang berjalan pada Symfony 5.
Apa yang saya miliki sejauh ini adalah pelanggan yang membuat Entitas bertipe EmailLogEntry ketika kelas MessageEvent dibuat (setidaknya itulah yang saya pahami dari (MessageEvent::class
) - koreksi saya jika saya salah). Saya juga menggunakan pelanggan ini untuk mengisi alamat email yang hilang dengan alamat sistem default.
Sekarang, setelah mengirim email, saya ingin menyesuaikan entitas saya dan menelepon $email->setSent(true);
, tetapi saya tidak tahu cara berlangganan acara yang mencoba mengirim email. Dan agar kode dapat digunakan kembali, saya tidak ingin melakukan itu di Layanan (ya, ini banyak karena ada banyak sumber yang menghasilkan email) tempat saya menelepon $this->mailer->send($email);
.
Pertanyaan saya sekarang adalah:
- Bisakah seseorang memberi tahu saya bagaimana saya bisa berlangganan acara pengiriman Mailer?
- Secara umum, bagaimana cara mengetahui acara apa yang dapat saya ikuti? Peristiwa kernel tercantum dalam dokumentasi, tetapi bagaimana dengan semua peristiwa lain yang diaktifkan?
Btw, kode pelanggan saya saat ini:
class SendMailSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [
MessageEvent::class => [
['onMessage', 255],
['logMessage', 0],
],
];
}
public function logMessage(MessageEvent $event) {
$email = new EmailLogEntry();
[...]
}
}
Terima kasih.
bin/console debug:event*
- person Jakumi   schedule 06.02.2020MailerInterface
daripadaMailer
. Penerapannya juga sangat mudah, karena Mailer hanya memiliki satu fungsi untuk menghias (mengirim). Selain itu, dekorasi adalah pendekatan yang tepat. untuk referensi lihat github.com/symfony/mailer/blob/master/Mailer.php (mungkin membaca tentang dekorasi jika perlu) - person Jakumi   schedule 06.02.2020use Symfony\Component\Mailer\Event\MessageEvent; use Symfony\Component\Mailer\Event\MessageEvents;
tetapi hanya itu yang dapat saya temukan dengan membaca file kode Mailer. Semua kelas di folder EventListener juga berlanggananMessageEvent::class
dan menggunakanMessageEvent
- person fun2life   schedule 07.02.2020bin/console debug:event-dispatcher
seharusnya ada MessageEvent dan pendengar Anda. - person Jakumi   schedule 07.02.2020send
mengembalikan pesan jika sudah terkirim, jika tidak maka akan mengembalikan null (misalnya pada daftar penerima yang kosong) atau memunculkan Pengecualian, jika transportasi email menghasilkannya (mungkin akan meneruskan kesalahan dari server email). harap dicatat, yang terkirim berarti, Anda telah mentransfer data ke beberapa server (jika ada), bukan berarti data tersebut benar-benar dikirim ke tujuan Anda atau diproses sama sekali, apalagi dikirimkan atau dibaca) - person Jakumi   schedule 09.02.2020public function send(RawMessage $message, Envelope $envelope = null): void
. Dokumennya kurang: github.com/symfony/symfony-docs/issues/13091 - person fun2life   schedule 10.02.2020