|
|
|
| На хостинге есть файл, как его отправить на email?
И пересылаются ли какие нибудь метки о том, что файл загружен? | |
|
|
|
|
|
|
|
для: Den*s
(22.10.2008 в 12:25)
| | пример | |
|
|
|
|
|
|
|
для: ddhvvn
(22.10.2008 в 14:07)
| | Всё работает нормально, файл присылает как нужно, но почему то любой фай обзывается "Часть.att"
Можно ли это исправить?
может что то напутал во время исправления
<?
//if(empty($_POST['mail_to'])) exit("Введите адрес получателя");
// проверяем правильности заполнения с помощью регулярного выражения
//if (!preg_match("/^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}$/i", $_POST['mail_to'])) exit("Введите адрес в виде somebody@server.com");
$picture = "";
// Если поле выбора вложения не пустое - закачиваем его на сервер
if (!empty($_FILES['mail_file']['tmp_name']))
{
// Закачиваем файл
$path = "download/".$_FILES['mail_file']['name'];
$file_name=$_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'];*/ "name@mail.ru";
// Отправляем почтовое сообщение
if(empty($picture)) mail($mail_to, $thm, $msg);
else send_mail($mail_to, $thm, $msg, $picture);
// Вспомогательная функция для отправки почтового сообщения с вложением (Trianon)
function send_mail($mail_to, $thema, $html, $path)
{ if ($path) {
$fp = fopen($path,"rb");
if (!$fp)
{ print "Cannot open file";
exit();
}
$file = fread($fp, filesize($path));
fclose($fp);
}
$name = $file_name; //"file.ext"; // в этой переменной надо сформировать имя файла (без всякого пути)
$EOL = "\r\n"; // ограничитель строк, некоторые почтовые сервера требуют \n - подобрать опытным путём
$boundary = "--".md5(uniqid(time())); // любая строка, которой не будет ниже в потоке данных.
$headers = "MIME-Version: 1.0;$EOL";
$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"$EOL";
$headers .= "From: mail@rusenerg.com";
$multipart = "--$boundary$EOL";
$multipart .= "Content-Type: text/html; charset=windows-1251$EOL";
$multipart .= "Content-Transfer-Encoding: base64$EOL";
$multipart .= $EOL; // раздел между заголовками и телом html-части
$multipart .= chunk_split(base64_encode($html));
$multipart .= "$EOL--$boundary$EOL";
$multipart .= "Content-Type: application/octet-stream; name=\"$name\"$EOL";
$multipart .= "Content-Transfer-Encoding: base64$EOL";
$multipart .= "Content-Disposition: attachment; filename=\"$name\"$EOL";
$multipart .= $EOL; // раздел между заголовками и телом прикрепленного файла
$multipart .= chunk_split(base64_encode($file));
$multipart .= "$EOL--$boundary--$EOL";
if(!mail($mail_to, $thema, $multipart, $headers))
{return False; //если не письмо не отправлено
}
else { //// если письмо отправлено
return True;
}
exit;
}
print "Ваше письмо отправлено.<br>";
?>
|
| |
|
|
|
|
|
|
|
для: Den*s
(22.10.2008 в 21:55)
| | Но если только Вы не отсылаете файл с расширением .att и если Вы наблюдаете это в обычной почтовой программе, могу предположить, что у Вас стоит какая-нибудь программа на компьютере которая переименовывает файлы в целях безопасности (у меня, например, Outpost) | |
|
|
|
|
|
|
|
для: ddhvvn
(22.10.2008 в 22:08)
| | Спасибо за совет но ошибка оказывается в другом
переменная $file_name почему то обнуляется после функции, и файл без имени так обзывается.
Не могу понять почему после функции переменная обнуляется, вот кусок
<?
function send_mail($mail_to, $thema, $html, $path)
{ if ($path) {
$fp = fopen($path,"rb");
if (!$fp)
{ print "Cannot open file";
exit();
}
$file = fread($fp, filesize($path));
fclose($fp);
}
$name = $_FILES['mail_file']['name']; //"file.ext"; // в этой переменной надо сформировать имя файла (без всякого пути)
?>
|
а было
| |
|
|
|
|
|
|
|
для: Den*s
(22.10.2008 в 22:23)
| | У Вас же "файл с хостинга"? Т.е. я понимаю, что оттуда же, откуда и скрипт?
Зачем тогда форма отправки?
Ну это лан! Если она есть, то инпут типа файл имеет имя mail_file ? т.е. строка выглядит так:
<input type="file" name="mail_file">
| ?
Да, и зачем убрали проверку в начале ? )) | |
|
|
|
|
|
|
|
для: ddhvvn
(22.10.2008 в 22:40)
| | Задача состоит в следующем:
На сайте зарегистрированный пользователь может отправить файл администратору на почту. Но администратор не очень сечёт в тонкостях (типа что можно через панель администрирования скачать этот файл или что то на подобие) поэтому именно на почту. Значит email уже забит в переменной.
Вот сейчас я думаю как сделать что бы этими файлами не засорить хостинг.
Идея написать скрипт, который будет удалять файлы, чей возраст старше 12 часов...
Хотелось бы выслушать какие идеи есть ещё :) | |
|
|
|
|
|
|
|
для: Den*s
(22.10.2008 в 23:39)
| | Отправлять нужно файл загруженный в tmp каталог, а этот временный файл мусорщик удалит. | |
|
|
|