Помогите сделать страницу для отправки на e-mail...

Статус
Закрыто для дальнейших ответов.

Ancho

New Member
Регистрация
23.03.2008
Сообщения
5
Мне нужно сделать страницу отправки e-mail сообщении со страницы сайта и еще чтобы тама была опция "Прикрепить файл".
Страницу отправки формы я уже создал, но у меня проблема: нужно сделать так чтобы посетитель сайта не настроивший свой почтовый клиент тоже мог отправлять сообщения. По-моему нужен скрипт для проверки полей формы и отправки сообщении. Как это реализовать? Помогите!
 

RoamingFire

Well-Known Member
Регистрация
04.01.2008
Сообщения
145
Ну можно найти скрипт отправки формы на email. Можно самому написать с помощью PHP или какого-либо другова серверного языка...
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Если надо на PHP, могу выложить скрипт! Только собирать и разбираться самому придётся... Там и файлы можно прикреплять :tongue:
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Вот скрипт, должен работать :biggrin:

handler.php
Код:
<?php
  if(empty($_POST['mail_to'])) exit("Введите адрес получателя"); 
  // проверяем правильность заполнения с помощью регулярного выражения 
  $pattern = "/^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$/i";
  if (!preg_match($pattern, $_POST['mail_to']))
  {
   exit("Введите адрес в виде somebody@server.com"); 
  }
  $_POST['mail_to'] = htmlspecialchars(stripslashes($_POST['mail_to'])); 
  $_POST['mail_subject'] =
				  htmlspecialchars(stripslashes($_POST['mail_subject'])); 
  $_POST['mail_msg'] = 
					  htmlspecialchars(stripslashes($_POST['mail_msg'])); 
  $picture = ""; 
  // Если поле выбора вложения не пустое - закачиваем его на сервер 
  if (!empty($_FILES['mail_file']['tmp_name'])) 
  { 
	// Закачиваем файл 
	$path = $_FILES['mail_file']['name']; 
	if (copy($_FILES['mail_file']['tmp_name'], $path)) $picture = $path; 
  } 
  $thm = $_POST['mail_subject'];
  $msg = $_POST['mail_msg'];
  $mail_to = $_POST['mail_to'];
  // Отправляем почтовое сообщение 
  if(empty($picture)) mail($mail_to, $thm, $msg); 
  else send_mail($mail_to, $thm, $msg, $picture); 
  // Вспомогательная функция для отправки почтового сообщения с вложением 
  function send_mail($to, $thm, $html, $path) 
  { 
	$fp = fopen($path,"r"); 
	if (!$fp) 
	{ 
	  print "Файл $path не может быть прочитан"; 
	  exit(); 
	} 
	$file = fread($fp, filesize($path)); 
	fclose($fp); 
	
	$boundary = "--".md5(uniqid(time())); // генерируем разделитель 
	$headers .= "MIME-Version: 1.0\n"; 
	$headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n"; 
	$multipart .= "--$boundary\n"; 
	$kod = 'koi8-r'; // или $kod = 'windows-1251'; 
	$multipart .= "Content-Type: text/html; charset=$kod\n"; 
	$multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n"; 
	$multipart .= "$html\n\n"; 

	$message_part = "--$boundary\n"; 
	$message_part .= "Content-Type: application/octet-stream\n"; 
	$message_part .= "Content-Transfer-Encoding: base64\n"; 
	$message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n\n"; 
	$message_part .= chunk_split(base64_encode($file))."\n"; 
	$multipart .= $message_part."--$boundary--\n"; 

	if(!mail($to, $thm, $multipart, $headers)) 
	{ 
	  exit("К сожалению, письмо не отправлено"); 
	} 
  } 
  // Автоматический переход на главную страницу форума
  echo "<HTML><HEAD>
	<META HTTP-EQUIV='Refresh' CONTENT='0; URL=".$_SERVER['PHP_SELF']."'>
		</HEAD></HTML>";
?>
index.php
Код:
<?php 
if(!empty($_POST))
{
  // Обработчик HTML-формы
  include "handler.php";
}
?>
<table> 
<form enctype='multipart/form-data' method=post> 
<tr>
  <td width=50%>To:</td>
  <td align=right><input type=text name=mail_to maxlength=32></td>
</tr> 
<tr>
  <td width=50%>Subject:</td>
  <td align=right><input type=text name=mail_subject maxlength=64></td>
</tr> 
<tr>
  <td colspan=2>
	Сообщение:<br><textarea cols=50 rows=8 name=mail_msg></textarea>
  </td>
