Video Kurs Pl - Logo
GEM, 32-700, Bochnia
ul. Proszowska 92
tel./kom.: 606 192 567
e-mail: videokurspl@gmail.com
gg: 10870365

Jak napisać skrypt masowego mailingu w PHP?

Do wysłania jakiegokolwiek e-maila, potrzebna jest najczęściej znajomość funkcji mail(). Funkcja mail() jest jednak mało wydajna przy wysyłaniu wielu maili na raz, ponieważ dla każdej wiadomości z osobna otwiera i zamyka protokół SMTP (Simple Mail Transfer Protocol).

Czym jest protokół?

Najlepiej pojęcie protokołu będzie wyjaśnić przez przykład. Wyobraźmy sobie policjanta, który spisuje pewnego rodzaju protokół. Protokół ten musi zostać spisany według pewnego rodzaju zasad. Zasady te zależą od tego jaki protokół ma być spisany, jednak zawsze musi on być zgodny z regułami, po to, aby łatwo było go później odczytać. Gdyby nie protokół jedno zdarzenie mogłoby być zapisane na setki różnych sposobów. Spowodowałoby to opóźnienia w odczycie tak zapisanych danych przez inne osoby niż policjant, które je zapisał lub też uniemożliwiłoby to całkowicie odczyt takich danych.

Tak samo jest z protokołem w sensie informatycznym. Na przykład protokół komunikacyjny jest to zbiór ścisłych reguł, które mają zostać wykonane przez urządzenia, które komunikują się ze sobą np. serwery komputerowe. Gdyby nie było ustalonych z góry zasad, to takie połączenia byłyby na pewno dłuższe lub też najczęściej niemożliwe do wykonania. Protokołem komunikacyjnym jest m. in. nasz omawiany protokół SMTP, który opisuje reguły przekazywania poczty elektronicznej (maili) w internecie.

Dodatkowo funkcja mail() nie ma możliwości autentykacji (podania loginu i hasła) dla zewnętrznego serwera obsługującego protokół SMTP, a w końcu chcemy, aby nasz skrypt zawsze działał prawidłowo. Z tego powodu skorzystamy z gotowej klasy PHPMailer. Oczywiście można by napisać własną wersję funkcji mail(), lecz jest to czasochłonne i nie jest to tematem tego artykułu.

Czym jest PHPMailer?

PHPMailer jest to biblioteka, czyli zbiór gotowych funkcji do wykorzystania dotyczących wysyłania e-maili napisana przez Worx International Inc.

Instalacja PHPMailera

PHPMailera możemy ściągnąć tutaj. Przy aktualnym designie strony, po lewej stronie witryny znajduje się menu zatytułowane download. Stamtąd wybieramy odpowiednią dla naszego serwera wersję PHPMailera. Jeżeli na Twoim serwerze korzystasz z PHP 4 to skorzystaj z opcji PHPMailer for PHP 4, jeżeli jednak korzystasz z wyższych wersji PHP 5 + to skorzystaj z opcji PHPMailer for PHP 5/6. Jeżeli nie wiesz jaką wersję PHP posiada Twój serwer to wykonaj w dowolnym pliku php następujący skrypt:

					<?php
						echo phpinfo();
					?>
					

U samej góry strony powinna widnieć wersja Twojego PHP. Ja posiadam PHP w wersji 5.2.6 wybieram więc PHPMailer for PHP 5/6, a następnie rozwijam katalog z aktualnie najnowszą wersją PHPMailer v5.1 i wybieram linka z rozszerzeniem .zip. Po ściągnięciu rozpakowujemy zawartość do katalogu naszej witryny (public_html) lub katalogu użytkownika postawionego przez nas serwera. W moim przypadku jest to Vertrigo Server.

Zawartość naszej rozpakowanej paczki znajduje się teraz prawdopodobnie w folderze o nazwie PHPMailer_v5.1, zmieńmy jego nazwę na phpmailer.

Stwórzmy teraz nowy plik index.php w folderze o jeden poziom niżej niż folder phpmailer. Nie zapomnijmy o ustawieniu strony kodowania pliku na UTF-8, w końcu chcemy aby wszystkie polskie znaczki wyświetlały się poprawnie. Umieścimy także stronę kodowania w metatagach index.php :

