|
|
|
| Здравствуте все. В книге да и на самом форуме выложен код отправки письма с вложением. Попробовал сделать письмо с двумя вложениями, не получается, У меня вопрос как это можно сделать, если например надо отправить два или три вложения в одном письме. | |
|
|
|
|
|
|
|
|
для: cheops
(14.11.2009 в 12:39)
| | Перебрал все что можно. Не пойму где зарыта собака. Сообщение приходит, но пустое без фото и текста. Помогите разобраться.
<?php
$picture = "";
// Закачиваем файл на сервер
if (!empty($_FILES['anketa_photo3']['tmp_name']))
{
$path = $_FILES['anketa_photo3']['name'];
if (copy($_FILES['anketa_photo3']['tmp_name'], $path)) {$picture = $path;}
}
// Отправляем почтовое сообщение
if(empty($picture)) mail($mail_to, $thm, $msg);
else send_mail($mail_to, $thm, $msg, $path);
// Вспомогательная функция для отправки почтового сообщения с вложением
function send_mail($mail_to, $thm, $msg, $path)
{
if ($path)
{
$fp = fopen($path,"rb");
if (!$fp)
{
print "<p align=center class=colorWarning><font size=4 color=#FF0000>Файл $path не может быть прочитан</font></p>";
exit();
}
$file = fread($fp, filesize($path));
fclose($fp);
}
//именя файла без пути
$name = $path;
//ограничитель строк
// $EOL = "r\n";
$EOL = (substr (PHP_OS, 0, 3) != "WIN") ? "\n" : "r\n";
// генерируем разделитель
$boundary = "--".md5(uniqid(time()));
$headers = "MIME-Version: 1.0;$EOL";
$headers .= "Content-Type: multipart/mixed; boundary = \"$boundary\"$EOL";
$headers .= "From: crazybox@yandex.ru";
$multipart = "--$boundary$EOL";
$multipart .= "Content-Type: text/html; charset = windows-1251$EOL";
$multipart .= "Content-Transfer-Encoding: base64$EOL";
$multipart .= $EOL;
$multipart .= chunk_split(base64_encode($msg));
$multipart = "$EOL--$boundary$EOL";
$multipart .= "Content-Type: application/octet-stream; name = \"$name\"$EOL";
$multipart .= "Content-Transfer-Encoding: base64$EOL" . $EOL;
$multipart .= "Content-Disposition: attachment; filename = \"$name\"$EOL";
$multipart .= $EOL;
$multipart .= chunk_split(base64_encode($file));
$multipart .= "$EOL--$boundary--$EOL";
}
if(!mail($mail_to, $thm, $multipart, $headers))
{
exit ("<p align=center class=colorWarning><font size=4 color=#FF0000>К сожалению, анкета не отправлена</font><br/><br/><font size=3 color=#FF0000>Попробуйте отправить анкету через некоторое время</font></p>");
}
else
{
exit ("<p align=center class=colorWarning><font size=4 color=#CCCCCC>Ваша анкета отправлена</font></p>");
}
?> | |
|
|
|
|
|
|
|
для: ED
(04.12.2009 в 15:03)
| | могу помочь, сам как то мучался, тут мне не помогли, для начала приведите пример из html формы а именно строки инпут для файлов, и если вы используете js скрипт типа multi-file-upload (название примерно), то тоже укажите какие, заранее предположу что скорее всего собака зарыта в теге инпут там имя нужно присваивать в таком виде: name="attachfile[]"
ключевое значение [], я в php мало понимаю, но могу посоветовать еще если это не поможет посмотреть что содержит в себе массив $_FILES методом вывода print($_FILES); что бы определить передает ли он два имени и содержимого из формы
// если был файл, то прикрепляем его к письму
if(isset($_FILES['attachfile']['name'][0])) {
if($_FILES['attachfile']['error'][0] == 0){
$mail->AddAttachment($_FILES['attachfile']['tmp_name'][0], $_FILES['attachfile']['name'][0]);
}
}
if(isset($_FILES['attachfile']['name'][1])) {
if($_FILES['attachfile']['error'][1] == 0){
$mail->AddAttachment($_FILES['attachfile']['tmp_name'][1], $_FILES['attachfile']['name'][1]);
}
}
|
| |
|
|
|
|
|
|
|
для: extonec
(04.12.2009 в 15:47)
| | Здесь форма ввода смесь JAWA, PHP и HTML.
///////////////////////////////////////////////////////
фрагмент HTML (форма ввода)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- saved from url=(0014)about:internet -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Gold model. Анкета.</title>
<meta http-equiv="autor" content="EMD" />
<meta http-equiv="Keywords" content="" />
<meta http-equit="DESCRIPTION" content="Gold-model" />
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
//////Проверка форм перед отправкой ONCLICK="return validate(this.form)"
function validate(form) {
if (!form.anketa_photo3.value) {
alert('Пожалуйста, вложите вашу фотографию')
return false
}
}
</SCRIPT>
</head>
<body>
<?php
// Обработчик HTML-формы
if(!empty($_POST))
{
include "anketa_check.php";
}
?>
<form enctype='multipart/form-data' method="post" >
<table align="right" width="900" height="750" border="0" cellspacing="30" cellpadding="0" <?php echo "background=images/background$n.jpg"; ?> >
<tr>
<td align="right" valign="middle" width="50%">
span class="colorBrick">Фотография (свободная тема)</span>
</td>
<td align="left" valign="middle" width="50%">
<input type=file class="colorHederGo" name="anketa_photo3" maxlength=64 <?php echo "value='$f8'"; ?> >
<input name="submit" type="submit" class="colorHederGo" value='Отправить анкету' ONCLICK="return validate(this.form)" />
</td>
</tr>
</table>
</form>
</body>
</html>
/////////////////////////////////
Затем идет файл проверки и подготовки к отправке аnketa_check.php
/////////////////////////////////
<?php
//Различные проверки
$f8 = "$anketa_photo3";
//Подготовка к отправке
$mail_to = "crazybox@yandex.ru";
$thm = "Анкета";
$msg = "$fio \n$data \n$pol \n$massa \n$rost \n$grud_plecho \n$talia \n$bedra \n$gorod \n$phone";
@include ("anketa_go.php");
?>
///////////////////////////////////////////////
после этого, файл отправки сообщения anketa_go.php (код которого был приведен до этого)
Вроде все просто но???????????
////////////////////////////////////////////// | |
|
|
|
|
|
|
|
для: ED
(04.12.2009 в 18:48)
| | Вам надо отправить письмо с несколькими вложениями?
если да, то в форме , для input type='file' имя задайте name='file[]', потом с помощью цикла for вы загружаете файлы на сервер, используя при этом move_uploaded_file(), а не copy().
Если Вы не прикрепляете файл к письму, само письмо приходит по назначению? | |
|
|
|
|
|
|
|
для: Slo_Nik
(05.12.2009 в 00:41)
| | Суть анкеты такова, что информация без фото не представляет интерес,. Просто письмо приходит. Я даже пробовал заменить
else send_mail($mail_to, $thm, $msg, $path);
на
else mail($mail_to, $thm, $msg, $path);
в этом случае приходит письмо и имя файла без пути. А насчет количества вложений, мне уже хотя бы одно отправлялось, как положено | |
|
|
|
|
|
|
|
для: ED
(05.12.2009 в 09:15)
| | а путь в названии файла и не должен быть указан, как я понимаю.
у Вас файл загружается в ту же директорию где и сам скрипт отправки письма лежит? или для файлов отдельная директория создана? | |
|
|
|
|
|
|
|
для: Slo_Nik
(05.12.2009 в 13:27)
| | Нет отдельная директория не создана. Да еще хотел сказать, что на сервер фото загружается. Мне кажется, что дело в заголовках. | |
|
|
|
|
|
|
|
для: ED
(05.12.2009 в 15:37)
| | в этой строке $EOL = (substr (PHP_OS, 0, 3) != "WIN") ? "\n" : "r\n"; пропущен слеш, допишите "\r\n".
на мой взгляд в этой строке лишнее (выделил жирным)
$multipart .= "Content-Transfer-Encoding: base64$EOL" . $EOL; | |
|
|
|
|
|
|
|
для: Slo_Nik
(06.12.2009 в 00:15)
| | Я извиняюсь не мог долго ответить, был в командировке. Вы знаете добавил нужное и убрал лишнее, а результата ни кого. Я уже не знаю, что делать. Файл по прежнему оседает на сервере, а до адресата по почте не доходит. | |
|
|
|
|
|
|
|
для: ED
(08.12.2009 в 15:18)
| | Может у адресата просто режутся вложения? | |
|
|
|
|
|
|
|
для: ED
(08.12.2009 в 15:18)
| | у Вас вывод уровень ошибок выставлен?
>Может у адресата просто режутся вложения?
попробуйте на разные адреса отослать письмо, хотя я думаю результат будет тот же...
вынисете функцию send_mail в отдельный файл и подключите её до вызова в скрипте | |
|
|
|
|
|
|
|
для: Slo_Nik
(08.12.2009 в 16:16)
| | Попробовал. Все устал боротся. Плохо если, что то не допонимаешь (в силу нехватки знаний). У меня большая просьба, если у кого есть проверенный рабочий скрипт и если не жалко, вышлите пожалуйста. Заранее благодарен. | |
|
|
|
|
|
|
|
для: ED
(08.12.2009 в 17:39)
| | если письмо приходит, и даже имя файла есть, но нет самого файла, то где то что то не выполняется.
прикрепите полностью весь скрипт, попробую помочь. | |
|
|
|
|
 5 Кб |
