Перейти к содержимому


Отправка файлов в почтовой форме feedback.html

feedback файлы почтовая форма

  • Вы не можете ответить в тему
Сообщений в теме: 18

#1 Zigfrid

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений
Репутация: 0
Начинающий

Отправлено 13 September 2012 - 10:11 AM

Требуется добавить в почтовую форму feedback.tpl.html возможность прикреплять файлы.

Для этого, я добавил к тегу <form> свойство enctype="multipart/form-data" и дописал в форму код:




<tr>
<td style="font-size:14px; color:#000;" align="left"><strong>{$smarty.const.FEEDBACK_CUSTOMER_MESSAGE_FILE}</strong></td>
</tr>
<tr>
<td align="left" style="padding-bottom:10px;"><input name="files" type="file"</td>
</tr>

Естественно, добавил также в languages описание для FEEDBACK_CUSTOMER_MESSAGE_FILE

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

Прикрепленные файлы

  • Прикрепленный файл  scr_he.png   16.55К   6 Количество загрузок:

  • 0

#2 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 13 September 2012 - 10:18 AM

Что я забыл сделать?

Как я понимаю, Вы забыли прикрепить файл к отправляемому письму в feedback.php
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#3 eugene_wb

    Продвинутый пользователь

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 13 September 2012 - 10:22 AM

и еще вдобавок реализацию отправки вложений
  • 0
Изображение Изображение Изображение

#4 Zigfrid

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений
Репутация: 0
Начинающий

Отправлено 13 September 2012 - 10:46 AM

Что я забыл сделать?

Как я понимаю, Вы забыли прикрепить файл к отправляемому письму в feedback.php


Разумеется, я это не забывал, просто скрин сделал с незаполненной формы.

и еще вдобавок реализацию отправки вложений

Евгений, а нельзя ли тут поподробнее? Какой конкретно код нужно дописать, чтобы файлы отправлялись?
  • 0

#5 eugene_wb

    Продвинутый пользователь

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 13 September 2012 - 10:53 AM

Евгений, а нельзя ли тут поподробнее? Какой конкретно код нужно дописать, чтобы файлы отправлялись?

очень хитрый ;)
  • 0
Изображение Изображение Изображение

#6 Zigfrid

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений
Репутация: 0
Начинающий

Отправлено 13 September 2012 - 11:01 AM

Если сможете помочь, то материальная компенсация не заржавеет. Подробно, что требуется (кроме формы еще) в новой теме.
  • 0

#7 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 13 September 2012 - 02:39 PM

Разумеется, я это не забывал, просто скрин сделал с незаполненной формы.

Видимо, Вы не заметили. Речь о feedback.php, а не о feedback.tpl.html.
В feedback.php для отправки письма используется функция xMailTxtHTML, штатно в нее никаким образом не передается информация о приложенном файле, даже если он честно закачался и лежит где-то на сервере.
Надо:
1. передать в эту функцию информацию о файле, т.е. добавить эту информацию в аргументы при вызове.
2. в теле этой функции (см. functions.php) добавить метод $mail->AddAttachment('путь', 'имя')
где путь и имя переданы в п.1 (передать можно просто путь, а имя взять из него).

Более подробно можно почитать в описании используемого класса phpmailer
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#8 Zigfrid

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений
Репутация: 0
Начинающий

Отправлено 14 September 2012 - 10:20 AM

Благодарю за ответ! С PHP я особо не дружу, поэтому видимо придется взять готовую форму с такой функцией за 10$.
  • 0

#9 fastik

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 161 сообщений
Репутация: 11
Начинающий
  • ГородТирасполь

Отправлено 24 February 2013 - 09:06 PM

Тема конечно старовата, но все же не утратила своей актуальности, так никому и не нужна была эта функция? или может ТС решил ее?
  • 0

#10 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 25 February 2013 - 02:07 PM

Тема конечно старовата, но все же не утратила своей актуальности, так никому и не нужна была эта функция? или может ТС решил ее?

Хм.... ИМХО, там довольно внятно написано, как ТС "решил ее" :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#11 fastik

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 161 сообщений
Репутация: 11
Начинающий
  • ГородТирасполь

Отправлено 25 February 2013 - 06:31 PM

да мне тоже тут уже предложили это же "решение", но суть форума, как я думал, это подсказки в решении тех или иных задач, эта задача для меня не коммерческая. Поэтому не хочется тратить деньги на ее мгновенное решение. Интересно самому и конечно с помощью форумчан попытаться разобраться в принципе работы.
  • 0

#12 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 25 February 2013 - 07:46 PM

эта задача для меня не коммерческая

