Newsletter (duża ilość adresów) - potrzebny skrypt


(Łukasz14) #1

Witam! Potrzebował bym jakiś skrypt, który pomógł by mi wysłać wiadomości do sporej ilości osób. Posiadam ok 450 tysięcy adresów e-mail ze swoich kilku stron, wszystkie mam zapisane w pliku tekstowym i chciał bym wysłać newsletter, do wszystkich osób (wszystkie osoby zgodziły się na jego otrzymywanie poprzez akceptację regulaminu). Tylko nie bardzo wiem jak uciągnąć tak dużą ilość adresów. Proszę o pomoc :wink:


(Drobok) #2

Mail + pętla ? :stuck_out_tongue: ew to


(kostek135) #3

Generalnie odradzam to, co kolega wyżej napisał. Mailem zachlastasz serwer, polecam PHPMailer. Poza tym nie wiem jakie parametry ma twój serwer (pewno i tak niewiele by to zmieniło w części praktycznej gdybym wiedział), ale teoretycznie jeśli jest słabszy rozważ wysyłanie maili partiami. Wrzucasz adresy do np. pliku i pobierasz powiedzmy 1000 pierwszych linijek na nie wysyłasz maila, i z pliku kasujesz pierwszych 1000 linijek do crona dodajesz to zadanie co 30 sekund.

Kiedy nie ma już maili (plik jest pusty) zastosuj to do usunięcia zadania z crontabs http://stackoverflow.com/questions/4421 ... ontab-jobs


(Łukasz14) #4

kostek135 , a może jakiś kod mógł byś podać? Bo jak na razie jestem w trakcie nauki PHP :wink:

Co do serwera, chciałem go postawić na VirtualBoxie przydzielić mu około 800 MB RAMu i z niego wysyłać (procek - E8200, łączę 16/1Mb).


(kostek135) #5

Nie piszę gotowców, utkniesz gdzieś będziemy pomagać

1)PHPMailer http://phpedia.pl/wiki/Phpmailer

2)Pobieranie linia po linii http://php.net/manual/en/function.fgets.php (pierwszy przykład), musisz tylko zmodyfikować warunek wyjścia na 1000 linii zamiast eof.

3) Usuwanie z pliku, 450.000 linii to dużo, w php trzeba byłoby przepisywać ciągle plik i tworzyć dodatkową strukturę danych, a można przyjemniej http://php.net/manual/en/function.shell-exec.php (jeśli nie ogarniasz linuxa: http://stackoverflow.com/questions/8010 ... l-commands)

4) Dodawanie zadania do cron tabs, to znowu wykonanie komendy z shella http://www.cyberciti.biz/faq/how-do-i-a ... unix-oses/


(Łukasz14) #6

kostek135 , a może lepiej gdybym te adresy e-mail zaimportował do bazy danych i za pomocą PHPMailer i protokołu SMTP wysyłał z niej te maile, było by to wydajniejsze? BTW. Może wiesz jak bym ten plik tekstowy mógł zaimportować do bazy i stworzyć jakąś tabelę z tymi adresami (wszystkie adresy są w osobnej linijce)?


(kostek135) #7

Przepisz ręcznie :stuck_out_tongue:

a tak na poważnie pobierasz linia po linii (patrz post wyżej) + INSERT INTO do bazy danych http://www.w3schools.com/sql/sql_insert.asp (zapytanie wykonujesz funkcja mysql_query() http://php.net/manual/en/function.mysql-query.php lub http://www.php.net/manual/en/mysqli.query.php jeśli piszesz swój skrypt obiektowo)

Wydajniejsze to nie będzie, bo równie dobrze możesz to wysyłać z pliku zamiast przenosić to z pliku do bazy i wysyłać z bazy. Nalezy sobie zadać pytanie, czy dostęp do bazy jest lepszy (szybszy), niż dostęp do pliku. Jeśli tak jest w przyszłości może to zaowocować, ale i tak radzę przesyłać maile partiami bo 450.000 to dużo, a na pewno liczba ciągle rośnie.