|
|
для: Slo_Nik
(08.12.2009 в 19:07)
| | Полностью вся анкета в архиве | |
|
|
|
|
 151.8 Кб |
|
|
для: ED
(08.12.2009 в 20:24)
| | я же Вам писал, что надо выставить уровень ошибок!!!
вот поэтому у Вас и идут проблемы.
получается, что у Вас не инициализированная переменная $picture, в которой имя файла. это в файле anketa_go.php.
в файле anketa.php не инициализированная переменная $LayerText и переменная $n на строке 106, которая вообще не понятно откуда берётся.
и ещё куча неинициализированных переменных.
скрин прилагаю.
инициализируйте переменные.
и зачем Вам ставить подавление ошибок перед include ? | |
|
|
|
|
|
|
|
для: ED
(08.12.2009 в 20:24)
| | <input type="text" class="mail" name="anketa_rost" size="10" maxlength="6" ONKEYPRESS="return numOnly(event)" <?php echo "value='$f2'"; ?> > и зачем так присваивать значение атрибуту value ?
<input type="text" name="name" value="<?php echo $f1 ?>"> так будет правильней | |
|
|
|
|
|
|
|
для: ED
(08.12.2009 в 20:24)
| | по файлу anketa_go.php
в этом файле, после отправки сообщения, получаются не инициализированые переменные $headers и $multipart, насколько я понимаю из-за того, что Вы пытаетесь их использовать вне функции, где они определены, Вы их вынесли за границы функции.
и поэтому в значении у них " ";
обращаться к ним надо внутри функции
поэтому вложение и не попадает с сообщение.
<?php
function send_mail($mail_to, $thm, $msg, $path){
// тут вы подготавливаете файл к отправке, формируете заголовки и т.д
.......................................................................................
........................................................................................
.......................................................................................
// тут отправляете само сообщение
if(!mail()){
return false;
}
else{
return true;
}
}
?>
|
а текст письма у Вас приходит потому, что вы до функции send_mail присвоили значение этим переменным $mail_to, $thm | |
|
|
|
|
|
|
|
для: Slo_Nik
(08.12.2009 в 22:31)
| | После работы попробую все исправить и большое Вам спасибо, что уделили мне время. | |
|
|
|
|
|
|
|
для: ED
(09.12.2009 в 06:55)
| | Спасибо Slo_Nik . Вся проблема была в последнем файле anketa_go.php.
Во первых как вы сказали я вынес переменные $headers и $multipart за границу функции.
Во вторых переменную $EOL в некоторых строках скрипта надо ставить через пробел
В третьих я заменил строку
$multipart .= chunk_split(base64_encode($msg));
на
$multipart .= $msg;
И все заработало.
У меня к вам вот какой вопрос. Корректно ли будет выглядеть построение файла temp.php.
<script >
--код--
</script>
<html>
<head>
<meta>
<meta>
</head>
<body>
--код--
</body>
</html>
Если не корректно, то почему?
А так в принципе все работает. | |
|
|
|
|
|
|
|
для: ED
(09.12.2009 в 19:53)
| | как я понимаю, в файле temp.php Вы хотите вставить код javascript?
если да, то скрипт разместите или в head или body , всё зависит от конкретной ситуации | |
|
|
|