Забыли пароль?
Запросите новый здесь.

Автор темы: yury
ID темы: 767
Информация:
Тема содержит 15 сообщения, была просмотрена 6829 раз.
Просмотр темы
PHP-Fusion Russia » Поддержка 7 версии » Моды
 Распечатать тему
Отправка почты с аттачем через форму юзеру
yury
Собственно нашел рабочую форму, которая отправляет письмо с прикрепленным файлом (аттачем)

Пробовал приделать ссылку к профилю каждого юзверя, чтобы кликнув по ссылке открывалось окошко с формой. в форме в свою очередь автоматом идет подстановка почты юзера (строка: $myemail="youremail@domain.ru";), которому шлем.

Все.

Остальное все работает) Т.е надо передать посредством ИД почту юзера как я понимаю.

сама форма вот:
Скачать исходники  Код
<?
error_reporting(7);
$websitename="Форма обратной связи с аттачем";
$allowtypes=array("zip", "rar", "txt", "doc", "jpg", "png", "gif","odt","xml");
$myemail="youremail@domain.ru";
$priority="3";
$allowattach="1";
$max_file_size="1024";
$max_file_total="2048";
$submitvalue="Отправить";
$resetvalue="Сброс";
$defaultsubject="Без темы";
$use_subject_drop=false;
$subjects=array("Часть 1","Часть 2","Часть 3");
$emails=array("dept_1@domain.com","dept_2@domain.com","dept_3@domain.com");
$thanksmessage="Спасибо! Ваше письмо было отправлено, мы ответим в ближайшее время.";

function get_ext($key)
{
   $key=strtolower(substr(strrchr($key, "."), 1));
   // Cause there the same right?
   $key=str_replace("jpeg","jpg",$key);
   return $key;
}
function phattach($file,$name)
{
   global $boundary;   
   $fp=@fopen($file,"r");
   $str=@fread($fp, filesize($file));
   $str=@chunk_split(base64_encode($str));
   $message="--".$boundary."\n";
   $message.="Content-Type: application/octet-stream; name=\"".$name."\"\n";
   $message.="Content-disposition: attachment; filename=\"".$name."\"\n";
   $message.="Content-Transfer-Encoding: base64\n";
   $message.="\n";
   $message.="$str\n";
   $message.="\n";
   return $message;
}
function clean($key)
{
   $key=str_replace("\r", "", $key);
   $key=str_replace("\n", "", $key);
   $find=array(
      "/bcc\:/i",
      "/Content\-Type\:/i",
      "/Mime\-Type\:/i",
      "/cc\:/i",
      "/to\:/i"
   );
  $key=preg_replace($find,"",$key);
  return $key;
}
$error="";
$types="";
$sent_mail=false;
$ext_count=count($allowtypes);
$i=0;
foreach($allowtypes AS $extension) {
   
   //Gets rid of the last comma
   
   If($i <= $ext_count-2) {
      $types .="*.".$extension.", ";
   } Else {
      $types .="*.".$extension;
   }
   $i++;
}
unset($i,$ext_count);

If($_POST['submit']==true) {
   extract($_POST, EXTR_SKIP);
   
      If(trim($yourname)=="") {
         $error.="Вы не ввели Ваше имя!<br />";
      }
      
      If(trim($youremail)=="") {
         $error.="Вы не ввели Ваш email!<br />";
      } Elseif(!eregi("^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}\$",$youremail)) {
         $error.="Неправильный адрес электронной почты<br />";
      }

      If(trim($emailsubject)=="") {
         $emailsubject=$defaultsubject;
      }

      If(trim($yourmessage)=="") {
         $error.="Вы не ввели Ваше сообщение!<br />";
      }
      
      If($allowattach > 0) {
         
         //Loopish
         
         For($i=0; $i <= $allowattach-1; $i++) {
            
            If($_FILES['attachment']['name'][$i]) {
               
               $ext=get_ext($_FILES['attachment']['name'][$i]);
               $size=$_FILES['attachment']['size'][$i];
               $max_bytes=$max_file_size*1024;
               
               //Check if the file type uploaded is a valid file type.
               
               If(!in_array($ext, $allowtypes)) {
                  
                  $error.= "Недопустимое расширение для вашего файла: ".$_FILES['attachment']['name'][$i].", only ".$types." are allowed.<br />";
                  
                  //Check the size of each file
                  
               } Elseif($size > $max_bytes) {
                  $error.= "Ваш файл: ".$_FILES['attachment']['name'][$i]." is to big. Max file size is ".$max_file_size."kb.<br />";
               }
               
            } // If Files
            
         } // For

         //Tally the size of all the files uploaded, check if it's over the ammount.
         
           $total_size=array_sum($_FILES['attachment']['size']);
           
         $max_file_total_bytes=$max_file_total*1024;
         
         If($total_size > $max_file_total_bytes) {
            $error.="Максимальный допустимый размер вашего файла ".$max_file_total."kb<br />";
         }
         
      } // If Allowattach

   If($error) {
   
      $display_message=$error;

   } Else {
      
      If($use_subject_drop AND is_array($subjects) AND is_array($emails)) {
         $subject_count=count($subjects);
         $email_count=count($emails);
         
         If($subject_count==$email_count) {         
            $myemail=$emails[$emailsubject];
            $emailsubject=$subjects[$emailsubject];         
         }      
      }      
      $boundary=md5(uniqid(time()));      
      $yourname=clean($yourname);
      $yourmessage=clean($yourmessage);
      $youremail=clean($youremail);

      $headers="From: ".$yourname." <".$youremail.">\n";
      $headers.="Reply-To: ".$yourname." <".$youremail.">\n";
      $headers.="MIME-Version: 1.0\n";
      $headers.="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\n";
      $headers.="X-Sender: ".$_SERVER['REMOTE_ADDR']."\n";
      $headers.="X-Mailer: PHP/".phpversion()."\n";
      $headers.="X-Priority: ".$priority."\n";
      $headers.="Return-Path: <".$youremail.">\n";
      $headers.="This is a multi-part message in MIME format.\n";

      //Message
         
      $message = "--".$boundary."\n";
      $message.="Content-Type: text/plain; charset=\"windows-1251\"\n";
      $message.="Content-Transfer-Encoding: quoted-printable\n";
      $message.="\n";
      $message.="$yourmessage";
      $message.="\n";

      //Lets attach to something! =)
      
      If($allowattach > 0) {
         
         For($i=0; $i <= $allowattach-1; $i++) {
            
            If($_FILES['attachment']['name'][$i]) {
               
               $message.=phattach($_FILES['attachment']['tmp_name'][$i],$_FILES['attachment']['name'][$i]);
               
            }
            
         } //For
         
      } // If
      
      
      // End the message
      
      $message.="--".$boundary."--\n";
      
      // Send the completed message
      
      If(!mail($myemail,$emailsubject,$message,$headers)) {
         
         Exit("Произошла ошибка, пожалуйста, сообщите об этом администратору сайта.\n");
         
      } Else {
      
         $sent_mail=true;
         
      }

   } // Else

} // $_POST
?>
<html>
<head>
<meta http-equiv="Content-Language" content="en-us" />
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title><?=$websitename?></title>

<style type="text/css">
   body{
      background-color:#FFFFFF;
      font-family: Verdana, Arial, sans-serif;
      font-size: 12pt;
      color: #000000;
   }
   
   .error_message{
      font-family: Verdana, Arial, sans-serif;
      font-size: 11pt;
      color: #FF0000;
   }
   
   .thanks_message{
      font-family: Verdana, Arial, sans-serif;
      font-size: 11pt;
      color: #000000;
   }
   
   a:link{
      text-decoration:none;
      color: #000000;
   }
   a:visited{
      text-decoration:none;
      color: #000000;
   }
   a:hover{
      text-decoration:none;
      color: #000000;
   }
   
   
   .table {
      border-collapse:collapse;
      border:1px solid #000000;
      width:500px;
   }
   
   .table_header{
      border:1px solid #070707;
      background-color:#000;
      font-family: Verdana, Arial, sans-serif;
      font-size: 11pt;
      font-weight:bold;
      color: #FFFFFF;
      text-align:center;
      padding:2px;
   }
   
   .attach_info{
      border:1px solid #070707;
      background-color:#EBEBEB;
      font-family: Verdana, Arial, sans-serif;
      font-size: 8pt;
      color: #000000;
      padding:4px;
   }
   
   
   .table_body{
      border:1px solid #070707;
      background-color:#EBEBEB;
      font-family: Verdana, Arial, sans-serif;
      font-size: 10pt;
      color: #000000;
      padding:2px;
   }
   
   
   .table_footer{
      border:1px solid #070707;
      background-color:#EBEBEB;
      text-align:center;
      padding:2px;
   }
   
   
   input,select,textarea {
      font-family: Verdana, Arial, sans-serif;
      font-size: 10pt;
      color: #000000;
      border:1px solid #000000;
   }
   
   .copyright {
      border:0px;
      font-family: Verdana, Arial, sans-serif;
      font-size: 9pt;
      color: #000000;
      text-align:right;
   }
   
   form{
      padding:0px;
      margin:0px;
   }
</style>


<script type="text/javascript">
var error="";
e_regex = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$/;

function Checkit(theform) {
   
   if(theform.yourname.value=="") {
      error+="Вы не ввели Ваше имя\n";
   }
   
   if(theform.youremail.value=="") {
      error+="Вы не ввели Ваш email\n";
   } else if(!e_regex.test(theform.youremail.value)) {
      error+="Неправильный адрес электронной почты\n";
   }
      
   if(theform.yourmessage.value=="") {
      error+="Вы не ввели Ваше сообщение\n";
   }
   
   if(error) {
      alert('Произошли следующие ошибки:\n\n' + error);
      error="";
      return false;
   } else {
      return true;
   }
}
</script>
</head>
<body>
<?If($display_message) {?>
<div align="center" class="error_message"><b><?=$display_message;?></b></div>
<br />
<?}?>
<?If($sent_mail!=true) {?>
<form method="post" action="<?=$_SERVER['PHP_SELF'];?>" enctype="multipart/form-data" name="phmailer" onsubmit="return Checkit(this);">
<table align="center" class="table">
   <tr>
      <td colspan="2" class="table_header" width="100%"><?=$websitename;?></td>
   </tr>
   <?If($allowattach > 0) {?>
      <tr>
         <td width="100%" class="attach_info" colspan="2">
            <b>Поддерживаемые типы файлов:</b> <?=$types?><br />
            <b>Максимальный размер файла:</b> <?=$max_file_size?>kb.<br />
            <b>Максимальный размер архива:</b> <?=$max_file_total?>kb.
         </td>
      </tr>
   <?}?>
   
   <tr>
      <td width="30%" class="table_body">Ваше имя:</td>
      <td width="70%" class="table_body"><input name="yourname" type="text" size="30" value="<?=stripslashes(htmlspecialchars($yourname));?>" /><span class="error_message">*</span></td>
   </tr>
   <tr>
      <td width="30%" class="table_body">Ваш Email:</td>
      <td width="70%" class="table_body"><input name="youremail" type="text" size="30" value="<?=stripslashes(htmlspecialchars($youremail));?>" /><span class="error_message">*</span></td>
   </tr>
   <tr>
      <td width="30%" class="table_body">Тема:</td>
      <td width="70%" class="table_body">
      
         <?If($use_subject_drop AND is_array($subjects)) {?>
               <select name="emailsubject" size="1">
                  <?while(list($key,$val)=each($subjects)) {?>

                     <option value="<?=intval($key);?>"><?=htmlspecialchars(stripslashes($val));?></option>
                  
                  <?}?>
               </select>
            
         
         <?} Else {?>
            
            <input name="emailsubject" type="text" size="30" value="<?=stripslashes(htmlspecialchars($emailsubject));?>" />
            
         <?}?>
         
      </td>
   </tr>

<?For($i=1;$i <= $allowattach; $i++) {?>
   <tr>
      <td width="30%" class="table_body">Прикрепить файл:</td>
      <td width="70%" class="table_body"><input name="attachment[]" type="file" size="30" /></td>
   </tr>
<?}?>

   <tr>
      <td colspan="2" width="100%" class="table_body">Ваше сообщение:<span class="error_message">*</span><br />
         <div align="center">
            <textarea name="yourmessage" rows="8" cols="60"><?=stripslashes(htmlspecialchars($yourmessage));?></textarea>
         </div>
      </td>
   </tr>
   <tr>
      <td colspan="2" width="100%" class="table_footer">
         <input type="hidden" name="submit" value="true" />
         <input type="submit" value="<?=$submitvalue;?>" /> &nbsp;
         <input type="reset" value="<?=$resetvalue;?>" />
      </td>
   </tr>
</table>
</form>
<?} Else {?>
<div align="center" class="thanks_message"><?=$thanksmessage;?></div>
<html><head><meta http-equiv='Refresh' content='1; URL=index.php'></head></html>
<?}?>
</body>
</html>



 
yury
или вот попроще, но с меньшим количеством настроек:

Скачать исходники  Код
<?php
session_start();
$admin = '123@mail.ru';

if ( isset( $_POST['sendMail'] ) ) {
  $name  = substr( $_POST['name'], 0, 64 );
  $email   = substr( $_POST['email'], 0, 64 );
  $subject = substr( $_POST['subject'], 0, 64 );
  $message = substr( $_POST['message'], 0, 250 );
 
  $error = '';
  if ( empty( $name ) ) $error = $error.'<li>Не заполнено поле "Имя"</li>';
  if ( empty( $email ) ) $error = $error.'<li>Не заполнено поле "E-mail"</li>';
  if ( empty( $subject ) ) $error = $error.'<li>Не заполнено поле "Тема"</li>';
  if ( empty( $message ) ) $error = $error.'<li>Не заполнено поле "Сообщение"</li>';
  if ( !empty( $email ) and !preg_match( "#^[0-9a-z_\-\.]+@[0-9a-z\-\.]+\.[a-z]{2,6}$#i", $email ) )
    $error = $error.'<li>поле "E-mail" должно соответствовать формату somebody@somewhere.ru</li>';
  if ( !empty( $error ) ) {
    $_SESSION['sendMailForm']['error']   = '<p>При заполнении формы были допущены ошибки:</p><ul>'.$error.'</ul>';
    $_SESSION['sendMailForm']['name']    = $name;
    $_SESSION['sendMailForm']['email']   = $email;
    $_SESSION['sendMailForm']['subject'] = $subject;
    $_SESSION['sendMailForm']['message'] = $message;
    header( 'Location: '.$_SERVER['PHP_SELF'] );
    die();
  }

  if ( !empty( $_FILES['file']['tmp_name'] ) and $_FILES['file']['error'] == 0 ) {
    $filepath = $_FILES['file']['tmp_name'];
    $filename = $_FILES['file']['name'];
  } else {
    $filepath = '';
    $filename = '';
  }
 
  $body = "АВТОР:\r\n".$name."\r\n\r\n";
  $body .= "E-MAIL:\r\n".$email."\r\n\r\n";
  $body .= "ТЕМА:\r\n".$subject."\r\n\r\n";
  $body .= "СООБЩЕНИЕ:\r\n".$message;
 
  if ( send_mail($admin, $body, $email, $filepath, $filename) )
    $_SESSION['success'] = true;
  else
    $_SESSION['success'] = false;
  header( 'Location: '.$_SERVER['PHP_SELF'] );
  die();
}

// Вспомогательная функция для отправки почтового сообщения с вложением
function send_mail($admin, $body, $email, $filepath, $filename)
{
  $subject = '=?windows-1251?B?'.base64_encode('Заполнена форма на сайте').'?=';
  $boundary = "--".md5(uniqid(time())); // генерируем разделитель
  $headers = "From: ".strtoupper($_SERVER['SERVER_NAME'])." <".$email.">\r\n";   
  $headers .= "Return-path: <".$email.">\r\n";
  $headers .= "MIME-Version: 1.0\r\n";
  $headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
  $multipart = "--".$boundary."\r\n";
  $multipart .= "Content-type: text/plain; charset=\"windows-1251\"\r\n";
  $multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";

  $body = quoted_printable_encode( $body )."\r\n\r\n";
 
  $multipart .= $body;
 
  $file = '';
  if ( !empty( $filepath ) ) {
    $fp = fopen($filepath, "r");
    if ( $fp ) {
      $content = fread($fp, filesize($filepath));
      fclose($fp);
      $file .= "--".$boundary."\r\n";
      $file .= "Content-Type: application/octet-stream\r\n";
      $file .= "Content-Transfer-Encoding: base64\r\n";
      $file .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
      $file .= chunk_split(base64_encode($content))."\r\n";
    }
  }
  $multipart .= $file."--".$boundary."--\r\n";

  if( mail($admin, $subject, $multipart, $headers) )
    return true;
  else
    return false;
}

function quoted_printable_encode ( $string ) {
   // rule #2, #3 (leaves space and tab characters in tact)
   $string = preg_replace_callback (
   '/[^\x21-\x3C\x3E-\x7E\x09\x20]/',
   'quoted_printable_encode_character',
   $string
   );
   $newline = "=\r\n"; // '=' + CRLF (rule #4)
   // make sure the splitting of lines does not interfere with escaped characters
   // (chunk_split fails here)
   $string = preg_replace ( '/(.{73}[^=]{0,3})/', '$1'.$newline, $string);
   return $string;
}

function quoted_printable_encode_character ( $matches ) {
   $character = $matches[0];
   return sprintf ( '=%02x', ord ( $character ) );
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Отправить письмо</title>
<link rel="StyleSheet" type="text/css" href="/style/screen.css">
<link rel="icon" href="/favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
</head>
<body>

<?php
if ( isset( $_SESSION['sendMailForm'] ) ) {
  echo $_SESSION['sendMailForm']['error'];
  $name    = htmlspecialchars ( $_SESSION['sendMailForm']['name'] );
  $email   = htmlspecialchars ( $_SESSION['sendMailForm']['email'] );
  $subject = htmlspecialchars ( $_SESSION['sendMailForm']['subject'] );
  $message = htmlspecialchars ( $_SESSION['sendMailForm']['message'] );
  unset( $_SESSION['sendMailForm'] );
} else {
  $name  = '';
  $email   = '';
  $subject = '';
  $message = '';
}

if ( isset( $_SESSION['success'] ) ) {
  if ( $_SESSION['success'] )
    echo '<p>Письмо успешно отправлено</p>';
  else
    echo '<p>Ошибка при отправке письма</p>';
  unset( $_SESSION['success'] );
}
?>

<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST" enctype="multipart/form-data">
<table>
<tr><td>Имя:</td><td><input type="text" name="name" maxlength="64" value="<?php echo $name ?>" /></td></tr>
<tr><td>E-mail:</td><td><input type="text" name="email" maxlength="64" value="<?php echo $email ?>" /></td></tr>
<tr><td>Тема:</td><td><input type="text" name="subject" maxlength="64" value="<?php echo $subject ?>" /></td></tr>
<tr><td>Сообщение:</td><td><textarea name="message" rows="5" cols="30"><?php echo $message ?></textarea></td></tr>
<tr><td>Файл:</td><td><input type="file" name="file" /></td></tr>
<tr><td>&nbsp;</td><td><input type="submit" name="sendMail" value="Отправить" /></td></tr>
</table>
</form>

</body>
</html>


 
yury
что-то не пойму как подставить переменную мыла юзера в строку $myemail="youremail@domain.ru";

кто подскажет?
 
jikaka
тебе нужно в место адреса ссылка на личное сообщение юзеру?
или что?
 
Web
yury
но не могу подставить переменную $data['mail'] в указанное выше место

те. $myemail="".$data['mail']."";
добавляю запрос

$data = dbarray(dbquery("SELECT mail FROM ".DB_PREFIX."users WHERE id='".$_GET['id']."'"));

и она перестает открываться.

добавляю require_once "../../maincore.php";

и открывается, но при отправке выдает сообщение. мол неправильный формат файла, хотя я даже файл не добавлял. видимо пересекатеся чтото с ядром самой системы
 
dark
$data['user_email']
и
$data = dbarray(dbquery("SELECT user_email FROM ".DB_PREFIX."users WHERE id='".$_GET['id']."'"));
 
yury
да я знаю. говорю же, в чем причина выше
 
dark
У меня вот так работает. Файл лежит в корне сайта:

Скачать исходники  Код
<?php
session_start();
$admin = '123@mail.ru';

if ( isset( $_POST['sendMail'] ) ) {
  $name  = substr( $_POST['name'], 0, 64 );
  $email   = substr( $_POST['email'], 0, 64 );
  $subject = substr( $_POST['subject'], 0, 64 );
  $message = substr( $_POST['message'], 0, 250 );
 
  $error = '';
  if ( empty( $name ) ) $error = $error.'<li>Не заполнено поле "Имя"</li>';
  if ( empty( $email ) ) $error = $error.'<li>Не заполнено поле "E-mail"</li>';
  if ( empty( $subject ) ) $error = $error.'<li>Не заполнено поле "Тема"</li>';
  if ( empty( $message ) ) $error = $error.'<li>Не заполнено поле "Сообщение"</li>';
  if ( !empty( $email ) and !preg_match( "#^[0-9a-z_\-\.]+@[0-9a-z\-\.]+\.[a-z]{2,6}$#i", $email ) )
    $error = $error.'<li>поле "E-mail" должно соответствовать формату somebody@somewhere.ru</li>';
  if ( !empty( $error ) ) {
    $_SESSION['sendMailForm']['error']   = '<p>При заполнении формы были допущены ошибки:</p><ul>'.$error.'</ul>';
    $_SESSION['sendMailForm']['name']    = $name;
    $_SESSION['sendMailForm']['email']   = $email;
    $_SESSION['sendMailForm']['subject'] = $subject;
    $_SESSION['sendMailForm']['message'] = $message;
    header( 'Location: '.$_SERVER['PHP_SELF'] );
    die();
  }

  if ( !empty( $_FILES['file']['tmp_name'] ) and $_FILES['file']['error'] == 0 ) {
    $filepath = $_FILES['file']['tmp_name'];
    $filename = $_FILES['file']['name'];
  } else {
    $filepath = '';
    $filename = '';
  }
 
  $body = "АВТОР:\r\n".$name."\r\n\r\n";
  $body .= "E-MAIL:\r\n".$email."\r\n\r\n";
  $body .= "ТЕМА:\r\n".$subject."\r\n\r\n";
  $body .= "СООБЩЕНИЕ:\r\n".$message;
 
  if ( send_mail($admin, $body, $email, $filepath, $filename) )
    $_SESSION['success'] = true;
  else
    $_SESSION['success'] = false;
  header( 'Location: '.$_SERVER['PHP_SELF'] );
  die();
}

// Вспомогательная функция для отправки почтового сообщения с вложением
function send_mail($admin, $body, $email, $filepath, $filename)
{
  $subject = '=?windows-1251?B?'.base64_encode('Заполнена форма на сайте').'?=';
  $boundary = "--".md5(uniqid(time())); // генерируем разделитель
  $headers = "From: ".strtoupper($_SERVER['SERVER_NAME'])." <".$email.">\r\n";   
  $headers .= "Return-path: <".$email.">\r\n";
  $headers .= "MIME-Version: 1.0\r\n";
  $headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
  $multipart = "--".$boundary."\r\n";
  $multipart .= "Content-type: text/plain; charset=\"windows-1251\"\r\n";
  $multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";

  $body = quoted_printable_encode( $body )."\r\n\r\n";
 
  $multipart .= $body;
 
  $file = '';
  if ( !empty( $filepath ) ) {
    $fp = fopen($filepath, "r");
    if ( $fp ) {
      $content = fread($fp, filesize($filepath));
      fclose($fp);
      $file .= "--".$boundary."\r\n";
      $file .= "Content-Type: application/octet-stream\r\n";
      $file .= "Content-Transfer-Encoding: base64\r\n";
      $file .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
      $file .= chunk_split(base64_encode($content))."\r\n";
    }
  }
  $multipart .= $file."--".$boundary."--\r\n";

  if( mail($admin, $subject, $multipart, $headers) )
    return true;
  else
    return false;
}

function quoted_printable_encode ( $string ) {
   // rule #2, #3 (leaves space and tab characters in tact)
   $string = preg_replace_callback (
   '/[^\x21-\x3C\x3E-\x7E\x09\x20]/',
   'quoted_printable_encode_character',
   $string
   );
   $newline = "=\r\n"; // '=' + CRLF (rule #4)
   // make sure the splitting of lines does not interfere with escaped characters
   // (chunk_split fails here)
   $string = preg_replace ( '/(.{73}[^=]{0,3})/', '$1'.$newline, $string);
   return $string;
}

function quoted_printable_encode_character ( $matches ) {
   $character = $matches[0];
   return sprintf ( '=%02x', ord ( $character ) );
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Отправить письмо</title>
<link rel="StyleSheet" type="text/css" href="/style/screen.css">
<link rel="icon" href="/favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
</head>
<body>

<?php
if ( isset( $_SESSION['sendMailForm'] ) ) {
  echo $_SESSION['sendMailForm']['error'];
  $name    = htmlspecialchars ( $_SESSION['sendMailForm']['name'] );
  $email   = htmlspecialchars ( $_SESSION['sendMailForm']['email'] );
  $subject = htmlspecialchars ( $_SESSION['sendMailForm']['subject'] );
  $message = htmlspecialchars ( $_SESSION['sendMailForm']['message'] );
  unset( $_SESSION['sendMailForm'] );
} else {
  $name  = '';
  $email   = '';
  $subject = '';
  $message = '';
}

if ( isset( $_SESSION['success'] ) ) {
  if ( $_SESSION['success'] )
    echo '<p>Письмо успешно отправлено</p>';
  else
    echo '<p>Ошибка при отправке письма</p>';
  unset( $_SESSION['success'] );
}

require_once "maincore.php";
if (!isset($_GET['id']) || !isnum($_GET['cat_id'])) $_GET['id'] = 1;
$data = dbarray(dbquery("SELECT user_name, user_email FROM ".DB_PREFIX."users WHERE user_id='".$_GET['id']."'"));
$email = $data['user_email'];
$name = $data['user_name'];
?>


<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST" enctype="multipart/form-data">
<table>
<tr><td>Имя:</td><td><input type="text" name="name" maxlength="64" value="<?php echo $name ?>" /></td></tr>
<tr><td>E-mail:</td><td><input type="text" name="email" maxlength="64" readonly value="<?php echo $email ?>" /></td></tr>
<tr><td>Тема:</td><td><input type="text" name="subject" maxlength="64" value="<?php echo $subject ?>" /></td></tr>
<tr><td>Сообщение:</td><td><textarea name="message" rows="5" cols="30"><?php echo $message ?></textarea></td></tr>
<tr><td>Файл:</td><td><input type="file" name="file" /></td></tr>
<tr><td>&nbsp;</td><td><input type="submit" name="sendMail" value="Отправить" /></td></tr>
</table>
</form>

</body>
</html>




А зачем вообще этот скрипт? Встроенный в php-fusion PHPMailer может отправлять аттачи. Сделай дополнительное поле с прикрепляемым файлом и пропиши его к почтовику. Пример: http://php.russofile.ru/ru/translate/mail/phpmailer
 
yury
да чтото не в курсе как организовать, не смотрел. если делал и есть пример, то буду благодарен за подобную форму (правда у меня 7.01 версия)

по твоему вариант спасибо, правда не то, что описывал)

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

т.е подставить почту юзера здесь $admin = '123@mail.ru';
Изменил(а) yury, 07.08.2011 21:47
 
dark
Скачать исходники  Код
<?php
session_start();

require_once "maincore.php";
if (!isset($_GET['id']) || !isnum($_GET['cat_id'])) $_GET['id'] = 1;
$data = dbarray(dbquery("SELECT user_name, user_email FROM ".DB_PREFIX."users WHERE user_id='".$_GET['id']."'"));
$admin = $data['user_email'];

if ( isset( $_POST['sendMail'] ) ) {
  $name  = substr( $_POST['name'], 0, 64 );
  $email   = substr( $_POST['email'], 0, 64 );
  $subject = substr( $_POST['subject'], 0, 64 );
  $message = substr( $_POST['message'], 0, 250 );
 
  $error = '';
  if ( empty( $name ) ) $error = $error.'<li>Не заполнено поле "Имя"</li>';
  if ( empty( $email ) ) $error = $error.'<li>Не заполнено поле "E-mail"</li>';
  if ( empty( $subject ) ) $error = $error.'<li>Не заполнено поле "Тема"</li>';
  if ( empty( $message ) ) $error = $error.'<li>Не заполнено поле "Сообщение"</li>';
  if ( !empty( $email ) and !preg_match( "#^[0-9a-z_\-\.]+@[0-9a-z\-\.]+\.[a-z]{2,6}$#i", $email ) )
    $error = $error.'<li>поле "E-mail" должно соответствовать формату somebody@somewhere.ru</li>';
  if ( !empty( $error ) ) {
    $_SESSION['sendMailForm']['error']   = '<p>При заполнении формы были допущены ошибки:</p><ul>'.$error.'</ul>';
    $_SESSION['sendMailForm']['name']    = $name;
    $_SESSION['sendMailForm']['email']   = $email;
    $_SESSION['sendMailForm']['subject'] = $subject;
    $_SESSION['sendMailForm']['message'] = $message;
    header( 'Location: '.$_SERVER['PHP_SELF'] );
    die();
  }

  if ( !empty( $_FILES['file']['tmp_name'] ) and $_FILES['file']['error'] == 0 ) {
    $filepath = $_FILES['file']['tmp_name'];
    $filename = $_FILES['file']['name'];
  } else {
    $filepath = '';
    $filename = '';
  }
 
  $body = "АВТОР:\r\n".$name."\r\n\r\n";
  $body .= "E-MAIL:\r\n".$email."\r\n\r\n";
  $body .= "ТЕМА:\r\n".$subject."\r\n\r\n";
  $body .= "СООБЩЕНИЕ:\r\n".$message;
 
  if ( send_mail($admin, $body, $email, $filepath, $filename) )
    $_SESSION['success'] = true;
  else
    $_SESSION['success'] = false;
  header( 'Location: '.$_SERVER['PHP_SELF'] );
  die();
}

// Вспомогательная функция для отправки почтового сообщения с вложением
function send_mail($admin, $body, $email, $filepath, $filename)
{
  $subject = '=?windows-1251?B?'.base64_encode('Заполнена форма на сайте').'?=';
  $boundary = "--".md5(uniqid(time())); // генерируем разделитель
  $headers = "From: ".strtoupper($_SERVER['SERVER_NAME'])." <".$email.">\r\n";   
  $headers .= "Return-path: <".$email.">\r\n";
  $headers .= "MIME-Version: 1.0\r\n";
  $headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
  $multipart = "--".$boundary."\r\n";
  $multipart .= "Content-type: text/plain; charset=\"windows-1251\"\r\n";
  $multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";

  $body = quoted_printable_encode( $body )."\r\n\r\n";
 
  $multipart .= $body;
 
  $file = '';
  if ( !empty( $filepath ) ) {
    $fp = fopen($filepath, "r");
    if ( $fp ) {
      $content = fread($fp, filesize($filepath));
      fclose($fp);
      $file .= "--".$boundary."\r\n";
      $file .= "Content-Type: application/octet-stream\r\n";
      $file .= "Content-Transfer-Encoding: base64\r\n";
      $file .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
      $file .= chunk_split(base64_encode($content))."\r\n";
    }
  }
  $multipart .= $file."--".$boundary."--\r\n";

  if( mail($admin, $subject, $multipart, $headers) )
    return true;
  else
    return false;
}

function quoted_printable_encode ( $string ) {
   // rule #2, #3 (leaves space and tab characters in tact)
   $string = preg_replace_callback (
   '/[^\x21-\x3C\x3E-\x7E\x09\x20]/',
   'quoted_printable_encode_character',
   $string
   );
   $newline = "=\r\n"; // '=' + CRLF (rule #4)
   // make sure the splitting of lines does not interfere with escaped characters
   // (chunk_split fails here)
   $string = preg_replace ( '/(.{73}[^=]{0,3})/', '$1'.$newline, $string);
   return $string;
}

function quoted_printable_encode_character ( $matches ) {
   $character = $matches[0];
   return sprintf ( '=%02x', ord ( $character ) );
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Отправить письмо</title>
<link rel="StyleSheet" type="text/css" href="/style/screen.css">
<link rel="icon" href="/favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
</head>
<body>

<?php
if ( isset( $_SESSION['sendMailForm'] ) ) {
  echo $_SESSION['sendMailForm']['error'];
  $name    = htmlspecialchars ( $_SESSION['sendMailForm']['name'] );
  $email   = htmlspecialchars ( $_SESSION['sendMailForm']['email'] );
  $subject = htmlspecialchars ( $_SESSION['sendMailForm']['subject'] );
  $message = htmlspecialchars ( $_SESSION['sendMailForm']['message'] );
  unset( $_SESSION['sendMailForm'] );
} else {
  $name  = '';
  $email   = '';
  $subject = '';
  $message = '';
}

if ( isset( $_SESSION['success'] ) ) {
  if ( $_SESSION['success'] )
    echo '<p>Письмо успешно отправлено</p>';
  else
    echo '<p>Ошибка при отправке письма</p>';
  unset( $_SESSION['success'] );
}

?>


<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST" enctype="multipart/form-data">
<table>
<tr><td>Имя:</td><td><input type="text" name="name" maxlength="64" value="<?php echo $name ?>" /></td></tr>
<tr><td>E-mail:</td><td><input type="text" name="email" maxlength="64" value="<?php echo $email ?>" /></td></tr>
<tr><td>Тема:</td><td><input type="text" name="subject" maxlength="64" value="<?php echo $subject ?>" /></td></tr>
<tr><td>Сообщение:</td><td><textarea name="message" rows="5" cols="30"><?php echo $message ?></textarea></td></tr>
<tr><td>Файл:</td><td><input type="file" name="file" /></td></tr>
<tr><td>&nbsp;</td><td><input type="submit" name="sendMail" value="Отправить" /></td></tr>
</table>
</form>

</body>
</html>




Вот переделанный. в адресе в параметре id ид пользователя. Например: site.ru/mail.php?id=115
Насчет же сделанного на PHPMailer на движке фьюжен к сожалению готового нет, нужно писать. Ссылку на пример я привел выше там есть абзац Прикрепление файлов к письму. В случае с фьюженом по видимости затронется файл sendmail_include.php и файл откуда будет отправляться.
 
yury
странно, выдает при отправке: Ошибка при отправке письма

ты смотрел, у тебя норма отправляет?bw
 
dark
нормально. Причем отравлял спецом на mail.ru. Даже сквозь их глюканутый антиспам прошло.

Apache/2.2.19
PHP 5.2 с чем то, отрубил в настройках версию. Если нужно могу глянуть точно.

У тебя sendmail включен на сервере? Да аттачем крепил картинку.
 
yury
у меня отправляет в оригинале на указанный в качестве админа. но видимо что то тупит и не передает мыло юзера в переменную, вот и говорит что ошибка
 
dark
Может какие ограничения стоят на отправку аттачей? или что в ядре фьюжена переделано?
 
yury
ядро оставлял как есть, да и функций же не юзается там особо. ведь без модификации отправляет норма. буду думать, спасибо!
 

Поделиться этой темой
Социальные закладки: Vkontakte Odnoklassniki Mail.ru Facebook Google Tweet This
URL:
BBcode:
HTML:

Перейти на форум:
Похожие темы
Топ 5 пользователей форума
Alex Alex (1,166)   Zaxap Zaxap (1,078)   Vova Vova (877)   Pisatel Pisatel (678)   util util (666)