-Maciek1705-
8.03.2011, 10:24:12
Witam wszystkich serdecznie otóż mam takie pytanie z problemem, niedawno przyszło mi zrobić dość ciekawy skrypt musi on wysyłać 2 różne wiadomości do 2 różnych adresatów na raz. Dotychczas korzystałem z klasy phpmailer do wysyłania kilku tych samych sztuk lub pojedynczych wiadomości. Próbowałem więc napisać ten skrypt z pomocą phpmailer i powstało coś takiego:
<?php
header('Content-Type: text/html; charset=utf-8');
$name = $_POST['name'];
$email = $_POST['email'];
$weight = $_POST['weight'];
$unit = $_POST['unit'];
$sex = $_POST['sex'];
$height = $_POST['height'];
$old = $_POST['old'];
$dream_weight = $_POST['dream_weight'];
//first email
require("PHPMailer/class.phpmailer.php"); //zalaczenie klasy php
$mail = new PHPMailer();
$mail->IsMail(); //
//$mail_s->IsSMTP(); //deklaracja klasie uzycia serwera SMTP
//$mail_s->Host = "poczta.pl"; //serwer SMTP
//$mail_s->SMTPAuth = true; //wlaczona autoryzacja SMTP
//$mail_s->Username = ''; //SMTP login
//$mail_s->Password = ''; //SMTP haslo
$mail->AddReplyTo($email, $name);
$mail->AddAddress("example@vp.pl"); //adres odbiorców 1 odbiorcy
$mail->SetFrom($email, $name);
$mail->Subject = "Profil dietetyczny - potwierdzenie wysłania wiadomości"; //tytul wiadomosci
$mail->Body = "Dziękujemy za wysłanie wiadomości. Wkrótce się z Państwem skontaktujemy"; //tresc wiadomosci
$mail->WordWrap = 50;
$mail->CharSet = "utf-8"; //strona kodowa
if(!$mail->Send())
{
echo 'Message was not sent.'; echo 'Mailer error: ' . $mail->ErrorInfo; }
else
{
echo 'Wiadomość została wysłana.'; }
$body = "waga: ".$weight.$unit." preferowana waga: ".$dream_weight;
$body .= "płeć: ".$sex;
$body .= "wzrost: ".$height;
$body .= "wiek: ".$old;
//second email
require("PHPMailer/class.phpmailer.php"); //zalaczenie klasy php
$mail2 = new PHPMailer();
$mail2->IsMail(); //
//$mail_s->IsSMTP(); //deklaracja klasie uzycia serwera SMTP
//$mail_s->Host = "poczta.pl"; //serwer SMTP
//$mail_s->SMTPAuth = true; //wlaczona autoryzacja SMTP
//$mail_s->Username = ''; //SMTP login
//$mail_s->Password = ''; //SMTP haslo
$mail2->AddReplyTo($email, $name);
$mail2->AddAddress("example@vp.pl"); //adres 2 odbiorcy
$mail2->SetFrom($email, $name);
$mail2->Subject = "Profil dietetyczny - wiadomość ze strony"; //tytul wiadomosci
$mail2->MsgHTML($body); //tresc wiadomosci
$mail2->WordWrap = 50;
$mail2->CharSet = "utf-8"; //strona kodowa
if(!$mail2->Send())
{
echo 'Message was not sent.'; echo 'Mailer error: ' . $mail2->ErrorInfo; }
else
{
echo 'Wiadomość 2 została wysłana.'; }
?>
pierszwa wiadomość wysyła się bez problemu natomiast kolejna już nie. Będę wdzięczny za sugestie i pomoc w tej sprawie.
Podejrzewam, że chodzi o zabezpieczenie antyspamowe. Musisz odczekać kilka sekund (czas zależny od administratora) albo wysyłać kolejnego adresata przez pole BCC.
nospor
8.03.2011, 11:16:29
A jak dla mnie to dostaje FATAL ERROR spowodu podwójnego require klasy phpmailer

