Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wysyłanie załączników do formularza
Forum PHP.pl > Forum > PHP
kecajs
Cześć,
usiłuję wysłać plik załączony do formularza.
Przychodzi do mnie cała treść formularza, poza załącznikiem.

Oto kod:
  1. <?php
  2.  
  3. header('Content-type: text/html; charset=utf-8');
  4.  
  5. use PHPMailer\PHPMailer\PHPMailer; // importowanie klasy PHPMailer do globalnej przestrzeni nazw
  6. use PHPMailer\PHPMailer\SMTP; // importowanie klasy PHPMailer do globalnej przestrzeni nazw
  7. use PHPMailer\PHPMailer\Exception; // importowanie klasy PHPMailer do globalnej przestrzeni nazw
  8.  
  9. require ('PHPMailer/src/Exception.php'); // dodanie klasy Exception
  10. require ('PHPMailer/src/PHPMailer.php'); // dodanie klasy PHPMailer
  11. require ('PHPMailer/src/SMTP.php'); // dodanie klasy SMTP
  12.  
  13. $klient = $_POST['klient'];
  14.  
  15. $imie = $_POST['imie'];
  16. $firma = $_POST['firma'];
  17. $email = $_POST['email'];
  18. $telefon = $_POST['telefon'];
  19.  
  20. $temat = $_POST['temat'];
  21. $tresc = $_POST['tresc'];
  22. $priorytet = $_POST['priorytet'];
  23.  
  24. $file = $_FILES['file']['name'];
  25. $file_tmp = $_FILES['file']['tmp_name'];
  26.  
  27. date_default_timezone_set('Europe/Warsaw');
  28.  
  29. $mail = new PHPMailer(true); // utworzenie nowej klasy PHPMailer, parametr 'true' włącza wyjątki
  30.  
  31. $mail->isSMTP(); // używamy SMTP
  32. $mail->Host = 'smtp.dpoczta.pl'; // adres serwera SMTP
  33. $mail->SMTPAuth = true; //włączenie autoryzacji do serwera SMTP
  34. $mail->Username = "automat@moja-domena.pl"; //nazwa użytkownika do skrzynki e-mail
  35. $mail->Password = "XXXXX"; //hasło użytkownika do skrzynki e-mail
  36. $mail->SMTPSecure = 'tls'; // typ szyfrowania (TLS/SSL)
  37. $mail->Port = 587; // port serwera SMTP zależny od konfiguracji dostawcy usługi poczty
  38.  
  39. $mail->CharSet = "UTF-8";
  40. $mail->setLanguage('pl', '/phpmailer/language');
  41.  
  42. $mail->setFrom('automat@moja-domena.pl', 'moja-domena.pl');
  43. $mail->addAddress('mail@moja-domena.pl', 'Biuro'); //adres skrzynki e-mail oraz nazwa adresata, do którego trafi wiadomość
  44. $mail->addReplyTo($email, $imie); //adres e-mail nadawcy oraz jego nazwa w polu "Odpowiedz do"
  45.  
  46. if (is_uploaded_file($file_tmp)) {
  47. $mail->addAttachment($file_tmp, $file);
  48. }
  49.  
  50. $mail->isHTML(true); // format: HTML
  51. $mail->FromName = "Formularz ze strony WT"; //imię i nazwisko lub nazwa użyta do wysyłania wiadomości
  52. $mail->From = "automat@moja-domena.pl"; //adres e-mail użyty do wysyłania wiadomości
  53. $mail->Subject = $temat; // temat wiadomości, można stosować zmienne i znaczniki HTML
  54. $mail->Body = "Nasz klient: ".$klient."<br />Mail zwrotny: ".$email."<br />Imię: ".$imie."<br />Firma: ".$firma."<br />Telefon: ".$telefon."<br />Wiadomość: ".$tresc."<br />Priorytet: ".$priorytet."<br />Załącznik: ".$file_tmp." ".$file; // treść wiadomości, można stosować zmienne i znaczniki HTML
  55.  
  56. $mail->AltBody = 'By wyświetlić wiadomość należy skorzystać z czytnika obsługującego wiadomości w formie HTML';
  57.  
  58. if(!$mail->Send()) //sprawdzenie wysłania, jeśli wiadomość została pomyślnie wysłana
  59. {
  60. echo "Dziękujemy za kontakt z nami. Twoja wiadomość została wysłana prawidłowo. Odpowiemy najszybciej jak będziemy mogli. Najczęściej odpowiadamy w ciągu 2 godzin."; //wyświetl ten komunikat
  61. }
  62. else
  63. {
  64. echo "Niestety, jest jakiś problem z wysłaniem Twojej wiadomości. Spróbuj za chwilę lub zadzwoń do nas. Błąd wysyłania e-maila: " . $mail->ErrorInfo; //wyświetl następujący
  65. }
  66. ?>