1. Не смешите. Интернет-магазин не может быть некоммерческой задачей. Даже мой "тестовый сайтик" достаточно коммерческий, т.е. является инструментом для зарабатывания денег.
2. Около полугода назад в этой же теме - http://vsupport.club...dpost__p__22422 - была дана исчерпывающая информация о решении этой проблемы. Если "Интересно самому и конечно с помощью форумчан", то за полгода-то точно задачу можно было решить. Если, конечно, "с помощью форумчан" не означает "я уже полгода жду, когда кто-нибудь не просто ссылки даст, а еще и за меня напишет" :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#13 fastik

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 161 сообщений
Репутация: 11
Начинающий
  • ГородТирасполь

Отправлено 25 February 2013 - 09:00 PM

С помощью форумчан значит подскажут, и посоветуют, не прошу решить за меня эту задачу.
  • 0

#14 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 25 February 2013 - 09:10 PM

С помощью форумчан значит подскажут, и посоветуют, не прошу решить за меня эту задачу.

Мне еще раз привести ссылку на php-класс и что с ним делать? Ведь реально ВСЕ ОПИСАНО, что надо для письма с аттачем файла. Даже если отключили от Яндекса-Гугля-прочих-поисковиков и негде найти русскоязычную (да-да!) документацию по классу.

Любезнейший, ну вот какого хрена Вы тут попрошайничаете? Зарегистрировались вы ровно на 20 дней позже меня (31.11.2011). На момент регистрации я не знал вообще ничего о PHP/HTML кроме названия, а про smarty/JS/AJAX и вообще не знал, даже этих аббревиатур. Но мне это было интересно. А Вам, уж извините, это не "интересно", а "лениво, но жалко денег".
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#15 fastik

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 161 сообщений
Репутация: 11
Начинающий
  • ГородТирасполь

Отправлено 25 February 2013 - 09:15 PM

Денег мне не жалко. И если уж у Вас все проекты коммерческие я рад, у меня это не так, не судите по себе. И мне это интересно, но в свободное время, которого, к сожалению не так много, чтобы учить тонны мануалов. Возможно и догоняю я порой не так быстро как некоторые, что же, люди разные. Когда у меня были проекты коммерческие и не было времени разбираться с тем или иным проектом, я покупал модули и доработки. И мне не понятно о чем мы говорим? где Вы видите что я попрашайничаю? Ваше сообщение мол надо это вставить сюда и взять отсюда не очень то и конкретно. Хотя, конечно, направило в нужное русло.
  • 0

#16 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 25 February 2013 - 09:40 PM

И если уж у Вас все проекты коммерческие я рад, у меня это не так, не судите по себе.

Не уходите от ответа. Есть интернет-магазин. Каким образом он может быть некоммерческим? :)

И мне это интересно,

Мне это тоже интересно, иначе хренли бы я тут писал - у меня другой и вполне успешный бизнес. Я это вполне понимаю, но мы ведь не об этом правда? А о коммерции.

но в свободное время, которого, к сожалению не так много, чтобы учить тонны мануалов.

А вот это ключевой момент. Не хочешь разбираться - плати. Да и мануалов не тонны, не надо лукавить. Я ведь как-то освоил их меньше чем за год до более-менее приемлемого уровня, почему это недоступно Вам? Может, мне хотелось осваивать, а Вам весь этот год хотелось Деда Мороза, который все это знание подарит? :)

Возможно и догоняю я порой не так быстро как некоторые, что же, люди разные

Люди, несомненно, разные. Более того, я не скрываю, что я бывший программист (ага-ага - PL/M, Фортран) и мне по определению было легче понять новые языки. Даже выпав на 20 лет из программирования, так уж повернулась жизнь. Но у Вас в минусе "бывший программист" и в плюсе все остальное. Молодость, желание, возможности. Вам не кажется, что несколько смешно писать "догоняю я не так быстро как некоторые" имея год рождения 87 против 66? :)

Хотя, конечно, направило в нужное русло.

От-тыж-елки! Т.е. вроде бы и нахрен ни о чем, но таки направило в нужное русло? :)
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#17 fastik

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 161 сообщений
Репутация: 11
Начинающий
  • ГородТирасполь

Отправлено 25 February 2013 - 11:25 PM

Спасибо за дельные советы. Завтра выложу, что получилось, вернее уже сегодня.
  • 0

#18 Dbus

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 1116 сообщений
Репутация: 174
Мастер
  • ГородОдесса

Отправлено 25 February 2013 - 11:39 PM

Ну так и нужно было...
Ты выложи что делаешь, а мы подскажем, если че.
пс. топикстартеру эту задачу как раз я и решал, там ничего особо сложного, все что нужно badisoft выше написал, было бы желание.
  • 0