@Maciek po co tworzysz kolejne obiekty phpmailer? Obiekt tworzysz raz, tylko zmieniasz adresatów i tresc
-Maciek1705-
9.03.2011, 10:33:14
aha ok wobec tego spróbuje tak jak radzi nospor i zobaczę czy coś się ruszy, no chyba że faktycznie jest zabezpieczenie antyspamowe. Dzięki za radę i pozdrawiam
bluzmen
9.03.2011, 21:22:07
Ja się podłącze z moim kodem i moim problemem do tego postu. Chodzi o to, że wysyłam np. do 3 adresatów pobranych z bazy tą pętlą i do każdego z nich dochodzą 3 maile (takie same). Tylko w polu adresów u odbiorcy pojawiają się w pierwszym mailu 3 adresy (z bazy), drugim 2 adresy i w trzecim 1 adres. Czyli razem wysyła 9 listów do wszystkich adresatów. Co robię źle?
require_once('class.phpmailer.php');
$polaczenie = mysql_connect("localhost", "login", "haslo") or
die ("Nie masz uprawnien");
$mail = new PHPMailer();
$mail->Priority = "3";
$mail->CharSet = "utf-8";
$mail->ContentType = "text/plain";
$mail->Encoding = "8bit";
$mail->From = "moja@poczta.pl";
$mail->FromName = "bluzmen";
$mail->Subject = $_POST['Temat'];
$mail->Body = $_POST['Tresc'];
$mail->Mailer = "smtp";
$mail->Host = "poczta.smtp.pl:587";
$mail->Port = 587;
$mail->Username = "moja@poczta.pl";
$mail->Password = "*******";
$mail->SMTPKeepAlive = true;
$mail->SMTPAuth = true;
$mail->SetLanguage("pl", "language/");
$mail->AddAddress($rekord);
if($mail->Send()) {
echo "E-mail do ".$rekord['adresy']." został wysłany<br/>"; } else {
echo "E-mail do ".$rekord['adresy']." nie mógł zostać wysłany, przyczyna :".$mail->ErrorInfo."<br/>"; $mail->ClearAddresses();
}
}
$mail->SmtpClose();
nospor
9.03.2011, 22:33:53
$mail->AddAddress($rekord);
Przecież $rekord to tablica a nie adres. Jakim cudem ci to w ogole dziala.
bluzmen
10.03.2011, 12:09:38
No właśnie, $rekord to jest tablica, działa bo wkleja do AddAddress ciąg adresów i wysyła. Jak z tej tablicy wyjąć pojedynczo adresy?
nospor
10.03.2011, 12:19:48
zrob
print_r($rekord);
i pokaż nam/sobie co tam siedzi.
bluzmen
10.03.2011, 14:16:24
Array ( [adresy] => nigger2@o2.pl ) Array ( [adresy] => nigger3@o2.pl ) Array ( [adresy] => nigger4@o2.pl) itd.
nospor
10.03.2011, 14:46:26
No, i nie uważasz że powinno być tak:
$mail->AddAddress($rekord['adresy']);
?
bluzmen
10.03.2011, 14:53:59
Cytat(nospor @ 10.03.2011, 14:46:26 )

No, i nie uważasz że powinno być tak:
$mail->AddAddress($rekord['adresy']);
?
poprawka
Wysyła ale dalej po 3 maile i w każdym jak ww 3,2 i 1 adres odbiorcy. To ciekawe jak będzie kiedy w bazie będzie 100 adresów:P
nospor
10.03.2011, 15:08:20
ej.....
$mail->ClearAddresses();
o to ma być poza IFem a nie w środku....
bluzmen
10.03.2011, 15:26:12
Cytat(nospor @ 10.03.2011, 15:08:20 )

ej.....
$mail->ClearAddresses();
o to ma być poza IFem a nie w środku....
Wiem, już zauważyłem i poprawiłem wcześniej ale to nic nie zmienia też.
nospor
10.03.2011, 15:32:32
Pokaz jak to poprawiles bo pewnie źle to zrobiles.
Pamietaj że ma to być w pętli a nie poza nią. Ma to być poza ifem
......
Ma to byc tak:
//.....
$mail->ClearAddresses();
$mail->AddAddress($rekord['adresy']);
//.....
bluzmen
10.03.2011, 15:36:56
Wkleję kod od tego momentu już
........
if($mail->Send()) {
echo "E-mail do ".$rekord['adresy']." został wysłany<br/>"; } else {
echo "E-mail do ".$rekord['adresy']." nie mógł zostać wysłany, przyczyna :".$mail->ErrorInfo."<br/>"; }
$mail->ClearAddresses();
$mail->AddAddress($rekord['adresy']);
}
$mail->SmtpClose();
Tak właściwie dobrze wysyła tylko wypluwa błąd "Należy podać prawidłowy adres email Odbiorcy" przy wysyłaniu do pierwszego adresu ale dochodzi mimo to.
nospor
10.03.2011, 16:04:21
Włącz myślenie....
teraz najpierw wysylasz a dopiero potem dodajesz adresata.
bluzmen
10.03.2011, 22:04:16
Tak już zauważyłem wcześniej:) to było moje zaniedbanie tym razem, zła kolejność. Przepraszam i dziękuję mimo wszystko za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.