usiłuję wysłać plik załączony do formularza.
Przychodzi do mnie cała treść formularza, poza załącznikiem.
Oto kod:
<?php use PHPMailer\PHPMailer\PHPMailer; // importowanie klasy PHPMailer do globalnej przestrzeni nazw use PHPMailer\PHPMailer\SMTP; // importowanie klasy PHPMailer do globalnej przestrzeni nazw use PHPMailer\PHPMailer\Exception; // importowanie klasy PHPMailer do globalnej przestrzeni nazw require ('PHPMailer/src/Exception.php'); // dodanie klasy Exception require ('PHPMailer/src/PHPMailer.php'); // dodanie klasy PHPMailer require ('PHPMailer/src/SMTP.php'); // dodanie klasy SMTP $klient = $_POST['klient']; $imie = $_POST['imie']; $firma = $_POST['firma']; $email = $_POST['email']; $telefon = $_POST['telefon']; $temat = $_POST['temat']; $tresc = $_POST['tresc']; $priorytet = $_POST['priorytet']; $file = $_FILES['file']['name']; $file_tmp = $_FILES['file']['tmp_name']; date_default_timezone_set('Europe/Warsaw'); $mail = new PHPMailer(true); // utworzenie nowej klasy PHPMailer, parametr 'true' włącza wyjątki $mail->isSMTP(); // używamy SMTP $mail->Host = 'smtp.dpoczta.pl'; // adres serwera SMTP $mail->SMTPAuth = true; //włączenie autoryzacji do serwera SMTP $mail->Username = "automat@moja-domena.pl"; //nazwa użytkownika do skrzynki e-mail $mail->Password = "XXXXX"; //hasło użytkownika do skrzynki e-mail $mail->SMTPSecure = 'tls'; // typ szyfrowania (TLS/SSL) $mail->Port = 587; // port serwera SMTP zależny od konfiguracji dostawcy usługi poczty $mail->CharSet = "UTF-8"; $mail->setLanguage('pl', '/phpmailer/language'); $mail->setFrom('automat@moja-domena.pl', 'moja-domena.pl'); $mail->addAddress('mail@moja-domena.pl', 'Biuro'); //adres skrzynki e-mail oraz nazwa adresata, do którego trafi wiadomość $mail->addReplyTo($email, $imie); //adres e-mail nadawcy oraz jego nazwa w polu "Odpowiedz do" $mail->addAttachment($file_tmp, $file); } $mail->isHTML(true); // format: HTML $mail->FromName = "Formularz ze strony WT"; //imię i nazwisko lub nazwa użyta do wysyłania wiadomości $mail->From = "automat@moja-domena.pl"; //adres e-mail użyty do wysyłania wiadomości $mail->Subject = $temat; // temat wiadomości, można stosować zmienne i znaczniki HTML $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 $mail->AltBody = 'By wyświetlić wiadomość należy skorzystać z czytnika obsługującego wiadomości w formie HTML'; if(!$mail->Send()) //sprawdzenie wysłania, jeśli wiadomość została pomyślnie wysłana { 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 } else { 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 } ?>
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