502 Bad Gateway

#19 fastik

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 161 сообщений
Репутация: 11
Начинающий
  • ГородТирасполь

Отправлено 26 February 2013 - 05:02 PM

В общем что надо было сделать, может все-таки кому-то понадобится
1. создать в корне папку uploads и дать права 777
2. в файле core/functions/functions.php примерно на 1071 строчке находим функцию function xMailTxtHTML. Заменяем ее на:
  function xMailTxtHTML($_Email, $_Subject, $_Text, $path_of_uploaded_file, $castmail = CONF_GENERAL_EMAIL, $castname = CONF_SHOP_NAME)
  {
	  if (!$_Email) return 0;
	  include_once ("core/classes/class.phpmailer.php");
	  $mail = new PHPMailer();
	  if (!CONF_MAIL_METHOD) $mail->IsSMTP();
	  else  $mail->IsMail();
	  $mail->Host = CONF_MAIL_HOST;
	  $mail->Username = CONF_MAIL_LOGIN;
	  $mail->Password = CONF_MAIL_PASS;
	  $mail->SMTPAuth = true;
	  $mail->From = $castmail;
	  $mail->FromName = $castname;
	  $mail->CharSet = DEFAULT_CHARSET;
	  $mail->Encoding = "8bit";
	  $mail->SetLanguage("ru");
	  $mail->AddReplyTo($castmail, $castname);
	  $mail->IsHTML(false);
	  $mail->Subject = $_Subject;
	  $mail->Body = $_Text;
   $mail->addAttachment($path_of_uploaded_file);
	  if (preg_match("/^[_\.a-z0-9-]{1,20}@(([a-z0-9-]+\.)+(com|net|org|mil|edu|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})$/is",
		  $_Email))
	  {
		  $mail->ClearAddresses();
		  $mail->AddAddress($_Email, '');
		  return $mail->Send();
	  }
	  else  return false;
  }
3. В файле core/includes/feedback.php после
$message_text = "";
					
			    }
добавляем
// Настройки  
$upload_folder = './uploads/'; //папка, в которую сохраняются файлы
$name_of_uploaded_file = basename($_FILES['upfile']['name']); //имя загружаемого файла
$path_of_uploaded_file = $upload_folder . $name_of_uploaded_file; // пусть к файлу
$tmp_path = $_FILES["upfile"]["tmp_name"];// аргумент, который нужен для is_uploaded_file
 
  if(is_uploaded_file($tmp_path))
  {
	  if(!copy($tmp_path,$path_of_uploaded_file))
	  {
	   $errors .= '\n error while copying the uploaded file';
	  }
  }
4. В файле /core/tpl/user/шаблон/feedback.tpl.html
перед
{if $smarty.const.CONF_ENABLE_CONFIRMATION_CODE eq 1}
вставляем
<tr>
		    <td align="left">Прикрепите файл</td>
		  </tr>
		  <tr>
		    <td style="height: 2px;"></td>
		  </tr>
		  <tr>
		    <td align="left"><input name="upfile" type="file"></td>
		  </tr>
А также добавляем enctype="multipart/form-data" в <form> .


Все работает, но тут есть вопрос к форумчанам, по поводу проверки. В том примере откуда я взял это все, написана проверка размера файла и расширения. НО. Вот пример. Мы задаем в начале формаьы файлов, которые разрешаем загружать и пустую переменную ошибок.
$allowed_extensions = array("jpg", "jpeg", "gif", "bmp");
$errors ='';
После этого находим расширение уже загруженного файла:
$type_of_uploaded_file = substr($name_of_uploaded_file,
	   strrpos($name_of_uploaded_file, '.') + 1);
И проверяем, сходится он с теми, что мы разрешили пользователю залить:
$allowed_ext = false;
for($i=0; $i<sizeof($allowed_extensions); $i++)
{
  if(strcasecmp($allowed_extensions[$i],$type_of_uploaded_file) == 0)
  {
   $allowed_ext = true; 
  }
}

if(!$allowed_ext)
{
  $errors .= "\n The uploaded file is not supported file type. ".
  " Only the following file types are supported: ".implode(',',$allowed_extensions);
}


Так вот этот еррор никак не высвечивается. Пробовал сделать так:
if(!$allowed_ext)
{
$smarty->assign("error",5);
}
прописал в russian.php
define('ERROR_TYPE', 'Загружаемый файл запрещен к загрузке')
А в файле feedback.tpl.html дописал {elseif $error eq 5}{$smarty.const.ERROR_TYPE}, но не проходит проверку, думаю, что не в том месте разместил.
  • 1