Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHPMailer - błąd przy ustaleniu nadawcy
Forum PHP.pl > Forum > PHP
Mateushh
Witam,

wysyłam maila PHPmailerem na gmail. Wszystko pięknie, mail dochodzi, z tym że nie tak jak powinien.

Zamiast maila nadawcy, wyświetla się adres moj, czyli odbiorcy.


  1. $name = strip_tags(trim($_POST["contact_id"]));
  2. $name = str_replace(array("\r","\n"),array(" "," "),$name);
  3. $emailsender = filter_var(trim($_POST["contact_email"]), FILTER_SANITIZE_EMAIL);
  4. $message = trim($_POST["contact_content"]);
  5.  
  6. $mail = new PHPMailer();
  7. $mail->CharSet = "UTF-8";
  8.  
  9. $mail->IsSMTP();
  10. $mail->Host = "smtp.gmail.com";
  11. $mail->Port = 465;
  12. $mail->SMTPAuth = true;
  13. $mail->Username = "mojadres@gmail.com";
  14. $mail->Password = "mojehaslo";
  15. $mail->SMTPSecure = "ssl";
  16.  
  17. $mail->From = $emailsender;
  18. $mail->FromName = $name;
  19. $mail->Sender = $emailsender;
  20. $mail->AddReplyTo($emailsender, $name);
  21. $mail->AddAddress('mojadres@gmail.com', 'mati');
  22.  
  23. $mail->IsHTML(true);
  24. $mail->Subject = 'Nowa wiadomość od: '.$name;
  25.  
  26. $gridBody = "<h3>Witaj</h3></br>";
  27. $gridBody .= "<p class='sekcja-wiadomosci'>Otrzymałeś nową wiadomość od: ".$name.".</p>";
  28. $gridBody .= "Jak najszybciej skontaktuj się z nadawcą!<br/><br/><br/>";
  29. $gridBody .= "<p class='sekcja-wiadomosci'>".$message."</p>";
  30.  
  31. $mail->Body = nl2br($gridBody);
  32. $mail->AltBody = 'Wiadomość została niepoprawnie wysłana. Wystąpił błąd podczas jej wysyłania.';
  33.  
  34. $mail->Send();
  35. echo 'Dziękujemy! Twoja wiadomość została wysłana.';
  36.  
  37. $mail->ClearAddresses();
  38. $mail->ClearAttachments();



Jak temu zaradzić?
casperii
  1. $mail->SetFrom(''.$emailSender.'', ''.$name.'');
  2. $mail->AddReplyTo(''.$emailSender.'', ''.$name.'');
  3. $mail->Sender = $emailSender;
nospor
casperii wyjasnij mi prosze, bo bardzo mnie to ciekawi, co robią '' w tym kodzie:
''.$emailSender.''
casperii
Cytat(nospor @ 19.07.2015, 09:38:40 ) *
casperii wyjasnij mi prosze, bo bardzo mnie to ciekawi, co robią '' w tym kodzie:
''.$emailSender.''


@nospor
trzecia linijka tego kodu:
  1. $emailsender = filter_var(trim($_POST["contact_email"]), FILTER_SANITIZE_EMAIL);


A to, że napisałem:
$emailSender zamiast $emailsender to nie duży błąd, zwłaszcza o godz. 3:28.
nospor
Teraz jest 11 w dzien i nadal masz problemy z czytaniem. Zadalem zupelnie inne pytanie
casperii
$emailsender jest nazwą zmiennej , która otrzymuję wartość $_POST["contact_email"] po wysłaniu forma metodą post.
nospor
Nadal nie o to pytam. Wyraźnie napisalem:
Cytat
co robią '' w tym kodzie

Naprawde nie widzisz ze tam są dwa apostrofy w pytaniu? Dokladnie takie same jakie ty dajesz w swoim kodzie. Pytam się: po co?
casperii
@nospor. Nie wiem co to za głupie pytania i nie potrzebna dyskusja nie związana z tematem.

Tak samo dlaczego echo ''.$emailsender.''; a nie echo $emailsender;

Mam po prostu takie przyzwyczajenie i już.

Skoro jesteś taki omnibus to odpowiedz w czym to przeszkadza czy napiszę sobie:

