Problem z konfiguracją biblioteki PHPMailer

0

Hej, od kilku dni męczę się z umieszczeniem opcji wysyłania maili na mojej stronce internetowej. Chciałam wykorzystać w tym celu bibliotekę PHPMailer, jednak próbowałam już konfigurować ją na wiele sposobów i niestety nadal bez powodzenia ;< Mam pobraną najnowszą wersję PHPMailer, skonfigurowaną według przykładu na githubie, a mimo to mail nie zostaje wysłany. Dodam jeszcze ze korzystam z Xamppa. Poniżej podaję kod html zakładki kontakt (plik contact.php) wraz z formularzem oraz zawartość pliku mail.php, w którym znajduje się konfiguracja PHPMailer'a. Jeżeli ktoś z Was wie w czym jest problem, albo chociaż ma jakiś pomysł na rozwiązanie to będę baaaardzo wdzięczna z pomoc :)

<script>
	  document.getElementById("scrollTop").scrollIntoView();	
</script>
<?php
require_once "mail.php";
?>
<div id="scrollTop"></div>
<div id="contactContainer">
   <h2>Contact Us</h2>
   <h4>E-mail:</h4>
   <p>[email protected]</p>
   <div id="wiadomosci">		
	<div id="formularz">
		<form method="post">
		   <div class="email_box">
		      <h3>Enter the e-mail address:</h3>
		      <input type="text" required name="email" id="email">
		  </div>
		  <div class="text_email">
			<h3>Enter message:</h3>		
			<textarea required name="message" id="message" rows="7" cols="50"></textarea>
		  </div>
		  <div class="actions">
			<input type="submit" value="Send" id="emailSubmitButton" />
			<input type="reset" value="Clear" id="clearButton" />
		  </div>
			<p id="response"></p>
		</form>		
	     </div>		
      </div>
</div>

<?php

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';

if (isset($_POST['submit'])) {
$email = $_POST['email'];
$message = $_POST['message'];
	
$mail = new PHPMailer(true);
try {
$mail->isSMTP();
$mail->SMTPDebug = 2;
$mail->Host = 'smtp.gmail.com'; 
$mail->Port = 587; 
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true; 
$mail->Username = '[email protected]';
$mail->Password = 'password'; 

$mail->setFrom('[email protected]', 'Mail'); 
$mail->addAddress('[email protected]'); 

$mail->Subject = 'PHPMailer GMail SMTP test';

$mail->IsHTML(true); 
$mail->Body = $message;
$mail->AltBody = 'This is a plain-text message body';

$mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}
}  
?>
2

Dostajesz jakieś błędy? Masz tam w kodzie try, ale nie masz catch i pewnie tam Ci jakimś wyjątkiem rzuca, a Ty go nie obsługujesz.

0

A gdzie można sprawdzić listę błędów? Bo na stronie nic mi nie wyświetla, a po kliknięciu przycisku Submit ładuje się po prostu strona startowa. Sorki, ale jeżeli chodzi o php to jestem jeszcze mocno początkująca w tym temacie, wiec będę wdzięczna za każda radę :(

2

Ok, moja wina, widzę że Twoj kod zawiera poprawny try/catch - w części catch - daj na końcu exit, to wtedy strona nie powinna Ci się przeładować. Formatuj kod tak by miał poprawne wcięcia - brak formatowania spowodował, że właśnie tego catcha pominąłem wzrokowo.

Mam jeszcze dwie porady:

  1. Użyj debuggera (trudniejsza, ale fajniejsza i przydatniejsza później opcja)
  2. Postaw sobie np echo 'dupa'; exit; albo die('dupa') np w połowie kodu - i badaj czy Ci się zatrzymuje skrypt czy nie, jka nie to stawiaj tą linijke wcześniej itd itd. Wtedy będzie wiedziała, do którego momentu wykonuje Ci się skrypt i zobaczysz że może nie masz jakiejś zmiennej ustawionej.. albo np $_POST['submit'] jest pusty
0

Dzięki :) podmieniłam już zawartość catch tylko zastanawiam się gdzie te błędy powinno wyświetlać? :D Bo po kliknięciu w submit znika tekst wprowadzony w pole z adresem email oraz z jego treścią i w zasadzie nic więcej się nie dzieje ;x A i takie dodatkowe pytanko mam: jeśli chciałabym teraz dodać adres email z pola input w pliku contact.php to w konfiguracji powinnam wpisac: $mail->setFrom($email); czy jakaś inna składnia?

Kod mail.php na obecną chwilę wygląda tak:


<?php
 
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
 
require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
 
if (isset($_POST['submit'])) {
$email = $_POST['email'];
$message = $_POST['message'];
 
$mail = new PHPMailer(true);
try {
$mail->isSMTP();
$mail->SMTPDebug = 2;
$mail->Host = 'smtp.gmail.com'; 
$mail->Port = 587; 
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true; 
$mail->Username = '[email protected]';
$mail->Password = 'password'; 
 
$mail->setFrom('[email protected]', 'Mail'); 
$mail->addAddress('[email protected]'); 
 
$mail->Subject = 'PHPMailer GMail SMTP test';
 
$mail->IsHTML(true); 
$mail->Body = $message;
$mail->AltBody = 'This is a plain-text message body';
 
$mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo $e->getMessage();
  exit;
}
}  
?>

Edit. Wlaśnie zauważyłam, że dodałeś powyżej troszkę nowych porad, wiec zaraz je wypróbuje :)

1

Dzięki metodzie z wyświetlaniem po każdym fragmencie kodu zauważyłam, że problem jest już na samym początku w miejscu warunku If, który nie jest spełniony, czyli wychodzi na to ze jest jakiś problem z submitem ;c a ja caly czas meczylam sie z konfiguracja PHPMailera, bo myslalam ze tam cos nie tak ustawilam, a on nawet nie przechodził do tej czesci kodu :P eh

1

Zaproponowany przez @axelbest sposób nosi fachową nazwę "dupa debugging", jest bardzo prosty we wdrożeniu i jak widać z Twojego postu - wysoce skuteczny :)

0
cerrato napisał(a):

Zaproponowany przez @axelbest sposób nosi fachową nazwę "dupa debugging", jest bardzo prosty we wdrożeniu i jak widać z Twojego postu - wysoce skuteczny :)

Haha potwierdzam w 100% :D Czasami najprostsze metody są jednak najbardziej skuteczne ;d

0

Yay, naprawiłam submita i w końcu poprawnie wszystko wysłalo !! <3 Bardzo dziękuję za pomoc ! :)

Jest jeszcze tylko jeden problem.. mianowicie nad formularzem wyświetliło mi coś takiego:

2018-12-13 14:11:28 SERVER -> CLIENT: 220 smtp.gmail.com ESMTP d15-v6sm332674lja.38 - gsmtp
2018-12-13 14:11:28 CLIENT -> SERVER: EHLO localhost
2018-12-13 14:11:28 SERVER -> CLIENT: 250-smtp.gmail.com at your service, [89.68.26.207]250-SIZE 35882577250-8BITMIME250-STARTTLS250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8
2018-12-13 14:11:28 CLIENT -> SERVER: STARTTLS
2018-12-13 14:11:28 SERVER -> CLIENT: 220 2.0.0 Ready to start TLS
2018-12-13 14:11:29 CLIENT -> SERVER: EHLO localhost
2018-12-13 14:11:29 SERVER -> CLIENT: 250-smtp.gmail.com at your service, [89.68.26.207]250-SIZE 35882577250-8BITMIME250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8
2018-12-13 14:11:29 CLIENT -> SERVER: AUTH LOGIN
2018-12-13 14:11:29 SERVER -> CLIENT: 334 VXNlcm5hbWU6
2018-12-13 14:11:29 CLIENT -> SERVER: <credentials hidden>
2018-12-13 14:11:29 SERVER -> CLIENT: 334 UGFzc3dvcmQ6
2018-12-13 14:11:29 CLIENT -> SERVER: <credentials hidden>
2018-12-13 14:11:29 SERVER -> CLIENT: 235 2.7.0 Accepted

Wiecie może jak się tego pozbyć? To tylko fragment tego co się pojawiło xd

0

Taka prośba - zamiast pisać "naprawiłam submita" lepiej wklej poprawiony kod oraz informację, co było złe. W ten sposób może pomożesz komuś innemu, kto będzie w przyszłości przeglądać ten wątek.

0
cerrato napisał(a):

Taka prośba - zamiast pisać "naprawiłam submita" lepiej wklej poprawiony kod oraz informację, co było złe. W ten sposób może pomożesz komuś innemu, kto będzie w przyszłości przeglądać ten wątek.'

Ok :) Tylko w sumie to drobnostka była bo okazało się, że w inpucie nie miałam podanego atrybutu "name" :P

0

$mail->SMTPDebug = 2; zainteresuje się tym co robi ta linijka, a także tym co robi true w konstruktorze od phpmailera

1 użytkowników online, w tym zalogowanych: 0, gości: 1