Jump to content
  • 0

Отправка файлов на E-Mail через контактную форму на сайте


px379
 Share

Question

Здравствуйте.

Есть форма обратной связи. В нее надо добавить возможность, что бы посетитель мог выбрать файл со своего компьютера и отправить его на почту вместе с остальными данными.

В PHP почти не разбираюсь. Методом тыка при помощи гугла пробовал что-то химичить, но все бестолку.

 

HTML

<form method="post" action="contact3.php" id="contactformm">	<p align="center" style="font-size: 25px; font-weight: bold; font-family: Tahoma;">Заказать расчет</p>		<div><br />			<input style="position:relative; width:96%;" type="text" size="40" name="contactname" id="contactname" value="" class="required" placeholder="Ваше имя" /><br /><br />		</div>		<div>			<input style="position:relative; width:96%;" type="text" size="40" name="email" id="email" value="" class="required email" placeholder="Ваш E-mail" /><br /><br />		</div>		<div>			<input style="position:relative; width:96%;" type="text" size="40" name="phone" id="phone" value="" class="required" placeholder="Номер телефона" /><br /><br />		</div>			<div>			<textarea style="position:relative; width:96%;" rows="15" cols="73" name="message" id="message" class="required" placeholder="Ваши данные"></textarea><br /><br />		</div>	    <center><input type="submit" value="ОТПРАВИТЬ" name="submit" class="zakhead" /></center>	</form>

PHP

<?php //Если форма отправлена if(isset($_POST['submit'])) {     //Проверка Поля ИМЯ     if(trim($_POST['contactname']) == '') {         $hasError = true;     } else {         $name = trim($_POST['contactname']);     }     //Проверка поля ТЕЛЕФОН     if(trim($_POST[phone']) == '') {         $hasError = true;     } else {         $phone = trim($_POST['phone']);     }     //Проверка правильности ввода EMAIL     if(trim($_POST['email']) == '')  {         $hasError = true;     } else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) {         $hasError = true;     } else {         $email = trim($_POST['email']);     }     //Проверка наличия ТЕКСТА сообщения     if(trim($_POST['message']) == '') {         $hasError = true;     } else {         if(function_exists('stripslashes')) {             $comments = stripslashes(trim($_POST['message']));         } else {             $comments = trim($_POST['message']);         }     }     //Если ошибок нет, отправить email     if(!isset($hasError)) {         $emailTo = 'ranran2006@yandex.ua'; //Сюда введите Ваш email         $body = "Заказ на подсчет \n\n Имя: $name \n\nE-mail: $email \n\nТелефон: $phone \n\nДанные заказчика:\n $comments";         $headers = 'From: HYBRID - Заказ на подсчет <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;         mail($emailTo, $subject, $body, $headers);         $emailSent = true;     } } ?>
Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0

Лучше отправляйте письма с помощью библиотеки phpMailer

 

Вот тут есть пример отправки почты с прикрепленным файлом через данную библиотеку http://www.php-mail.ru/?id=4

  • Like 1
Link to comment
Share on other sites

  • 0

Лучше отправляйте письма с помощью библиотеки phpMailer

 

Вот тут есть пример отправки почты с прикрепленным файлом через данную библиотеку http://www.php-mail.ru/?id=4

Спасибо, попробую.

 

Видишь код зеленым весь стал - там пошла ошибка в кавычке  f(trim($_POST[phone]) == '')

 

 

То я наверное когда пробовал что-то делать, вот и накосячил. Но я в любом случае вернул все как было раньше, эта форма работает уже почти месяц.

Link to comment
Share on other sites

  • 0

Лучше отправляйте письма с помощью библиотеки phpMailer

 

Вот тут есть пример отправки почты с прикрепленным файлом через данную библиотеку http://www.php-mail.ru/?id=4

Что-то с подключением не очень получается. Мне надо подключить скрипт к HTML-ной странице. Пытаюсь делать так:

Скачиваю class.phpmailer.zip, распаковываю содержимое архива в корень сайта. Дальше создаю файл form-data.php с таким содержанием:

PHP