echo ''.$emailsender.''; a nie echo $emailsender;

albo:

$mail->SetFrom('$emailSender', '$name');

czy też , chociaż nie wiem czy parsera nie wywali:

$mail->SetFrom($emailSender, $name);
nospor
To nie są głupie pytania. Piszesz źle to sie pytam czemu i tyle.

Nie:
$mail->SetFrom(''.$emailSender.'', ''.$name.'');

a:
$mail->SetFrom($emailSender, $name);

To ze sam masz złe przyzwyczajenia nie oznacza, ze masz nimi zarazac innych

Cytat
albo:

$mail->SetFrom('$emailSender', '$name');
A to to juz w ogole tragedia... apostrofy nie parsują zmiennych...
casperii
Zadałem pytanie:
w czym to przeszkadza czy napiszę sobie:
echo ''.$emailsender.''; a nie echo $emailsender;
nospor
A ja ci odpowiedzialem. Ty naprawde masz dzis problemy z czytaniem... dobrze, zacytuje ci jeszcze raz:

Cytat
Piszesz źle to sie pytam czemu i tyle.
....
To ze sam masz złe przyzwyczajenia nie oznacza, ze masz nimi zarazac innych
casperii
Gdyby było źle to by wyświetliło błąd. A zarówno jak i jedna tak i druga forma jest poprawnie wyświetlona.
Dobrze zapytam się w inny sposób:

Podaj różnicę zapisu i dlaczego uważasz, że jest ona zła:
  1. echo ''.$emailsender.''; a nie echo $emailsender;


Nie pytam tutaj o to , że druga forma jest krótsza, czy że nie ma ' ' :-)
Tylko dlaczego powinno się pisać echo $cos; a nie echo ''$cos.'';
nospor
Z Krakowa do Warszawy mozesz jechac przez Berlin. Nikt ci nie broni... ale nie pisz na forum, ze to poprawna droga bo nie jest.
Identycznie z kodem ktory wstawiasz... To ze php nie pluje bledem nie oznacza, ze jest to dobry kod. Masz jakies niedobre przyzwyczajenia wynikajacy z braku podstaw i propagujesz je na forum i nie daj boze ktos pomysli ze tak sie wlasnie pisze.... Nie, tak sie nie pisze. Tak piszą osoby, ktore nie ogarniają podstaw. Zwracam ci wiec na to uwage, moze sam sie czegos nauczysz.
casperii
@nospor nie twierdzę, że jestem prymusem PHP. Czy też hiper , super mega programistą. "Jakąś" wiedzę posiadam, którą stopniowo poszerzam, lecz daleko mi to perfekcyjności i jestem tego świadom.
Pisząc coś i natrafiając na błąd jak zauważyłeś nie szukam gotowego rozwiązania tylko naprowadzenia. Za to ty jesteś jak już Ci kiedyś pisałem specyficzną osobowością, która w jakiś sposób nie pała chęcią niesienia pomocy, tylko myślenia ironicznego :-) (u know what i mean). Co w moim przypadku jest więcej nerwów niż logicznego myślenia.

Nadal nie otrzymałem jasnych argumentów tylko dziwne porównanie jazdy przez Berlin.
Wydaje mi się, że to ma taki sam sens jak pisząc echo a print. Jedni wolą brunetki inni rude smile.gif
nospor
O to:
echo ''.$emailsender.'';
nie ma zadnego sensu. Tu nie ma co wyjasniac.

Co do pomagania to pomagam caly czas. Nie moja wina ze nie dociera do ciebie co się Tobie pisze....
vokiel
Co do tego
  1. echo ''.$emailsender.''; // == pusty ciąg + wartość w $emailsender + pusty ciąg
  2. echo $emailsender; // == wartość w $emailsender


To może wygląda na mikro-optymalizację, ale łączenie stringów z dwoma pustymi ciągami nic nie daje - wynik jest ten sam (o ile wartość w $emailsender jest typu string), powoduje tylko/aż tyle, że PHP musi wykonać dodatkowo dwie niepotrzebne operacje. To nie to samo co różnica między echo a print (chociaż one też mają kilka różnic).

