Daniel Częstki

Daniel Częstki senior php developer

Temat: wysyłka maili - jak najszybciej ?

Hej

Zastanawiam się jak najlepiej i najefektywniej wysyłac maile ?
Oczywiście najgorszy pomysł to funkcja mail.
Czy najlepiej używać z poziomu programu php sendmail czy napisać skrypt w CGI ?

Jak uważacie ?
Damian D.

Damian D. Trener IT

Temat: wysyłka maili - jak najszybciej ?

Ja korzystam z klasy phpmailer+wysyłka przez SMTP.
Na kei wysłanie 50 mailii trwa 4-5 sekund

(aha i KEI ma limit 100 połączeń z serwerem SMTP w ciągu minuty)Damian D. edytował(a) ten post dnia 22.11.10 o godzinie 14:45

konto usunięte

Temat: wysyłka maili - jak najszybciej ?

Daniel Częstki:
Oczywiście najgorszy pomysł to funkcja mail.

ja wiem czy aki najgorszy?
Czy najlepiej używać z poziomu programu php sendmail czy napisać skrypt w CGI ?

najlepiej jak najnizej-poziomowo.
[w pracy wysylam setki tysiecy maili dziennie przy uzyciu skryptow napisanych w PERLu]

gwarantem najlepiej i najefektywniej wyslanych maili bedzie duuuzooo pamieci operacyjnej, duzy dysk i szybkie procesory w serwerze.
Łukasz K.

Łukasz K. co-founder at
Futuresalt Ltd.

Temat: wysyłka maili - jak najszybciej ?

Cześć,
Daniel Częstki:
Czy najlepiej używać z poziomu programu php sendmail czy napisać skrypt w CGI ?
Jak uważacie ?

Ja używam często skryptów PHP-CLI wykonywanych cyklicznie lub na żądanie z konfiguracją ustawioną na SMTP - sprawdza się dobrze. Jedynie na serwerze musi być ustawiony czas wykonywania skryptu PHP-CLI oraz prawidłowa konfiguracja w skrypcie PHP dla konkretnego serwera pocztowego.

Pozdrawiam,
ŁukaszŁukasz K. edytował(a) ten post dnia 23.11.10 o godzinie 00:24

konto usunięte

Temat: wysyłka maili - jak najszybciej ?

Prędzej czy później zaczniesz się borykać z problemem limitów serwera i wysyłki danych więc trzeba rozwiązać np kolejkę wysyłań dostosowaną do limitów narzuconych przez serwer i wysyłających w ściśle określonych blokach n emaili.

Może nie jest to idealne rozwiązanie ale ja korzystam z bazy danych do przechowywania kolejki do wysłania oraz crona na serwerze działającego np co 2 minuty.

Poza tym korzystam z swiftmailera, moim zdaniem obecnie najlepsza biblioteka do wysyłania emaili, w sumie ma nawet plugin throttle przeznaczony do wysyłania mailingu w danym interwale czasowym grupowanym w paczki po n mailu.

Temat: wysyłka maili - jak najszybciej ?

najgorszy tu jest serwer onetu, limity emaili na godzine + limity polaczen, najpierw zwraca 451 graylisting, pozniej 451 too many email in one run a pozniej juz 421 connection refused :)

trzeba mu dawkowac maile

konto usunięte

Temat: wysyłka maili - jak najszybciej ?

Daniel Częstki:
Hej

Zastanawiam się jak najlepiej i najefektywniej wysyłac maile ?

Nie napisałeś ile tych maili chcesz wysłać. 100, 1000, 100000 ... ?
Oczywiście najgorszy pomysł to funkcja mail.

Zgadza się, mail() można użyć tylko do własnych powiadomień o zdarzeniach w serwisie a nie do rozsyłania maili do swoich userów.
Czy najlepiej używać z poziomu programu php sendmail czy napisać skrypt w CGI ?

Skrypt w CGI? Raczej odpada. To nie ta technologia.
Jak uważacie ?

1. Skorzystaj z klasy PHPMailer http://phpmailer.worxware.com
2. Napisz program formatujący wiadomość. Zakładam, ze masz adresy do wysyłki w bazie danych więc trzeba zrobić pobranie adresów i prostą pętlę formatującą i wysyłającą maile. Zaletą takiego rozwiązania jest możliwość personalizacji i śledzenia kliknięć z linków zawartych w mailach.

2a) przy dużych bazach należy stosować chwilowe przerwy sleep() po wysyłce X maili (np. 500) i przeładowanie strony ze skryptem uruchamiającym wysyłkę aby nie zapchać serwera SMTP.

3. Gdzie nie korzystać z hostingu:
Jeśli chodzi o zagadnienia wydajności i reakcji na zgłaszane problemy, firmy KEI nie polecam. Mnóstwo ograniczeń, sprzeczne informacje od adminów, reakcje niezgodne z regulaminem itp...

Home - absolutnie odradzam (nie wiadomo jakie są kryteria przeciążenia serwera). Błędy 503, brak sensownego supportu.

Moje doświadczenia:
Wysyłka mailingu do około 100 000 odbiorców. Czas wysyłki opisaną metodą: około 10 - 20 h (w zależności od kondycji serwera SMTP, na który z reguły nie mamy żadnego wpływu).
Wojciech K.

Wojciech K. realizator pomysłów
własnych

Temat: wysyłka maili - jak najszybciej ?

Daniel Częstki:
Oczywiście najgorszy pomysł to funkcja mail.
Czy najlepiej używać z poziomu programu php sendmail

funkcja mail() dokładnie to robi - exec sendmail + parametry na wejście

można zejść o poziom niżej - czyli np. cron + skrypt (bash/perl) wywołujący sendmaila z zadanym parametrami

można napisać też własny skrypt, który po prostu wrzuca własne pliki do kolejki (znając oczywiście format plików - np. w procmailu to się sprawdza) - o ile masz dostęp do spoola lokalnego serwera SMTP
Robert Borowski

Robert Borowski Moje-Ankiety.pl by
LabSEE

Temat: wysyłka maili - jak najszybciej ?

Robert Kozakiewicz:

3. Gdzie nie korzystać z hostingu:
Jeśli chodzi o zagadnienia wydajności i reakcji na zgłaszane problemy, firmy KEI nie polecam. Mnóstwo ograniczeń, sprzeczne informacje od adminów, reakcje niezgodne z regulaminem itp...

Ja ostatnio doświadczam w KEI też jakiś dziwnych sytuacji z serwerem, raz działa dobrze, raz coś mu tam zwalnia, mimo, że ruchu prawie nie ma, a to baza danych im się przeciąży, nie jest jeszcze tragicznie, ale nie jest to ideał ;)

Home - absolutnie odradzam (nie wiadomo jakie są kryteria przeciążenia serwera). Błędy 503, brak sensownego supportu.

Mam zatem pytanie gdzie polecacie hosting na serwerach wirtualnych (wymagane php 5.3+, apache)
Daniel Częstki

Daniel Częstki senior php developer

Temat: wysyłka maili - jak najszybciej ?

a serwer dedykowany ?

Temat: wysyłka maili - jak najszybciej ?

Dedykowany to dobre rozwiązanie ale to droga zabawa jeśli to mała aplikacja

konto usunięte

Temat: wysyłka maili - jak najszybciej ?

Jakub Bartkiewicz:
Dedykowany to dobre rozwiązanie ale to droga zabawa jeśli to mała aplikacja

60 PLN miesięcznie (kimsufi.pl) przy najmniejszym serwerze typu KS to nie jest droga zabawa... Niektórzy operatorzy liczą więcej za VPSy...Piotr Lewandowski edytował(a) ten post dnia 01.12.10 o godzinie 09:08

Temat: wysyłka maili - jak najszybciej ?

VPS to prawda. :)
Dawid Szymczak

Dawid Szymczak PHP Developer |
E-commerce | Mobile
apps

Temat: wysyłka maili - jak najszybciej ?

Ja z kolei mailing masowy rozwiązałem trochę inaczej, mam postawiony relay, do tego przystawkę zrobioną w zendzie i zaimplementowaną na konkretncyh serwisach, wystarcza spokojnie na obsługę wysyłki kilku całkiem sporych sajtów

konto usunięte

Temat: wysyłka maili - jak najszybciej ?

Robert Kozakiewicz:
...
Zgadza się, mail() można użyć tylko do własnych powiadomień o zdarzeniach w serwisie a nie do rozsyłania maili do swoich userów.


Dalej:
Robert Kozakiewicz:
...
1. Skorzystaj z klasy PHPMailer http://phpmailer.worxware.com

... a w kodzie owego PHPmailera

$rt = @mail( ...


więc jak to z tym mail ?

Należałoby najpierw wiedzieć co się wypisuje nim się zacznie wypisywać.Robert B. edytował(a) ten post dnia 01.12.10 o godzinie 18:37
Dominik Marczuk

Dominik Marczuk Remote Team Lead w
Sonalake

Temat: wysyłka maili - jak najszybciej ?

Daniel Częstki:
Hej

Zastanawiam się jak najlepiej i najefektywniej wysyłac maile ?
Oczywiście najgorszy pomysł to funkcja mail.
Czy najlepiej używać z poziomu programu php sendmail czy napisać skrypt w CGI ?

Jak uważacie ?

100 maili najlepiej wysłać mail() i się nie pierniczyć z jakimiś wysublimowanymi rozwiązaniami typu armata-na-muchę. A jak to nie 100, jeno 100.000, to pytanie nie powinno być o skrypt, tylko o serwer, który to zniesie i hosting, który za to nie wpędzi w bankructwo ;)

