Отправка почты с аттачем через форму юзеру
|
yury |
Опубликовано 04.08.2011 20:22
|

Супер Администратор

Сообщений: 1051
Зарегистрирован: 26.07.2010 13:12
|
Собственно нашел рабочую форму, которая отправляет письмо с прикрепленным файлом (аттачем)
Пробовал приделать ссылку к профилю каждого юзверя, чтобы кликнув по ссылке открывалось окошко с формой. в форме в свою очередь автоматом идет подстановка почты юзера (строка: $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;?>" />
<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 |
Опубликовано 05.08.2011 00:03
|

Супер Администратор

Сообщений: 1051
Зарегистрирован: 26.07.2010 13:12
|
или вот попроще, но с меньшим количеством настроек:
Код<?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> </td><td><input type="submit" name="sendMail" value="Отправить" /></td></tr>
</table>
</form>
</body>
</html>
|
|
|
|
yury |
Опубликовано 07.08.2011 11:56
|

Супер Администратор

Сообщений: 1051
Зарегистрирован: 26.07.2010 13:12
|
что-то не пойму как подставить переменную мыла юзера в строку $myemail="youremail@domain.ru";
кто подскажет? |
|
|
|
jikaka |
Опубликовано 07.08.2011 12:30
|

Супер Администратор
 Разработчики

Сообщений: 4849
Зарегистрирован: 26.07.2010 12:10
|
тебе нужно в место адреса ссылка на личное сообщение юзеру?
или что? |
|
|
|
yury |
Опубликовано 07.08.2011 12:55
|

Супер Администратор

Сообщений: 1051
Зарегистрирован: 26.07.2010 13:12
|
но не могу подставить переменную $data['mail'] в указанное выше место
те. $myemail="".$data['mail']."";
добавляю запрос
$data = dbarray(dbquery("SELECT mail FROM ".DB_PREFIX."users WHERE id='".$_GET['id']."'"));
и она перестает открываться.
добавляю require_once "../../maincore.php";
и открывается, но при отправке выдает сообщение. мол неправильный формат файла, хотя я даже файл не добавлял. видимо пересекатеся чтото с ядром самой системы |
|
|
|
dark |
Опубликовано 07.08.2011 12:58
|

Администратор
 Группа поддержки

Сообщений: 222
Зарегистрирован: 05.12.2010 22:22
|
$data['user_email']
и
$data = dbarray(dbquery("SELECT user_email FROM ".DB_PREFIX."users WHERE id='".$_GET['id']."'")); |
|
|
|
yury |
Опубликовано 07.08.2011 13:11
|

Супер Администратор

Сообщений: 1051
Зарегистрирован: 26.07.2010 13:12
|
да я знаю. говорю же, в чем причина выше |
|
|
|
dark |
Опубликовано 07.08.2011 15:44
|

Администратор
 Группа поддержки

Сообщений: 222
Зарегистрирован: 05.12.2010 22:22
|
У меня вот так работает. Файл лежит в корне сайта:
Код<?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> </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 |
Опубликовано 07.08.2011 21:36
|

Супер Администратор

Сообщений: 1051
Зарегистрирован: 26.07.2010 13:12
|
да чтото не в курсе как организовать, не смотрел. если делал и есть пример, то буду благодарен за подобную форму (правда у меня 7.01 версия)
по твоему вариант спасибо, правда не то, что описывал)
там форма же отправляет админу, а надо, чтобы отправляла юзеру, с чхей страницы форма открывается. а вбивать уже свои данные самому.
т.е подставить почту юзера здесь $admin = '123@mail.ru';
Изменил(а) yury, 07.08.2011 21:47
|
|
|
|
dark |
Опубликовано 07.08.2011 23:55
|

Администратор
 Группа поддержки

Сообщений: 222
Зарегистрирован: 05.12.2010 22:22
|
Код<?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> </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 |
Опубликовано 08.08.2011 05:09
|

Супер Администратор

Сообщений: 1051
Зарегистрирован: 26.07.2010 13:12
|
странно, выдает при отправке: Ошибка при отправке письма
ты смотрел, у тебя норма отправляет? |
|
|
|
dark |
Опубликовано 08.08.2011 15:10
|

Администратор
 Группа поддержки

Сообщений: 222
Зарегистрирован: 05.12.2010 22:22
|
нормально. Причем отравлял спецом на mail.ru. Даже сквозь их глюканутый антиспам прошло.
Apache/2.2.19
PHP 5.2 с чем то, отрубил в настройках версию. Если нужно могу глянуть точно.
У тебя sendmail включен на сервере? Да аттачем крепил картинку. |
|
|
|
yury |
Опубликовано 08.08.2011 15:21
|

Супер Администратор

Сообщений: 1051
Зарегистрирован: 26.07.2010 13:12
|
у меня отправляет в оригинале на указанный в качестве админа. но видимо что то тупит и не передает мыло юзера в переменную, вот и говорит что ошибка |
|
|
|
dark |
Опубликовано 08.08.2011 15:38
|

Администратор
 Группа поддержки

Сообщений: 222
Зарегистрирован: 05.12.2010 22:22
|
Может какие ограничения стоят на отправку аттачей? или что в ядре фьюжена переделано? |
|
|
|
yury |
Опубликовано 08.08.2011 16:31
|

Супер Администратор

Сообщений: 1051
Зарегистрирован: 26.07.2010 13:12
|
ядро оставлял как есть, да и функций же не юзается там особо. ведь без модификации отправляет норма. буду думать, спасибо! |
|
|