Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

$mailer->attachFile: как вывести ссылку на файл в теле письма?

18.06.2017, 13:26
Gvenv_nk
Наталья Комарова
Gvenv_nk

Зарегистрирован:
2011-11-07
Сообщений: 26

Файл к письму прикрепляется и доступен из админки, но в теле письма ссылка на вложение неактивна, отображается в виде:
Приложение: /netcat_files/54/61/file_name.
Перечитала все, что об этом написано на форуме и в мануале, но ответов не нахожу. Буду рада полезным ссылкам. К сожалению, я не программист, поэтому каждый раз туплю над подобными вопросами.
В действиях после добавления написано:
Код:
<?
// значения визуальных настроек
$res = $db->get_var("SELECT CustomSettings FROM Sub_Class WHERE Sub_Class_ID=$cc");
( $res ? eval("\$cc_settings = $res") : $cc_settings = NULL );

// значения визуальных настроек по умолчанию
$res = $db->get_var("SELECT CustomSettingsTemplate FROM Class WHERE Class_ID=$classID");
eval("\$default_cc_settings = $res");

echo "<div class='form-text'>".str_replace("%NAME", htmlspecialchars($f_Name), ( $cc_settings[TextAfterSend] ? $cc_settings[TextAfterSend] : $default_cc_settings[TextAfterSend][default_value] ) )."</div>";

$mailer = new CMIMEMail();

$f_Mail = "От кого: $f_Name
Почтовый адрес: $f_Address
E-mail: $f_Email
Телефон: $f_Phone
Вопрос: $f_Text
Приложение: $f_File_url";
$mailer->mailbody(strip_tags($f_Mail));
$mailer->send(($cc_settings[EmailTo] ? $cc_settings[EmailTo] : $system_env[SpamFromEmail]), $f_Email, $f_Email, 'ПИСЬМО С САЙТА adm-moskovsky.ru', $f_Name, $f_Phone, $f_Address, $f_Problem, $f_Text, $f_File);
$mailer->attachFile("$DOCUMENT_ROOT.$f_File_url", "$f_File[name]", "application/octet-stream");
echo "<div class='title-new-inner'>Спасибо! Ваше сообщение отправлено. В ближайшее время с вами свяжутся по указанному email.</div>";
?>
18.06.2017, 19:05
Игорь
Игорь Мишарин
Игорь

Зарегистрирован:
2011-11-20
Сообщений: 435

Цитата:
Файл к письму прикрепляется и доступен из админки, но в теле письма ссылка на вложение неактивна, отображается в виде:
Приложение: /netcat_files/54/61/file_name.

Именно так Вы и написали в шаблоне письма: "Приложение: $f_File_url";"
Т.е. только URL.
А вообще, данная строка "/netcat_files/54/61/file_name" в теле письма не нужна, файлы же прикрепляются и они находятся после текстовой части письма.
19.06.2017, 16:44
Gvenv_nk
Наталья Комарова
Gvenv_nk

Зарегистрирован:
2011-11-07
Сообщений: 26

Здравствуйте, Игорь! Спасибо за ответ.
Ну да, а если я в шаблоне письма напишу "Приложение: $f_File";" то в письме выведется array
А само письмо при любом раскладе приходит без вложений, стало быть, я еще где-то как-то в этом шаблоне накосячила (((
19.06.2017, 18:35
Игорь
Игорь Мишарин
Игорь

Зарегистрирован:
2011-11-20
Сообщений: 435

Поменяйте местами $mailer->send и $mailer->attachFile, т.е. сделайте так:

Код:
$mailer->mailbody(strip_tags($f_Mail));
$mailer->attachFile("$DOCUMENT_ROOT.$f_File_url", "$f_File[name]", "application/octet-stream");
$mailer->send(($cc_settings[EmailTo] ? $cc_settings[EmailTo] : $system_env[SpamFromEmail]), $f_Email, $f_Email, 'ПИСЬМО С САЙТА adm-moskovsky.ru', $f_Name, $f_Phone, $f_Address, $f_Problem, $f_Text, $f_File);


Т.е. сначала прикрепляете файл, а потом отправляете письмо. А было наоборот.
20.06.2017, 09:08
Gvenv_nk
Наталья Комарова
Gvenv_nk

Зарегистрирован:
2011-11-07
Сообщений: 26

Да, конечно, это абсолютно логично. Но, после того, как я поменяла местами эти строки, письмо вообще не приходит на почту.

Я вот нашла на форуме описание похожей проблемы, так там Руслан Густокашин дал такой совет (помимо того, что attach надо делать до send'а):

На каждый send надо заново формировать объект и, соответственно, аттач.

Мне, как чайнику, это абсолютно непонятно.
22.06.2017, 07:39
Руслан Густокашин
Студия Вэлпис
Руслан Густокашин

Зарегистрирован:
2012-02-06
Сообщений: 953

В вашем случае ошибки в другом. улыбка Вот правильный вариант тех самых двух строчек:
Код:

if ( $_FILES['f_File']['size'] > 0 ) $mailer->attachFile($DOCUMENT_ROOT.$f_File_url, $f_File_name, "application/octet-stream");
$mailer->send(($cc_settings[EmailTo] ? $cc_settings[EmailTo] : $system_env[SpamFromEmail]), $system_env[SpamFromEmail], $f_Email, 'ПИСЬМО С САЙТА adm-moskovsky.ru', $f_Name);

При этом в настройках системы, то есть в $system_env[SpamFromEmail] должен быть емайл с доменом, отправка с которого разрешена на вашем хостинге, то есть не мэйлрушная почта, не яндексовая и т.д. (иначе письма не будут отправляться из-за политик SPF).
Поля Name и Email в вашей форме должны быть обязательными для заполнения, иначе отправка тоже не произойдет.
Но аттач у вас не прикреплялся из-за того, что вы написали $f_File[name] вместо $f_File_name.

198 196 2017-06-22 07:39:46 14780
Описание проекта