index.php
					<?php
					echo '<html> 
					<head> 	
						<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
					</head>
					<body>';		
					
					//MIEJSCE NA NASZ SKRYPT
					
					echo '</body></html>';
					?>					
					

Następnie bibliotekę PHPMailer dołączamy do naszego index.php (linia 5) oraz tworzymy nowy obiekt PHPMailera i przypisujemy go do wskaźnika $mail (linia 7).

index.php
					<?php
					//html, meta tagi etc.
					
					//NASZ SKRYPT
					require_once("phpmailer/class.phpmailer.php");
					
					$mail = new PHPMailer();
					
					//koniec body html etc.
					?>					
					

Od teraz mamy do dyspozycji wszystkie funkcje klasy PHPMailer, której dokumentacja znajduje się tutaj.

PHPMailer w akcji

Załóżmy, że chcemy wysyłać nasze emaile poprzez google mail. Oczywiście, jeżeli masz pocztę gdzie indziej to wszystko powinno działać podobnie, aczkolwiek możliwe, że Twoja poczta będzie się różnić np. portem i wtedy będziesz musiał dostosować ustawienia pod swoją pocztę. Wybieram google mail, ponieważ jest najczęściej używany.

Stwórzmy teraz podstawowy skrypt wysyłający testowego maila.

index.php
					<?php
					//html, meta tagi etc.
					
					//NASZ SKRYPT
					require_once("phpmailer/class.phpmailer.php");
					
					$mail = new PHPMailer();
					
					$mail->PluginDir = "phpmailer/";
					$mail->Mailer = "smtp";
					$mail->Host = "ssl://smtp.gmail.com";
					$mail->Port = 465;	
					
					$mail->SMTPKeepAlive = true;  					
					$mail->SMTPAuth = true;
					$mail->Username = "nasz_pelny_login";
					$mail->Password = "haslo";	
					
					$mail->SetLanguage("pl", "phpmailer/language/");				
					$mail->CharSet = "UTF-8";	
					$mail->ContentType = "text/html";					
							
					$mail->From = "mojnick@gmail.com";	
					$mail->FromName = "Arek";
					$mail->Subject = "Tytuł wiadomości";
					$mail->Body = 'To jest nowa testowa treść, z prawidłowo interpretowanymi polskimi znaczkami, a to jest pogrubione, a to jest link';
					
					$mail->AddAddress("gdzietowyslac@domena.pl");
					
					if($mail->Send())
				 	   echo "E-mail został wysłany 
