Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Wysyłka e-maila z klasy phpmailer
Kerth
post
Post #1





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Cześć,
próbuję na VPS używać klasy phpmailer. Dziwne, bo pomimo błędu i komunikacie o wysłanym e-mailu, nie otrzymuję go. Dlaczego tak się dzieje? Proszę spójrzcie na ten kod:

  1. require_once('../phpmailer/class.phpmailer.php');
  2. //include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded
  3.  
  4. $mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch
  5.  
  6. $mail->IsSMTP(); // telling the class to use SMTP
  7.  
  8. try {
  9.  
  10. $mail = new PHPMailer();
  11. $mail->IsHtml(false); //format wiadomości jeśli true=HTML, false=TXT
  12. $mail->CharSet = "utf-8";
  13. $mail->PluginDir = "/var/www/portfolio/phpmailer/";
  14. $mail->From = "email"; // od
  15. $mail->FromName = "email"; //nazwa
  16. $mail->Host = "smtp.gmail.com"; //adres gmaila ;)
  17. $mail->Port = 587; //port gmaila
  18. $mail->Mailer = "smtp";
  19. $mail->Username = "email";//nazwa admina na poczcie
  20. $mail->Password = "Mojehasło";//hasło admina do konta SMTP
  21. $mail->SMTPAuth = true;
  22. $mail->SetLanguage("pl", "language/");
  23. $mail->SetFrom(''.$email.'', ''.$topic.'');
  24. $mail->Subject = ''.$topic.'';
  25. $mail->AltBody = nl2br($message); // optional - MsgHTML will create an alternate automatically
  26. $mail->Body = nl2br('Wiadomość od: '.$name.' || Treść: '.$message.'');
  27. $mail->Send();
  28.  
  29. } catch (phpmailerException $e) {
  30. echo $e->errorMessage(); //Pretty error messages from PHPMailer
  31. } catch (Exception $e) {
  32. echo $e->getMessage(); //Boring error messages from anything else!
  33. }


Port 465 też nie działa. Pomożecie?
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
nospor
post
Post #2





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




Jesli mail sie nie uda to o to:
$mail->Send();
zwroci false. A ty tego nie obslugujesz tylko jakis wyjatek. No chyba ze najnowszej wersji phpmailera zmienili to na wyjatek. zmienili?
Go to the top of the page
+Quote Post
Kerth
post
Post #3





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Po wywołaniu $mail->Send(); dałem tak:

  1. var_dump($mail->Send());

Rzeczywiście zwraca mi false. Co tu może być nie tak? Co z tymi wyjątkami?

Byłby w stanie ktoś coś podpowiedzieć w jaki sposób podłączyć to pod gmail?
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




Obiekt $mail ma w sobie informacje o bledzie. Wyswietl go sobie, a moze sie rozjasni trochę.
Go to the top of the page
+Quote Post
Kerth
post
Post #5





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


W jaki sposób mam wyświetlić błędy obiektu mail?

  1. ini_set("display_errors", 1);


nie powoduje w tym przypadku, że otrzymam błędy.
Go to the top of the page
+Quote Post
nospor
post
Post #6





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




