Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PHPMailer - błąd przy ustaleniu nadawcy
Mateushh
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.08.2014

Ostrzeżenie: (0%)
-----


Witam,

wysyłam maila PHPmailerem na gmail. Wszystko pięknie, mail dochodzi, z tym że nie tak jak powinien.
(IMG:http://iv.pl/images/22498508093725775385.png)
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ć?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 17)
casperii
post
Post #2





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


  1. $mail->SetFrom(''.$emailSender.'', ''.$name.'');
  2. $mail->AddReplyTo(''.$emailSender.'', ''.$name.'');
  3. $mail->Sender = $emailSender;
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




casperii wyjasnij mi prosze, bo bardzo mnie to ciekawi, co robią '' w tym kodzie:
''.$emailSender.''
Go to the top of the page
+Quote Post
casperii
post
Post #4





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Teraz jest 11 w dzien i nadal masz problemy z czytaniem. Zadalem zupelnie inne pytanie
Go to the top of the page
+Quote Post
casperii
post
Post #6





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


$emailsender jest nazwą zmiennej , która otrzymuję wartość $_POST["contact_email"] po wysłaniu forma metodą post.
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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?
Go to the top of the page
+Quote Post
casperii
post
Post #8





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


@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);
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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...
Go to the top of the page
+Quote Post
casperii
post
Post #10





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


Zadałem pytanie:
w czym to przeszkadza czy napiszę sobie:
echo ''.$emailsender.''; a nie echo $emailsender;
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
casperii
post
Post #12





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


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.'';
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post
casperii
post
Post #14





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


@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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #15





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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....
Go to the top of the page
+Quote Post
vokiel
post
Post #16





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


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) {

Go to the top of the page
+Quote Post
Pyton_000
post
Post #17





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


@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...
Go to the top of the page
+Quote Post
Mateushh
post
Post #18





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.08.2014

Ostrzeżenie: (0%)
-----


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 :<
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.09.2025 - 00:56