konto usunięte

Temat: wysyłka maili - jak najszybciej ?

Robert B.:
Robert Kozakiewicz:
...
Zgadza się, mail() można użyć tylko do własnych powiadomień o zdarzeniach w serwisie a nie do rozsyłania maili do swoich userów.


Dalej:
Robert Kozakiewicz:
...
1. Skorzystaj z klasy PHPMailer http://phpmailer.worxware.com

... a w kodzie owego PHPmailera

$rt = @mail( ...


więc jak to z tym mail ?
To trochę bardziej skomplikowanie :-) wracając do kodu PHPMailera:

      // Choose the mailer and send through it
switch($this->Mailer) {
case 'sendmail':
return $this->SendmailSend($header, $body);
case 'smtp':
return $this->SmtpSend($header, $body);
default:
return $this->MailSend($header, $body);
}


i na przykład z sendmailem:

  /**
* Sends mail using the $Sendmail program.
* @param string $header The message headers
* @param string $body The message body
* @access protected
* @return bool
*/
protected function SendmailSend($header, $body) {
if ($this->Sender != '') {
$sendmail = sprintf("%s -oi -f %s -t", escapeshellcmd($this->Sendmail), escapeshellarg($this->Sender));
} else {
$sendmail = sprintf("%s -oi -t", escapeshellcmd($this->Sendmail));
}
if ($this->SingleTo === true) {
foreach ($this->SingleToArray as $key => $val) {
if(!@$mail = popen($sendmail, 'w')) {
throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
}
fputs($mail, "To: " . $val . "\n");
fputs($mail, $header);
fputs($mail, $body);
$result = pclose($mail);
// implement call back function if it exists
$isSent = ($result == 0) ? 1 : 0;
$this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$body);
if($result != 0) {
throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
}
}
} else {
if(!@$mail = popen($sendmail, 'w')) {
throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
}
fputs($mail, $header);
fputs($mail, $body);
$result = pclose($mail);
// implement call back function if it exists
$isSent = ($result == 0) ? 1 : 0;
$this->doCallback($isSent,$this->to,$this->cc,$this->bcc,$this->Subject,$body);
if($result != 0) {
throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
}
}
return true;
}


czy dla smtp:

    // connect to the smtp server
$this->smtp_conn = @fsockopen($host, // the host of the server
$port, // the port to use
$errno, // error number if any
$errstr, // error message if any
$tval); // give up after ? secs


W najgorszym przypadku PHPMailer użyje mail, lecz jeśli da się to lepiej rozwiązać to lepiej to rozwiąże :-) - w zależności od ustawień biblioteki i właściwości serwera.Kamil Brenk edytował(a) ten post dnia 01.12.10 o godzinie 20:04

konto usunięte

Temat: wysyłka maili - jak najszybciej ?

Robert B.:
... a w kodzie owego PHPmailera

$rt = @mail( ...


więc jak to z tym mail ?

Należałoby najpierw wiedzieć co się wypisuje nim się zacznie wypisywać.

Myślę, że ten link pomoże Ci w zrozumieniu istoty rzeczy.

konto usunięte

Temat: wysyłka maili - jak najszybciej ?

Kamil Brenk:
...
W najgorszym przypadku PHPMailer użyje mail, lecz jeśli da się to lepiej rozwiązać to lepiej to rozwiąże :-) - w zależności od ustawień biblioteki i właściwości serwera.

Dokładnie to należało wyjaśnić (z naciskiem na "w zależności od ustawień biblioteki i właściwości serwera") a nie narzekać na mail() i polecić PHPMailera, który być może i tak wykona to za pomocą mail().Robert B. edytował(a) ten post dnia 01.12.10 o godzinie 22:56

konto usunięte

Temat: wysyłka maili - jak najszybciej ?

Robert B.:
Kamil Brenk:
...
W najgorszym przypadku PHPMailer użyje mail, lecz jeśli da się to lepiej rozwiązać to lepiej to rozwiąże :-) - w zależności od ustawień biblioteki i właściwości serwera.

Dokładnie to należało wyjaśnić (z naciskiem na "w zależności od ustawień biblioteki i właściwości serwera") a nie narzekać na mail() i polecić PHPMailera, który być może i tak wykona to za pomocą mail().Robert B. edytował(a) ten post dnia 01.12.10 o godzinie 22:56
Być może. Niemniej PHPMailer daje dużo wygodniejszy interfejs, niż zwykłe użycie użycie funkcji mail. Nie wspminając już o wstawianiu do maila takich dodatków, jak obrazki i załączniki.



Wyślij zaproszenie do