W tym przypadku nie ma różnicy, bo SetFrom przyjmuje jako parametry tylko ciągi znaków. Ale wyobraź sobie, że ta funkcja mogłaby mieć inne działanie w zależności od typu zmiennej - jeśli to tablica to pobiera pierwszy element jako email a drugi jako nazwę, jeśli string to pierwszy parametr jako email, drugi parametr jako nazwę. Dodając cudzysłów wymuszasz niejawnie typ, a w przypadku łączenia ciągów z tablicą będziesz miał błąd:
Kod
PHP Notice:  Array to string conversion in ...



Wracając do tematu.
Nie musisz więc nawet ręcznie ustawiać pola Sender
  1. $mail->SetFrom($emailSender, $name);
  2. $mail->AddReplyTo($emailSender.'', $name);
  3. // Sender jest ustawiany automatycznie
  4. $mail->Sender = $emailSender;

  1. /**
  2.  * Set the From and FromName properties
  3.  * @param string $address
  4.  * @param string $name
  5.  * @param boolean $auto Whether to also set the Sender address, defaults to true
  6.  * @throws phpmailerException
  7.  * @return boolean
  8.  */
  9. public function SetFrom($address, $name = '', $auto = true) {

Pyton_000
@casperii jest nie poprawnie bo:

1. Jak @vokiel powiedział, jest to łączenie stringów (w tym przypadku min. 2) ze sobą.
2. Całość jest rzutowana do string (co nie zawsze może być dobre:
-
  1. $aa = 11;
  2.  
  3. var_dump(''.$aa.'');
  4. // string(2) "11"
  5.  
  6. var_dump($aa);
  7. // int(11)
  8.  
  9. $bb = array(1,2);
  10.  
  11. var_dump(''.$bb.'');
  12. // PHP Notice: Array to string conversion
  13.  
  14. var_dump($bb);
  15. /*array(2) {
  16.   [0] =>
  17.   int(1)
  18.   [1] =>
  19.   int(2)
  20. }
  21. */


3. Zbędne znaki, zbędne stracone miejsce, zbędnie klepanie
4. mikro-wydajność - Może i mikro, ale od najprostszych rzeczy trzeba zaczynać. Bo potem będziesz pisał w stylu:
  1. for($i=0; $i < count($atr); $i++)

5. Dobre nawyki programistyczne (to samo będzie z formatowaniem)

Wiele wiele więcej można wymieniać. Ale po co...
Mateushh
Cytat(vokiel @ 20.07.2015, 13:30:06 ) *
Co do tego
  1. echo ''.$emailsender.''; // == pusty ciąg + wartość w $emailsender + pusty ciąg
  2. echo $emailsender; // == wartość w $emailsender


To może wygląda na mikro-optymalizację, ale łączenie stringów z dwoma pustymi ciągami nic nie daje - wynik jest ten sam (o ile wartość w $emailsender jest typu string), powoduje tylko/aż tyle, że PHP musi wykonać dodatkowo dwie niepotrzebne operacje. To nie to samo co różnica między echo a print (chociaż one też mają kilka różnic).

W tym przypadku nie ma różnicy, bo SetFrom przyjmuje jako parametry tylko ciągi znaków. Ale wyobraź sobie, że ta funkcja mogłaby mieć inne działanie w zależności od typu zmiennej - jeśli to tablica to pobiera pierwszy element jako email a drugi jako nazwę, jeśli string to pierwszy parametr jako email, drugi parametr jako nazwę. Dodając cudzysłów wymuszasz niejawnie typ, a w przypadku łączenia ciągów z tablicą będziesz miał błąd:
Kod
PHP Notice:  Array to string conversion in ...



Wracając do tematu.
Nie musisz więc nawet ręcznie ustawiać pola Sender
  1. $mail->SetFrom($emailSender, $name);
  2. $mail->AddReplyTo($emailSender.'', $name);
  3. // Sender jest ustawiany automatycznie
  4. $mail->Sender = $emailSender;

  1. /**
  2.  * Set the From and FromName properties
  3.  * @param string $address
  4.  * @param string $name
  5.  * @param boolean $auto Whether to also set the Sender address, defaults to true
  6.  * @throws phpmailerException
  7.  * @return boolean
  8.  */
  9. public function SetFrom($address, $name = '', $auto = true) {


niestety to nic nie dało :<
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.