Napisalem ze obiekt $mail czyli klasa PHPMailer zawiera w sobie wlasciwosc, ktora trzyma ostatni blad. Wyswietl to sobie. Jak nie wiesz ktora to, to zajrzyj do dokumentacji lub przykladow. Tam jest napisane a ja nie pamietam dokladnie jak to sie nazywalo. errorInfo czy jakos tak
Go to the top of the page
+Quote Post
Kerth
post
Post #7





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Skorzystałem z tego ErrorInfo. Otrzymałem takie coś:


  1.  
  2. SMTP -> ERROR: Password not accepted from server: 534-5.7.14 Please log in via your web browser and 534-5.7.14 then try again. 534-5.7.14 Learn more at 534 5.7.14 <a href="https://support.google.com/mail/answer/78754" target="_blank">https://support.google.com/mail/answer/78754</a> y1sm873923wib.7 - gsmtp
  3. SMTP -> ERROR: MAIL not accepted from server: 530-5.5.1 Authentication Required. Learn more at 530 5.5.1 <a href="https://support.google.com/mail/answer/14257" target="_blank">https://support.google.com/mail/answer/14257</a> y1sm873923wib.7 - gsmtp
  4. The following From address failed: email@gmail.com : MAIL not accepted from server,530,5.5.1 Authentication Required. Learn more at 530 5.5.1 <a href="https://support.google.com/mail/answer/14257" target="_blank">https://support.google.com/mail/answer/14257</a> y1sm873923wib.7 - gsmtp
  5. SMTP server error: 5.5.1 Authentication Required. Learn more at 530 5.5.1 <a href="https://support.google.com/mail/answer/14257" target="_blank">https://support.google.com/mail/answer/14257</a> y1sm873923wib.7 - gsmtp
  6.  
  7. Mailer Error: The following From address failed: email@gmail.com : MAIL not accepted from server,530,5.5.1 Authentication Required. Learn more at 530 5.5.1 <a href="https://support.google.com/mail/answer/14257" target="_blank">https://support.google.com/mail/answer/14257</a> y1sm873923wib.7 - gsmtp
  8. SMTP server error: 5.5.1 Authentication Required. Learn more at 530 5.5.1 <a href="https://support.google.com/mail/answer/14257" target="_blank">https://support.google.com/mail/answer/14257</a> y1sm873923wib.7 - gsmtp
  9.  
  10. SMTP server error: 5.5.1 Authentication Required. Learn more at 530 5.5.1 <a href="https://support.google.com/mail/answer/14257" target="_blank">https://support.google.com/mail/answer/14257</a> y1sm873923wib.7 - gsmtp
  11.  


Co zrobić?

Ten post edytował Kerth 30.07.2015, 21:35:03
Go to the top of the page
+Quote Post
vokiel
post
Post #8





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

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


Podać prawidłowe dane, masz przecież w błędach przyczyny:
- Password not accepted
- Authentication Required

W skrócie oznacza to, że żeby wysłać maile z Gmaila trzeba się autoryzować loginem i hasłem do poczty.

Wystarczy zajrzeć do przykładów na stronie PHPMailer'a: http://phpmailer.worxware.com/?pg=examplebgmail http://phpmailer.worxware.com/index.php?pg=exampleagmail
Go to the top of the page
+Quote Post
Kerth
post
Post #9





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Ok. Z tym sobie poradziłem tylko mam teraz pytanie. Dlaczego wiadomości wysyłane przez klasę PHPMailer przychodzą w poczcie gmail do folderu SPAM?
I dlaczego przychodzą po 2 wiadomości? Tak to wygląda:

(IMG:http://i.imgur.com/46RsFDW.png)

Kod:

  1. <?php
  2. ini_set("display_errors", 1);
  3. class Message{
  4. function SendMessage(){
  5. $name = isset($_POST['name']) ? $_POST['name'] : false;
  6. $email = isset($_POST['email']) ? $_POST['email'] : false;
  7. $topic = isset($_POST['topic']) ? $_POST['topic'] : false;
  8. $message = isset($_POST['message']) ? $_POST['message'] : false;
  9.  
  10. if(isset($_POST['send_message'])){
  11. include "../phpmailer/class.phpmailer.php"; // include the class name
  12. $mail = new PHPMailer(); // create a new object
  13.  
  14. $mail->Host = 'smtp.gmail.com';
  15. $mail->Port = 587;
  16. $mail->SMTPSecure = 'tls';
  17. $mail->SMTPAuth = true;
  18. $mail->Username = "myemail@gmail.com";
  19. $mail->Password = "password";
  20.  
  21. $mail->AddAddress('myemail@gmail.com','myname');
  22.  
  23. $mail->CharSet = "UTF-8";
  24. $mail->AltBody = nl2br($message); // optional - MsgHTML will create an alternate automatically
  25. $mail->Body = nl2br('Wiadomość od: '.$name.' || Treść: '.$message.'');
  26.  
  27. $mail->SetFrom($email);
  28. $mail->Subject = ''.$topic.'';
  29.  
  30. //$mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
  31. //$mail->SMTPKeepAlive = true;
  32. $mail->IsHTML(true);
  33.  
  34. if(!$mail->Send()){
  35. echo "Mailer Error: " . $mail->ErrorInfo;
  36. }
  37. else{
  38. echo '<meta charset="utf-8"/>';
  39. echo "<script>alert('Dziękuję za przesłanie wiadomości. Odpowiem na nią jak najszybciej.');</script>";
  40. echo '
  41. <script>
  42. setTimeout(function(){
  43. window.location.href = "../index.php";
  44. },
  45. 100);
  46. </script>
  47. ';
  48. var_dump($mail->Send());
  49. }
  50. }
  51. }
  52. }
  53. $send = new Message();
  54. $send->SendMessage();
  55. ?>


Dlaczego otrzymuję wiadomości do SPAMu?
Proszę też nie patrzcie na stosowanie tu mojej wybitnej twórczości jaką jest pseudo obiektowość (IMG:style_emoticons/default/smile.gif)

Ten post edytował Kerth 31.07.2015, 13:36:04
Go to the top of the page
+Quote Post
nospor
post
Post #10





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




To raczej nie ma zwiazku z PHPMailer tyko z kontem z ktorego wysylasz maile.
Go to the top of the page
+Quote Post
Kerth
post
Post #11





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


To bez znaczenia jaki adres podam przy wysyłaniu e-mail i tak zawsze wiadomość trafia do SPAMu. Wiesz może jak temu zaradzić?
Go to the top of the page
+Quote Post
nospor
post
Post #12





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




No na pewno nie podales mojego (IMG:style_emoticons/default/wink.gif) A mojego nigdy do spamu nie trafialo.
Go to the top of the page
+Quote Post
Kerth
post
Post #13





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Nie chcę schodzić na bezsensowną polemikę ale znalazłem Twój e-mail na Twojej stronie, wpisałem i uwierz mi, że również wiadomości idą do SPAMu (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
kapslokk
post
Post #14





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Przecież nie wysyłasz maila z jego skrzynki, tylko dajesz nagłówek, który mówi, że to jego mail. Dlatego możesz trafiać do spamu. Spróbuj wysłać maila z nagłówkiem takim jak jego faktyczny adres.
Go to the top of the page
+Quote Post
Kerth
post
Post #15





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Tak też robię ale pomimo tego, wiadomości wysyłane przez formularz kontaktowy, korzystające z tej klasy ZAWSZE trafiają do SPAMu. Nie ważne jaki podam adres email w nagłówku. Dla potwierdzenia:

(IMG:http://i.imgur.com/EmyPc7b.png)
Go to the top of the page
+Quote Post
kapslokk
post
Post #16





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Jeżeli używasz do wysyłania skrzynki myemail@gmail.com to w nagłówku nadawce ustaw jako myemail@gmail.com, a nie nospor@gmail.com czy cokolwiek innego.

Wyobraź sobie sytuacje:
wysyłasz maila z nagłówkiem adresu bill@microsoft.com i piszesz :
"Cześć Halina, zapomniałem sobie przelać kasy na moje drugie konto, wyślij mi stówke a oddam dwie."
I to nie trafia do spamu... Bez sensu, prawda? (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Kerth
post
Post #17





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Nie rozumiesz. W:
  1. $mail->SetFrom($email);

pobieram przesłany adres e-mail z pola "Adres email" w formularzu kontaktowym. Dodam, że nawet jeśli w formularzu podam nadawcę jako siebie i wysyłam również do siebie to wiadomość także opatrzona jest jako spam.
Go to the top of the page
+Quote Post
kapslokk
post
Post #18





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


A czy jeśli zalogujesz się normalnie na tą skrzynkę, i wyślesz do siebie maila to też trafia do spamu? Czy nie?
Go to the top of the page
+Quote Post
Kerth
post
Post #19





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Wtedy nie trafia do spamu. Wiadomośc otrzymuję wtedy normalnie.
Go to the top of the page
+Quote Post
Skie
post
Post #20





Grupa: Zarejestrowani
Postów: 555
Pomógł: 84
Dołączył: 20.02.2008
Skąd: Małopolska

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


Wiadomośc trafia do spamu prawdopodobnie dlatego, że wysyłasz w tym samym czasie dwie identyczne wiadomości z tego samego konta do tego samego innego. Jak tego nie traktować jako spam?

Wiadomość z kolei jest wysyłana dwa razy dlatego, że wywołujesz $mail->Send() dwa razy - raz w linii 35 i raz w 49.

Zmień warunek z linii 35 na
  1. if (($status = $mail->Send()) === false)


i var_dump z linii 49 na
  1. var_dump($status);


Powinno działać dobrze.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 22.08.2025 - 16:12