<?php function show_form() { ?> <? } function complete_mail() {         // $_POST['title'] содержит данные из поля "Тема", trim() - убираем все лишние пробелы и переносы строк, htmlspecialchars() - преобразует специальные символы в HTML сущности, будем считать для того, чтобы простейшие попытки взломать наш сайт обломались, ну и  substr($_POST['title'], 0, 1000) - урезаем текст до 1000 символов. Для переменных $_POST['mess'], $_POST['name'], $_POST['tel'], $_POST['email'] все аналогично         $_POST['title'] =  substr(htmlspecialchars(trim($_POST['title'])), 0, 1000);         $_POST['mess'] =  substr(htmlspecialchars(trim($_POST['mess'])), 0, 1000000);         $_POST['name'] =  substr(htmlspecialchars(trim($_POST['name'])), 0, 30);         $_POST['tel'] =  substr(htmlspecialchars(trim($_POST['tel'])), 0, 30);         $_POST['email'] =  substr(htmlspecialchars(trim($_POST['email'])), 0, 50);         // если не заполнено поле "Имя" - показываем ошибку 0         if (empty($_POST['name']))              output_err(0);         // если неправильно заполнено поле email - показываем ошибку 1         if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $_POST['email']))              output_err(1);         // если не заполнено поле "Сообщение" - показываем ошибку 2         if(empty($_POST['mess']))              output_err(2);         // обратите внимание, теперь мы можем писать красивые письма, с помощью html тегов ;-)         $mess = ' <b>Имя отправителя:</b>'.$_POST['name'].'<br /> <b>Контактный телефон:</b>'.$_POST['tel'].'<br /> <b>Контактный email:</b>'.$_POST['email'].'<br /> '.$_POST['mess'];         // подключаем файл класса для отправки почты         require 'class.phpmailer.php';         $mail = new PHPMailer();         $mail->From = 'test@test.ru';      // от кого         $mail->FromName = 'www.php-mail.ru';   // от кого         $mail->AddAddress('to@yandex.ru', 'Имя'); // кому - адрес, Имя         $mail->IsHTML(true);        // выставляем формат письма HTML         $mail->Subject = $_POST['title'];  // тема письма         // если был файл, то прикрепляем его к письму         if(isset($_FILES['attachfile'])) {                  if($_FILES['attachfile']['error'] == 0){                     $mail->AddAttachment($_FILES['attachfile']['tmp_name'], $_FILES['attachfile']['name']);                  }         }         // если было изображение, то прикрепляем его в виде картинки к телу письма.         if(isset($_FILES['attachimage'])) {                  if($_FILES['attachimage']['error'] == 0){                     if (!$mail->AddEmbeddedImage($_FILES['attachimage']['tmp_name'], 'my-attach', 'image.gif', 'base64', $_FILES['attachimage']['type']))                          die ($mail->ErrorInfo);                     $mess .= 'А вот и наша картинка:<br /><img src="cid:my-attach" border=0><br />я показал как ее прикреплять, соответственно Вам осталось вставить ее в нужное место Вашего письма ;-) ';                  }         }         $mail->Body = $mess;         // отправляем наше письмо         if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);         echo 'Спасибо! Ваше письмо отправлено.'; } function output_err($num) {     $err[0] = 'ОШИБКА! Не введено имя.';     $err[1] = 'ОШИБКА! Неверно введен e-mail.';     $err[2] = 'ОШИБКА! Не введено сообщение.';     echo '<p>'.$err[$num].'</p>';     show_form();     exit(); } if (!empty($_POST['submit'])) complete_mail(); else show_form(); ?> 

В HTML пишу это

<form action="" method=post enctype="multipart/form-data"> <div align="center">               <br />Имя*<br />               <input type="text" name="name" size="40">               <br />Контактный телефон<br />               <input type="text" name="tel" size="40">               <br />Контактный email*<br />               <input type="text" name="email" size="40">               <br />Teма<br />               <input type="text" name="title" size="40">               <br />Сообщение*<br />               <textarea rows="10" name="mess" cols="30"></textarea>               <br />Файл<br />               <input name="attachfile" type="file" size="28">               <br />Изображение<br />               <input name="attachimage" type="file" size="28">               <br /><br /><input type="submit" value="Отправить" name="submit"> </div> </form> 

В результате, страница обновляется, а письмо вообще не приходит.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy