1. Po kliknięciu wyślij ma być wysłany do mnie mail.
2. Schemat tematu wiadomości np. Problem/$counter/$date gdzie $counter to będzie zmienna zwiększana po każdym wysłaniu maila.
3. Dodawanie załącznika/pliku graficznego do formularza i wysyłanie go.
4. Walidacja żeby użytkownicy głupot nie wpisywali.
5. Zapisywanie do bazy danych wysłanych mailem informacji. //tego jeszcze nie ma, będzie jak się uporam z tym co jest
6. Rozmiar załączanego pliku ma być nie większy niż 2MB.
7. W celach ćwiczeniowych wszystko w php.
Na obecną chwilę po kliknięciu "Wyślij" żaden mail się nie wysyła. Od razu zaznaczę, że $headers ustawione na bazie przykładów znalezionych w sieci, więc mogą tam być błędy. Niestety $headers są wymagane do wysyłki maila z załącznikiem.
Bardzo proszę o wskazówki/pomoc.
<!DOCTYPE html> <html> <head> <title>HelpDesk - wyślij problem</title> <style> .error { color: #FF0000; } .mailmsg { color: #00ddff; } </style> </head> <body> <?php //serwer //$server = "localhost"; //admin //$admin = "root"; //hasło //$pass = "ZAQ!2wsx"; //nazwa bazy //$base = "test"; //$dbconnection = mysqli_connect($server, $admin, $pass, $base) or die ("Brak połączenia z serwerem"); $nameErr = $surnameErr = $companyErr = $emailErr = $commentErr = $upload_fileErr = ""; $name = $surname = $company = $email = $comment = $upload_file = $mailMsg = $headers = $body = $content = ""; $counter = 0; if ($_SERVER["REQUEST_METHOD"] == "POST"){ /* można by było sprawdzać w jednym ifie czy pola są ustawione i jeśli nie * to zwracać jedno info, że nie są ustawione i wtedy dodać walidację w js * i by było lepiej bo nie po stronie serwera, czyli bez odświeżania strony */ $nameErr = "Należy podać imię."; } else { $name = prepare_data($_POST["name"]); #sprawdzanie czy imię zawiera tylko litery i ma od 3 - 20 znaków $nameErr = "Należy wpisywać litery. Imię o długości 3 - 20 znaków."; } } $surnameErr = "Należy podać nazwisko."; } else { $surname = prepare_data($_POST["surname"]); $surnameErr = "Należy wpisywać litery. Nazwisko o długości 3 - 20 znaków."; } } $companyErr = "Należy podać nazwę firmy."; } else { $company = prepare_data($_POST["company"]); $companyErr = "Należy wpisywać litery."; } } $emailErr = "Należy podać email kontaktowy."; } else { $email = prepare_data($_POST["email"]); if (!filter_var($email, FILTER_VALIDATE_EMAIL)){ $emailErr = "Należy podać poprawny email. Będzie użyty do kontaktu zwrotnego."; } } $commentErr = "Należy opisać problem."; } else { $comment = prepare_data($_POST["comment"]); } #$upload_file = $_POST["upload_file"]; $file = ($_FILES["upload_file"]["name"]); #plik został wysłany i do tego bez błędów if ($file && (!$_FILES["upload_file"]["error"])){ #pozwalamy na konkretne formaty if ($fileType != "jpg" && $fileType != "png" && $fileType != "jpeg"){ $upload_fileErr = "Dozwolone są tylko obrazki w formatach JPG, PNG, JPEG."; } #plik nie może być większy niż 2MB if ($file > (2048000)) { $upload_fileErr = "Plik jest większy niż 2MB."; } } //else { //$upload_fileErr = "Wystąpił problem z dołączeniem pliku: kod ".$_FILES["upload_file"]["error"]; //} $counter += 1; $toEmail = "some@email.com"; #mail gdzie ma lecieć wiadomość $subject = "Problem/$counter/date('Y/m/d h:i:sa')"; #format tematu -> Problem/kolejny_numer_inkrementowany_po_każdym_wysłaniu_formularza/data Y/M/D H:M:S #oddziela kolejne części maila $eol = "\r\n"; #main header $headers .= "From: $email" . $eol; $headers .= "MIME-version: 1.0" . $eol; $headers .= "Content-Type: multipart/mixed; boundary=\"" . $strSid . "\"" . $eol; $headers .= "Content-Transfer-Encoding: 7bit" . $eol; $headers .= "This is a MIME encoded message." . $eol; #treść $body .= "--" . $strSid . $eol; $body .= "Content-Type: text/plain; charset=utf-8" . $eol; $body .= "Content-Transfer-Encoding: 8bit" . $eol; $body .= $comment . $eol; #załącznik $body .= "--" . $strSid . $eol; $body .= "Content-Type: application/octet-stream; name=\"" . $file . "\"" . $eol; $body .= "Content-Transfer-Encoding: base64" . $eol; $body .= "Content-Disposition: attachement" .$eol; $body .= $content . $eol; $body .= "--" . $strSid . "--"; #wysyłka maila $mailMsg = "Mail został wysłany."; } else { $mailMsg = "Nie udało się wysłać maila."; } } #usuwanie niepotrzebnych znaków w razie jakby miały się pojawić function prepare_data($form_data) { #return $form_data; #ciekawe czy zwróci automatycznie dane czy trzeba je ręcznie zwracać } ?> <p><span class="error">* wymagane pola</span></p> <form action="helpdesk.php" method="post" enctype="multipart/form-data"> <label for="name">Imię:</label> <label for="surname">Nazwisko:</label> <label for="company">Firma:</label> <label for="email">Email:</label> <label for="comment">Problem:</label> <textarea name="comment" rows="5" cols="40"></textarea><span class="error">* <?php echo $commentErr; ?></span><br> <label for="upload_file">Wybierz plik do podesłania:</label><br> <input type="submit" name="submit" value="Wyślij"> </form> </body> </html>