</tr>
<tr>
  <td width=50%>Photo:</td>
  <td align=right><input type=file name=mail_file maxlength=64></td>
</tr> 
<tr><td colspan=2><input type=submit value='Отправить'></td></tr> 
</form> 
</table>
 

Ancho

New Member
Регистрация
23.03.2008
Сообщения
5
Вот скрипт, должен работать :biggrin:

handler.php
Код:
<?php
  if(empty($_POST['mail_to'])) exit("Введите адрес получателя"); 
  // проверяем правильность заполнения с помощью регулярного выражения 
  $pattern = "/^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$/i";
  if (!preg_match($pattern, $_POST['mail_to']))
  {
   exit("Введите адрес в виде somebody@server.com"); 
  }
  $_POST['mail_to'] = htmlspecialchars(stripslashes($_POST['mail_to'])); 
  $_POST['mail_subject'] =
				  htmlspecialchars(stripslashes($_POST['mail_subject'])); 
  $_POST['mail_msg'] = 
					  htmlspecialchars(stripslashes($_POST['mail_msg'])); 
  $picture = ""; 
  // Если поле выбора вложения не пустое - закачиваем его на сервер 
  if (!empty($_FILES['mail_file']['tmp_name'])) 
  { 
	// Закачиваем файл 
	$path = $_FILES['mail_file']['name']; 
	if (copy($_FILES['mail_file']['tmp_name'], $path)) $picture = $path; 
  } 
  $thm = $_POST['mail_subject'];
  $msg = $_POST['mail_msg'];
  $mail_to = $_POST['mail_to'];
  // Отправляем почтовое сообщение 
  if(empty($picture)) mail($mail_to, $thm, $msg); 
  else send_mail($mail_to, $thm, $msg, $picture); 
  // Вспомогательная функция для отправки почтового сообщения с вложением 
  function send_mail($to, $thm, $html, $path) 
  { 
	$fp = fopen($path,"r"); 
	if (!$fp) 
	{ 
	  print "Файл $path не может быть прочитан"; 
	  exit(); 
	} 
	$file = fread($fp, filesize($path)); 
	fclose($fp); 
	
	$boundary = "--".md5(uniqid(time())); // генерируем разделитель 
	$headers .= "MIME-Version: 1.0\n"; 
	$headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n"; 
	$multipart .= "--$boundary\n"; 
	$kod = 'koi8-r'; // или $kod = 'windows-1251'; 
	$multipart .= "Content-Type: text/html; charset=$kod\n"; 
	$multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n"; 
	$multipart .= "$html\n\n"; 

	$message_part = "--$boundary\n"; 
	$message_part .= "Content-Type: application/octet-stream\n"; 
	$message_part .= "Content-Transfer-Encoding: base64\n"; 
	$message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n\n"; 
	$message_part .= chunk_split(base64_encode($file))."\n"; 
	$multipart .= $message_part."--$boundary--\n"; 

	if(!mail($to, $thm, $multipart, $headers)) 
	{ 
	  exit("К сожалению, письмо не отправлено"); 
	} 
  } 
  // Автоматический переход на главную страницу форума
  echo "<HTML><HEAD>
	<META HTTP-EQUIV='Refresh' CONTENT='0; URL=".$_SERVER['PHP_SELF']."'>
		</HEAD></HTML>";
?>
index.php
Код:
<?php 
if(!empty($_POST))
{
  // Обработчик HTML-формы
  include "handler.php";
}
?>
<table> 
<form enctype='multipart/form-data' method=post> 
<tr>
  <td width=50%>To:</td>
  <td align=right><input type=text name=mail_to maxlength=32></td>
</tr> 
<tr>
  <td width=50%>Subject:</td>
  <td align=right><input type=text name=mail_subject maxlength=64></td>
</tr> 
<tr>
  <td colspan=2>
	Сообщение:<br><textarea cols=50 rows=8 name=mail_msg></textarea>
  </td>
</tr>
<tr>
  <td width=50%>Photo:</td>
  <td align=right><input type=file name=mail_file maxlength=64></td>
</tr> 
<tr><td colspan=2><input type=submit value='Отправить'></td></tr> 
</form> 
</table>
Спасибо! Вы мне очень помогли!
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Пожайлуста, обращайтесь! Ах да... Забыл написать.
Материал взял из книги "Головоломки на PHP для хакера"
Дабы не нарушать авторские права
 
Статус
Закрыто для дальнейших ответов.
Верх Низ