"; else echo "E-mail nie mógł zostać wysłany, przyczyna :".$mail->ErrorInfo; $mail->SmtpClose(); //koniec body html etc. ?>

  • (Linia 9) - podajemy ścieżkę do folderu, w którym znajduje się PHPMailer.
  • (Linia 10) - zaznaczamy, że będziemy korzystać z zewnętrznego serwera obsługującego protokół SMTP.
  • (Linia 11) - podajemy adres serwera smtp naszej poczty, najczęściej jest to smtp.domenapoczty, gdzie domenapoczty to np. wp.pl, poczta.onet.pl etc. Dla google mail według ich specyfikacji musimy jeszcze dodać, że korzystamy z protokołu TLS (Transport Layer Security), który włącza funkcję STARTTLS (która jak sama nazwa wskazuje włącza połączenie TLS). Zapewnia nam to szyfrowanie przesyłanych danych oraz autentykację, czyli upewnienie się, że dane te wysyłane są na pewno przez odpowiednią osobę. TLS jest rozwinięciem protokołu SSL (Secure Socket Layer) i często zamiast TLS pisze się SSL, bo jest to w pewnym sensie wysoka wersja SSL. Z tego powodu przed smtp.gmail.com dopisujemy "ssl://".
  • (Linia 12) - podajemy numer portu (złącza), przez który mają zostać przesłane dane. Jest to najczęściej port 465 lub 587.
  • (Linia 14) - do naszego przyszłego programu od razu ustawiamy flagę SMTPKeepAlive (z ang. utrzymuj otwarte połączenie SMTP) na true, która sprawi, że w odróżnieniu od tego jak wspominałem na początku do funkcji mail() nasz protokół SMTP będzie otwarty dopóki nie zakończy się wykonywanie naszego skryptu lub nie zamkniemy połączenia funkcją SmtpClose.
  • (Linia 15) - ustawiamy flagę SMTPAuth (autentykacja SMTP) na true, co umożliwi nam wysłanie prośby o możliwość autentykacji naszych wkrótce dostarczanych danych do logowania na wybrany przez nas serwer z którym próbujemy nawiązać połączenie (w naszym wypadku gmail.com) .
  • (Linia 16) - podajemy pełną nazwę użytkownika np. login@gmail.com.
  • (Linia 17) - podajemy hasło do naszego konta
  • (Linia 19) - ustawiamy język na polski. Do dyspozycji jest wiele innych języków znajdują się one w folderze language.
  • (Linia 20) - ustawiamy kodowanie wysyłanych znaków zgodnie z kodowaniem naszej strony (UTF-8).
  • (Linia 21) - ustawiamy ContentType, czyli typ zawartości naszej wiadomość np. text/plain, text/html. Ustawiamy ContentType na text/html co pozwoli nam używać tagów z HTML.
  • (Linia 23) - podajemy nasz e-mail
  • (Linia 24) - podajemy jaka nazwa ma być wyświetlona przed naszym e-mailem np. <Arek> mojnick@gmail.com.
  • (Linia 25) - tytuł naszej wiadomości.
  • (Linia 26) - ciało, czyli treść naszej wiadomości.
  • (Linia 28) - funkcja dodająca adresy dokąd mają zostać wysłane wiadomości, jednak unikamy wywoływania tej funkcji wiele razy z innymi adresami, ponieważ każdy nasz odbiorca, będzie widział gdzie zostały wysłane pozostałe e-maile.
  • (Od Lini 30 do 33) - sprawdzamy czy e-mail został wysłany prawidłowo, jeżeli tak to potwierdzamy wysłanie, jeżeli nie to wyświetlamy błąd.
  • (Linia 35) - zamykamy połączenie.

Po podmianie Lini 16, 17, 23, 24, 28 sensownymi własnymi danymi, odpal skrypt i sprawdź czy wszystko działa. Na podany e-mail w lini 28, powinieneś dostać e-mail o treści podanej w lini 26. Pamiętaj, że może to chwilę potrwać. Jeżeli coś Ci nie działa to znaczy, że wykonałeś coś niepoprawnie, skrypt powinien powiedzieć Ci co takiego zrobiłeś źle.

Tworzenie bazy danych

Potrafimy już wysyłać pojedyncze wiadomości, także teraz zajmiemy się wysyłaniem wiadomości do wielu adresatów na raz pobieranych z bazy danych. Zacznijmy od stworzenia tabeli przechowujących adresy e-mail:

					CREATE TABLE `newsletter_emails` (
					  `ID` int(11) NOT NULL auto_increment,
					  `Email` varchar(50) collate utf8_polish_ci NOT NULL,
					  PRIMARY KEY  (`ID`)
					) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
					

Wrzućmy kilka przykładowych rekordów do bazy danych:

						INSERT INTO `newsletter_emails` VALUES(1, 'jakisemail1@domena.pl');
						INSERT INTO `newsletter_emails` VALUES(2, 'jakisemail2@domena.pl');
						INSERT INTO `newsletter_emails` VALUES(3, 'jakisemail3@domena.pl');

Oba te kody możemy wywołać w phpmyadmin, przy pomocy modułu "okienko zapytania" (query window). Pole ID jest identyfikatorem, czyli kluczem poszczególnych rekordów. Pole Email będzie przechowywało e-maile. Dodajmy do bazy danych e-maile, na których łatwo będzie nam testować nasz skrypt, czyli najlepiej nasze własne, nie wkurzajmy innych ludzi ;)

Połączenie z bazą danych

Stwórzmy nowy plik database_connect.php i umieśćmy w nim:

database_connect.php
					<?php
						@mysql_connect("localhost", "root", "vertrigo") or die("Could not connect");
						@mysql_select_db("nazwa_bazy_danych") or die("Could not select database");  
						mysql_query("SET NAMES 'utf8'");
					?>					
					

  • (Linia 2) - łączymy się z bazą danych, za localhost podajemy nazwę naszej domeny, za root nazwę naszego użytkownika, a za vertrigo hasło.
  • (Linia 3) - wybieramy bazę danych w której stworzyliśmy tabelkę
  • (Linia 4) - ustawiamy kodowanie pobranych danych na UTF-8.

Wysyłanie wielu maili na raz

Powracamy do naszego poprzedniego kodu, dodając w lini 6 plik database_connect.php oraz zmieniamy sposób wysyłania maili.

index.php
					<?php
					//html, meta tagi etc.
					
					//NASZ SKRYPT
					require_once("phpmailer/class.phpmailer.php");
					require_once("database_connect.php");
					
					$mail = new PHPMailer();
					
					$mail->PluginDir = "phpmailer/";
					$mail->Mailer = "smtp";
					$mail->Host = "ssl://smtp.gmail.com";
					$mail->Port = 465;	
					
					$mail->SMTPKeepAlive = true;  					
					$mail->SMTPAuth = true;
					$mail->Username = "nasz_pelny_login";
					$mail->Password = "haslo";	
					
					$mail->SetLanguage("pl", "phpmailer/language/");				
					$mail->CharSet = "UTF-8";	
					$mail->ContentType = "text/html";					
							
					$mail->From = "mojnick@gmail.com";	
					$mail->FromName = "Arek";
					$mail->Subject = "Tytuł wiadomości";
					$mail->Body = 'To jest nowa testowa treść, z prawidłowo interpretowanymi polskimi znaczkami, a to jest pogrubione, a to jest link';
					
					$wynik = mysql_query("SELECT Email FROM newsletter_emails") or die(mysql_error());
					
					while ($rekord = mysql_fetch_assoc($wynik))
					{
						$mail->AddAddress($rekord['Email']);
				
						if($mail->Send())
					 	   echo "E-mail do ".$rekord['Email']." został wysłany 
"; else echo "E-mail do ".$rekord['Email']." nie mógł zostać wysłany, przyczyna :".$mail->ErrorInfo."
"; $mail->ClearAddresses(); } $mail->SmtpClose(); //koniec body html etc. ?>

  • (Linia 29) pobieramy wszystkie emaile z tabeli newsletter_emails.
  • (Linia 31) pętla while wykonuje się dopóki prawdziwy jest warunek. Warunek jest prawdziwy dopóki jest różny od zera lub null. Funkcja mysql_fetch_assoc zwraca nam w postaci tablicy asocjacyjnej pobrany rekord i przesuwa się o jedno miejsce do przodu, aby przy następnym jej wywołaniu został pobrany inny w następnej kolejności rekord. Jeżeli w zmiennej $wynik znajduje się jakikolwiek rekord z naszej tabeli, to do zmiennej $rekord zostanie przypisana jakaś tablica asocjacyjna. Skoro jest "jakaś" to znaczy, że jest różna od zera lub null i pętla wykona instrukcje znajdujące się w jej ciele. Po przejściu przez ciało pętli funkcja mysql_fetch_assoc jest wywoływana ponownie. Za każdym razem przesuwa swoje wskazywanie (wskaźnik) o jedno miejsce dalej przez co w pewnym momencie wskaźnik będzie wskazywał na "nic", czyli null. Gdy funkcja zwróci null pętla przestanie się wykonywać. Reasumując taki zapis będzie się wykonywać dopóki są jakieś rekordy z pobranej tabeli w zmiennej $wynik.
  • (Linia 33) tablica asocjacyjna jak sama nazwa wskazuje jest tablicą przyporządkowującą (z ang. association) klucz (identyfikator) z wartością. Czyli działa identycznie jak matematyczna jednowartościowa funkcja. Z tego powodu możemy odwoływać się teraz przy pomocy $rekord['Email'] (klucz) do wartości, która się tam znajduje. Wywołując $mail->AddAddress($rekord['Email']); dodajemy adres, na który ma zostać wysłana wiadomość.
  • (Linia 35 do 38) sprawdzamy, czy mail został wysłany, jeżeli tak to informujemy o tym, jeżeli nie to podajemy co poszło nie tak.
  • (Linia 40) bardzo ważna funkcja, która "czyści" dodane adresy, czyli dokładniej ten, który przed chwilą został dodany w lini 33. Jeżeli nie użyjemy tej funkcji, to każdy następny adresat otrzyma niektóre adresy innych osób z naszej bazy.

Problemy przy dużych ilościach maili

Teoretyczne to by było już tyle, ale na wykonanie jakiegokolwiek skryptu w domyślnych opcjach mamy 30 sekund. Zmieńmy to na np. 5 minut, bo niekiedy mając więcej maili do wysłania możemy nie zdążyć wysłać wszystkich.

						set_time_limit(300); //jeżeli nie działa spróbuj ini_set("max_execution_time", "300");
					

Do przetestowania czy zmiana zaszła korzystamy z:

							echo "max_execution_time ".ini_get('max_execution_time');		
					

Funkcja set_time_limit nie tylko ustawia czas na wykonanie skryptu, ale go także resetuje, tzn. możemy umieścić np. w pętli set_time_limit(30), co spowoduje, że na każde jednorazowe przejście pętli, czyli wysłanie jednego maila będziemy mieli 30 sekund.

Następnym problemem może być to, że nasz serwer nie pozwala SPAMOWAĆ i powiedzmy ustalił, że na 60 sekund, może zostać wysłanych maksymalnie 60 wiadomości e-mail. Twój dostarczyciel poczty mógł np. pozwolić na wysłanie jedynie 10 maili na minutę, także może to wyglądać u Ciebie inaczej. Rozwiążmy ten problemy przy pomocy funkcji sleep, która zatrzymuje wykonywanie skryptu na określoną liczbę sekund. My będziemy oczekiwać 1 sekundę po każdej wiadomości.

					
					sleep(1);
					

Ostateczny kod

Nasz ostateczny kod z uwzględnieniem wszystkiego wygląda następująco:

index.php
					<?php
					echo '<html>
					<head>   
					    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
					</head>
					<body>'; 
										
					//NASZ SKRYPT
					require_once("phpmailer/class.phpmailer.php");
					require_once("database_connect.php");
					
					$mail = new PHPMailer();
					
					$mail->PluginDir = "phpmailer/";
					$mail->Mailer = "smtp";
					$mail->Host = "ssl://smtp.gmail.com";
					$mail->Port = 465;	
					
					$mail->SMTPKeepAlive = true;  					
					$mail->SMTPAuth = true;
					$mail->Username = "nasz_pelny_login";
					$mail->Password = "haslo";	
					
					$mail->SetLanguage("pl", "phpmailer/language/");				
					$mail->CharSet = "UTF-8";	
					$mail->ContentType = "text/html";					
							
					$mail->From = "mojnick@gmail.com";	
					$mail->FromName = "Arek";
					$mail->Subject = "Tytuł wiadomości";
					$mail->Body = 'To jest nowa testowa treść, z prawidłowo interpretowanymi polskimi znaczkami, a to jest pogrubione, a to jest link';
					
					$wynik = mysql_query("SELECT Email FROM newsletter_emails") or die(mysql_error());
					
					while ($rekord = mysql_fetch_assoc($wynik))
					{
						set_time_limit(30);					
						$mail->AddAddress($rekord['Email']);
				
						if($mail->Send())
					 	   echo "E-mail do ".$rekord['Email']." został wysłany 
"; else echo "E-mail do ".$rekord['Email']." nie mógł zostać wysłany, przyczyna :".$mail->ErrorInfo."
"; $mail->ClearAddresses(); sleep(1); } $mail->SmtpClose(); echo '</body></html>'; ?>

W taki oto sposób napisaliśmy skrypt masowego mailingu. Nie zapomnijmy o zmianie odpowiednich danych, stworzeniu tabelki oraz połączeniu się z naszą bazą danych.

Komentarze
IDDQD 14-06-2010 o godz. 18:39:11
+5 +  -
Nice Arkadiuszu !!! Napisz jakiś artykuł o socket serverach :D
lexter 23-06-2010 o godz. 00:34:58
+8 +  -
Właśnie tego potrzebowałem. Wielkie dzięki!
tomasz 04-09-2010 o godz. 17:19:34
+2 +  -
bardzo przydatne
Brygada RR 12-10-2010 o godz. 01:06:21
0 +  -
Dzięki!
Treker 27-12-2010 o godz. 08:15:44
-2 +  -
Przydatny artykuł ;) Wykorzystałem ten skrypt do budowy prostego systemu rozsyłającego wiadomości z CRON'a: http://treker.eu/2010/12/25/prosty-skrypt-do-mailingu-cz-1/
bluzmen 09-03-2011 o godz. 15:04:35
-8 +  -
Wysyła tyle razy ten sam mail ile jest adresów w bazie. Jeżeli w bazie mam np. 3 adresy to do każdego z nich wysyła 3 razy ten sam mail umieszczając w polu adresat wszystkie adresy z bazy.
andrew 02-09-2011 o godz. 12:38:30
0 +  -
czy jest mozliwość wysłania danych bez autoryzacji?
Morfidon odpowiedziano  05-09-2011 o godz. 21:50:48
+1 +  -
Jeżeli serwer nie wymaga to nie trzeba autoryzacji. Jednak w większości wypadków serwer wymaga autoryzacji.
andrew 06-09-2011 o godz. 15:53:51
+1 +  -
próbowałem wysłać mailing ze skrzynki na wp i gmailu, wszystko smigało, teraz muszę skorzystac ze skrzynki hostingowej na home.pl i nie mogę się połączyć z hostem. Nie wiem o co chodzi, $mail->Host = "ssl://xxx.home.pl. "; $mail->Port = 465; user i hasło ...w czym może byc problem?
Morfidon odpowiedziano  09-09-2011 o godz. 16:06:52
0 +  -
nie korzystam z usług home.pl, pytania dotyczących portu oraz hosta musisz wysłać do ich tech supportu
Beniu 14-12-2011 o godz. 21:47:54
+5 +  -
Jeden z najlepszych nauczycieli w necie. Dzięki! Pozdrawiam!
dede12 01-02-2012 o godz. 17:33:01
0 +  -
witam, a jak przebudowac skrypt aby do kazdego z adresatów wysyłał inny komunikat, tzn pobieram z bazy emaile i na podstawie id dopasowuje informacje do wysyłania, np . jakies przypominajki dla klientów
Mat 01-03-2012 o godz. 08:47:58
0 +  -
Mam problem, posiadam serwer na NetArt (www.nazwa.pl) i robię wysyłkę 3 000 maili w trakcie wyskakuje błąd serwera pt. "Zawieszenie CGI..."
Mat 01-03-2012 o godz. 09:42:59
0 +  -
ini_set("max_execution_time", "30"); set_time_limit(30); czy użyje jednego czy drugiego polecenia i tak serwer się wysypuje po 30 sekundach od momentu uruchomienia skryptu: pojawia się błąd: Internal Server Error : Wewnętrzny błąd serwera Wewnętrzny błąd serwera (np. zawieszenie programu CGI) lub błąd konfiguracji. The server encountered an internal error or misconfiguration and was unable to complete your request.
Morfidon odpowiedziano  01-03-2012 o godz. 15:20:31
0 +  -
Możliwe jest, że posiadają zabezpieczenia na poziomie httpd.conf, wtedy jedynie co można zrobić to poprosić ich o wydłużenie TimeOUT, lub też kupić VPS z możliwością edycji tego parametru.
eldorado222 22-09-2012 o godz. 13:52:00
0 +  -
hehe... dobre, wypróbuje, do dzisiaj korzystałem z zakupionego skryptu z panelem administracyjnym + do tego CRON, niestety tak się nabawiłem że w parę minut wywaliło im 50 tysięcy maili i boom... zablokowana możliwość wysyłki (błąd SMTP wszystkich konta email xD) To nic, po 20 minutach próba wejścia na serwer - you domain susspend, contact to webmaster or administration... ale to tylko wina serwerowni sk1.pl - odradzam, chociaż masz zgodę na wysyłkę maili to cię i tak i tak blokują, co najlepsze, płacisz za serwer i tak cię blokują, teraz korzystam z 100gb.co - lepiej trafić nie mogłem, za darmo plus domena newsmarketing.com za free bez ogranczen czasowych :) i dalej na tym samym skrypcie...
tajger 25-02-2013 o godz. 19:57:26
0 +  -
Hej! Bardzo pomógł mi ten artykuł. Polecam!
kda 13-07-2013 o godz. 00:35:04
0 +  -
Arku, To co i jak napisałeś jest The Best, nigdzie nie znalazłem tak łopatologicznie opisanej konfiguracji wysyłania maili Dzięki !!!
lewy 11-10-2013 o godz. 10:13:24
0 +  -
Rewelacja oby tak dalej
krzysieks997 14-10-2013 o godz. 17:09:02
0 +  -
Co dokładnie oznacza błąd: "SMTP ERROR: Failed to connect to server: (0)"
Morfidon odpowiedziano  16-10-2013 o godz. 09:40:08
0 +  -
Nie udało się połączyć z serwerem - prawdopodobnie podałeś niepoprawne dane poczty.
davo 29-10-2013 o godz. 00:19:20
+2 +  -
dobry tutek, jasno i czytelnie, warto dodać, że jeżeli jest większa ilość maili dobrze jest odpalać skrypt cronem np co kilka minut 50 maili Pozdrawiam
iao 09-11-2013 o godz. 15:42:10
0 +  -
Witam, wykonałem wszystko według wskazówek, niestety nie działa poprawnie wyskakują błędy: E-mail do ..... nie mógł zostać wysłany, przyczyna :Błąd SMTP: Następujący odbiorcy są nieprawidłowi: ..... SMTP server error: 4.1.2 : Recipient address rejected: Domain not found E-mail do ..... nie mógł zostać wysłany, przyczyna :Następujący adres Nadawcy jest jest nieprawidłowy: .... SMTP server error: 5.5.1 Error: nested MAIL command
Morfidon odpowiedziano  13-11-2013 o godz. 01:14:33
0 +  -
Tak jak wpisze w błędach... został źle podany adres do wysyłki.
iao 13-11-2013 o godz. 12:06:22
0 +  -
heh to to wiem, ale dlaczego nie wysyła dalej na poprawne adresy!? Jak się ma np. kilka tyś. adresów to może się zdarzyć, że któryś z nich już jest nie aktualny, więc skrypt powinien działać dalej, wysyłać na poprawne adresy a później tylko komunikat pokazać, na które wysłał a na które nie wysłał.
Ja 22-01-2015 o godz. 15:35:51
0 +  -
Fatal error: Class 'SMTP' not found in /home/xxx/domains/xxx/public_html/mailing/phpmailer/class.phpmailer.php on line 1197 co dalej ?
Jac odpowiedziano  14-12-2017 o godz. 04:54:42
0 +  -
miałem to samo pewnie nie wypełniłeś "smtp" tylko bezmyślnie wklejasz kod ze strony "ssl://smtp.gmail.com";
pk 03-03-2016 o godz. 23:22:03
0 +  -
tyle że PHPMailer korzysta z natywnej funkcji PHP mail() do wysyłania maili...
Kasia 12-10-2017 o godz. 00:48:34
0 +  -
Możesz zamieścić gotowy skrypt do pobrania?
Paulinkaa 12-10-2017 o godz. 00:49:32
-2 +  -
http://losuj-gierki.pl polecam fajna stronę na której można wylosować fajne gierki na steam. Wpadł mi GTAV, Wiedzmin 3 Dziki gon, 2 jakieś z gorszej póki, i poluje teraz na Tomb Raidera
Arkadiusz 12-10-2017 o godz. 00:50:09
-2 +  -
Znam tę stronę, losowałem całkiem fajna jest.
Daniel 28-04-2018 o godz. 19:42:23
0 +  -
Czy ten skrypt powinien jeszcze działać?
Dodaj własny komentarz:
Treść komentarza:
Nick:















NewsletterRSS - Video Kursy
Zapisz się do Newslettera i bądź na bieżąco z nowościami :-)
Twój e-mail:
*Szanujemy Ciebie i tak samo nie lubimy spamu jak Ty, będziemy informowali Cię tylko o samych nowościach związanych z Video Kursami. W każdym momencie, możesz wypisać się z Newsletera wysyłając do nas e-mail'a. Dla formalności przyciskając button "Zapisuje się*" akceptujesz nasze zasady prywatności.