Trzeci dzień przekopuję się przez różne strony mówiące o PHPMailer, ale nie znalazłem w nich nic innego nadto, co jest w moim kodzie.
Mam nadzieję, że nie przesadzilem z ilością linii kodu i nie powsadzałem zbędnych dubli.

A jak najlepiej (najpewniej, najbezpieczniej, najprościej) zwalidować poprawność wpisanego maila i spełnieni wymogu wypełnienia pól obowiązkowych ($imie, $klient, $mail, $tresc)?
Dzięki
nospor
A sprawdzales w ogole czy ci ten plik sie uploaduje prawidlowo?
kecajs
A jak mam to sprawdzić? Po wybraniu pliku z dysku pojawia się nazwa tego pliku obok przycisku Wybierz plik.
nospor
Ja sie pytam o to czy sie wyslalo a nie czy sie pobralo z dysku. To dwie rozne rzeczy.

print_r($_FILES);
to ci pokaze czy sie wyslalo czy nie
kecajs
Jeśli załącznik nie dochodzi wraz z wiadomością, to zakładam, że nie został wysłany, nieprawdaż? Jednakże z chęcią sprawdzę. Możesz mi powiedzieć, w które miejsce w kodzie mam wstawić podaną przez Ciebie komendę?

OK, działa.
Temat do zamknięcia.

Brakowało w formularzu czegoś takiego: enctype="multipart/form-data".
Cały kod pliku kontakt.php wygląda tak:
  1. <form action="mail.php" enctype="multipart/form-data" method="POST">
  2.  
  3. <p>Imię<span style="color:red;">*</span>: <input type="text" name="imie"></p><br />
  4. <p>Firma: <input type="text" name="firma"></p><br />
  5. <p>E-mail<span style="color:red;">*</span>: <input type="text" name="email"></p><br />
  6. <p>Telefon: <input type="text" name="telefon"></p><br />
  7.  
  8. <p>Jestem klientem<span style="color:red;">*</span>:</p>
  9. <p>Tak: <input type="checkbox" value="tak" name="klient"></p>
  10. <p>Nie: <input type="checkbox" value="nie" name="klient"></p><br />
  11.  
  12. <p>Priorytet</p>
  13. <select name="priorytet" size="1">
  14. <option value="">- wybierz priorytet -</option>
  15. <option value="niski">Niski</option>
  16. <option value="normalny">Normalny</option>
  17. <option value="wysoki">Wysoki</option>
  18. <option value="pilny">Pilny</option>
  19. </select>
  20. <br /><br />
  21.  
  22. <p>Temat</p>
  23. <select name="temat" size="1">
  24. <option value="">- wybierz temat -</option>
  25. <option value="temat01">Temat01</option>
  26. <option value="temat02">Temat02</option>
  27. <option value="temat03">Temat03</option>
  28. <option value="temat04">Temat04</option>
  29. </select>
  30. <br /><br />
  31.  
  32. <p>Wiadomość<span style="color:red;">*</span>: </p><textarea name="tresc" rows="6" cols="25"></textarea><br />
  33.  
  34. <p>Dodaj plik:</p><input type="file" name="file"></p><br />
  35.  
  36. <input type="submit" name="wyslij" value="Wyślij"><input type="reset" name="reset" value="Wyczyść">
  37. </form>

Temat do zamknięcia.
nospor
No prosze, proste print_r znowu rozwiazalo problem
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.