Wysyłanie Maili

Potrzebuję pomocy w kwestii wysyłania masowych maili, tzn. wysłać około 100 maili po 1 kliknięciu(bądź więcej). Póki co, zrobiłem to na zasadzie, że sposób na wysłanie 1 maila wrzuciłem w pętle i działa, ale nim pętla przeleci 100 powtórzeń robi się naprawdę przykro.

Czy mógłby mnie ktoś pokierować jak zrobić to w bardziej optymalny sposób ?? Maile są zbierane na podstawie danych od użytkownika.

Pozdrawiam i z góry dziękuję.

Możesz spróbować użyć SwiftMailera z pluginem Decorator (i np. pluginem Throttler). Decorator pozwala na zdefiniowanie placeholderów w szablonie maila. Później już są one zastępowane automatycznie danymi ze zdefiniowanej tablicy.

Jeśli masz problemy z szybkością wysyłania e-maili w Swifcie, spróbuj zmienić encoding na base64:




$message = Swift_Message::newInstance()

    ...

   //http://forum.symfony-project.org/viewtopic.php?t=33488

   ->setEncoder(Swift_Encoding::getBase64Encoding());



A ja bym jeszcze zaproponował umieszczenie mejli w jakiejś kolejce i wysyłanie ich czymś, co wywołuje się okresowo. Specjalnie nie podaję przykładów, jeśli będziesz chciał wziąść to pod uwagę to można się dalej zastanawiać :slight_smile:

SwiftMailer posiada coś takigo jak batchowe wysyłanuie emaili: http://swiftmailer.org/docs/sending.html#sending-emails-in-batch

Przy większej ilości możesz (tak jak napisał @nineinchnick) użyć kolejki:

najprostsza oparta na tabeli bazy danych +jakiś cron przetwarzający zadania.

Możesz też pokusić się o coś bardziej zaawansowanego jak np Gearman lub RabbitMQ.

to jeszcze taka uwaga - Jeśli wszystkie maile mają być identyczne (bez personalizacji), to po prostu wrzuć wszystkich odbiorców do BCC (o ile oczywiście akceptowalne jest, że końcowy użytkownik zobaczy puste po "To" w swoim programie pocztowym, ale to zwykle nie przeszkadza). Takie rozwiązanie jest najlepsze z punktu widzenia obciążenia serwera pocztowego.

Jeśli BCC odpada - to faktycznie polecam kolejkę (my stosujemy albo cron albo gearman).