SMTP v loop / foreach posílá e-mail uživatelům v kopii a vícenásobně (v závislosti na počtu iterací)
- Dan Hundrt
- Člen | 74
Zdravím,
rád bych se zeptal, zdali nevíte jak vyřešit následující problém.
Mám foreach, ve kterém posílám commandem e-mail:
foreach ($users as $user) {
$output->writeln("<fg=green>Send e-mail for user: {$user['email']}</>");
$this->emailService->sendEmailAfterRegistration($user);
sleep(5);
}
V metodě sendEmailAfterRegistration() posílám samotný e-mail:
try {
$mail = $this->message
->addTo($user['email'])
->setFrom($this->getMailFrom())
->setSubject($title)
->setHtmlBody($latte->renderToString('email.latte', $data), self::PATH . '/assets/');
$mailer = new SmtpMailer($sender);
$mailer->send($mail);
} catch (SmtpException $exception) {
// ....
}
Problém je, pokud se posílá e-mail na více příjemců (rozdílných), první se pošle v pořádku, druhý e-mail se pošle na 2 příjemce zároveň z předešlé iterace (každý v kopii), třetí e-mail pošle na 3 příjemce (také v kopii) atd., poté se to násobí iteracemi.
Nevíte, kde by mohl být problém? Používám gmail SMTP server.
Jde o e-maily, které posíláme po registraci druhý den ráno, kde posíláme návod, instrukce atd. (další e-mail posíláme 2. a 3. den, proto v commandu).
Děkuji
Editoval Dan Hundrt (22. 2. 2023 12:26)
- nightfish
- Člen | 519
@DanHundrt
$mail = $this->message
->addTo($user['email'])
Vypadá to, jako by sis mezi jednotlivými voláními
sendEmailAfterRegistration()
do $this->message
neukládal new Message()
. Takže se k jedné message v každém
volání přidá další příjemce přes addTo
.
Osobně bych to řešil přes $mail = new Message()
(resp.
$mail = $this->messageFactory->create()
) a
$this->message
vůbec nepoužívat – protože si tím do
emailService
zanášíš stavovost, která způsobuje
problémy.
- Dan Hundrt
- Člen | 74
Vypadá to, jako by sis mezi jednotlivými voláními
sendEmailAfterRegistration()
do$this->message
neukládalnew Message()
. Takže se k jedné message v každém volání přidá další příjemce přesaddTo
.Osobně bych to řešil přes
$mail = new Message()
(resp.$mail = $this->messageFactory->create()
) a$this->message
vůbec nepoužívat – protože si tím doemailService
zanášíš stavovost, která způsobuje problémy.
Super, děkuji za komentář. Upravím kód :)