AjaxForm не отправляет письмо

3 окт. 2015 г., 10:38

AjaxForm не отправляет письмо

В блоге Песочница

Всем привет!
Прошу помощи: на сайте создал всплывающее окно, открывающееся по кнопке, с заказом обратного звонка, всё как обычно, реализовано с помощью ajaxform, вот код вывода сниппета:
[[AjaxForm? &snippet=`FormIt` &form=`tpl.AjaxForm` &emailTpl=`sentEmailTpl` &emailSubject=`Тестовое сообщение` &emailTo=`mm@yandex.ru` &successMessage=`Сообщение успешно отправлено` &validate=`name:required,email:required ` &validationErrorMessage=`В форме содержатся ошибки!` ]]
вот чанк tpl.AjaxForm:
<h2>ЗАКАЗАТЬ ЗВОНОК</h2> <form id="contact" name="contact" action="" method="post" class="ajax_form"> <label class="control-label" for="af_name">[[%af_label_name]]</label> <input type="text" id="af_name" name="name" value="[[+fi.name]]" placeholder="" class="span4" /><br /> <span class="error_name">[[+fi.error.name]]</span> <label class="control-label" for="af_email">[[%af_label_email]]</label> <input type="email" id="af_email" name="email" value="[[+fi.email]]" placeholder="" class="span4" /><br /> <span class="error_email">[[+fi.error.email]]</span> <button type="submit" class="btn btn-primary">[[%af_submit]]</button> [[+fi.success:is=`1`:then=` <div class="alert alert-success">[[+fi.successMessage]]</div> `]] [[+fi.validation_error:is=`1`:then=` <div class="alert alert-danger">[[+fi.validation_error_message]]</div> `]] </form>
вот чанк sentEmailTpl:
[[+name]] <br /> [[+email]] <br /> [[+message]]
Всё валидируется, пишет, что письмо отправлено, но на почту ничего не приходит! Друзья, проверьте, пожалуйста, код, возможно у меня уже глаз замылился и я не вижу простейшей ошибки? Подскажите, в какую сторону можно копать?
Ещё момент: на сайте реализован отдельный php-скрипт отправки почты — он работает без проблем… возможно, необходимо покопаться в настройках formIt или ajaxForm, просто я не смог найти нужных параметров…
разумеется, почту забил правильно — тысячу раз проверил!)))
Подскажите, пожалуйста, буду очень признателен!
Может все-таки не кешируемым сниппет прописать? [[!AjaxForm… А так подобные вещи уже обсуждались не раз здесь, мы AjaxForm не используем, а используем form-процессор.
Николай, благодарю за оперативный ответ! К сожалению, не помогло...(
Мне кажется, что тут сам formIt не отрабатывает… просто не догоняю, как это можно проверить!
Судя по тому, что страница выводит «Внимание! Телефон может содержать только цифры.», все-таки сам сниппет отрабатывает. Скорее всего просто с сайта почта на отправляется. Поставьте Console и проверьте в принципе отправку почты, выполнив два отдельных кода: 1. Просто через функцию mail()
print (int)mail('test@some.host', 'subject', 'message');
2. Через MODX:
print (int)$modx->user->sendEmail('message');
Желательно, чтобы оба варианта вернули 1. Просто есть подозрение, что ваш сервер просто не отправляет почту.
В остальном, я вам больше ничем не помогу. Там так все замучено (AjaxForm использует еще FormIt, в итоге отлаживать надо и то и другое), что даже я, потратив 15 минут, не смог получить вменяемого результата. Все-таки процессоры прозрачней, там отладка лучше.
Спасибо, Николай, буду копать!))
Если еще актуально. Нахожу вашу проблему похожей на мое приключение В вызове сниппета добавьте добавьте хук «email».
&hooks=`email`
Не знаю, ответит ли кто-то нибудь мне здесь или нет. Выполнил в консоли 2 команды, вернули 1, только после второй не пришло письмо (интересно, на какой адрес оно отправилось?)
У меня стоит в ajaxform &hooks=`email`, но письмо всё равно не приходит. Пробовал отдельно formit делать, письмо приходит, но хотелось бы без перезагрузки страницы через ajaxform запустить.
У меня на другом сайте письма отправляются нормально через ajaxform, при том, что оба сайта на одном сервере находятся.
vladim-filip, дайте хоть на код взглянуть))) Какой вызов сниппета, какой чанк? И что значит: "вернули один"?
Николай выше писал:
" Поставьте Console и проверьте в принципе отправку почты, выполнив два отдельных кода: 1. Просто через функцию mail()
print (int)mail('test@some.host', 'subject', 'message');
2. Через MODX:
print (int)$modx->user->sendEmail('message');
Желательно, чтобы оба варианта вернули 1."
Вот тут у меня возвращается 1 в обоих вариантах.

Вот код вызова сниппета:

[[!AjaxForm? &snippet=`FormIt` &form=`vogelCallbackFormTpl` &hooks=`spam,FormItSaveForm,email` &formName=`Обратный звонок` &formFields=`name,phone` &fieldNames=`name==Имя,phone==Телефон` &emailSubject=`Заявка на обратный звонок с сайта SiteName` &emailTo=`myemail@email.ru` &emailBCC=`myemail@yandex.ru` &emailFrom=`info@site.ru` &emailFromName=`SiteName` &emailTpl=`vogelCallbackMailTpl` &customValidators=`isCaptchaValid` &validate=`name:required:minLength=^1^:maxLength=^30^,phone:required:minLength=^7^:maxLength=^20^,pers_data:required,captcha1:isCaptchaValid` &validationErrorMessage=`Пожалуйста, исправьте ошибки!` ]]
Вот код формы vogelCallbackFormTpl:

<div class="callback-header"> <a href="#" class="callback-close" onclick=""></a> </div> <div class="callback-body"> <form action="" method="post" class="ajax_form af_example callback_form" id="callback_form" enctype="multipart/form-data" role="form"> <div class="form-group"> <div class="controls"> <label for="cb_name">Ваше имя *</label> <input type="text" minlength="1" maxlength="30" id="cb_name" name="name" value="[[+fi.name]]" class="form-control cb_name" required="required" /> <span class="error_name">[[+fi.error.name]]</span> </div> </div> <div class="form-group"> <div class="controls"> <label for="cb_phone">Телефон *</label> <input type="text" id="cb_phone" name="phone" value="[[+fi.phone]]" autocomplete="tel-national" class="form-control cb_phone" oninput="this.value=this.value.replace(/[^0-9-+()]/g,'');" minlength="7" maxlength="20" required="required" /> <span class="error_phone">[[+fi.error.phone]]</span> </div> </div> <div class="form-group controls captcha1"> <img class="img-captcha1" src="/assets/captcha/captcha1.php?rnd=[[!RandomNumber]]" data-src="/assets/captcha/captcha1.php" width="120" style="display:inline-block;"> <span class="refresh-captcha1-icon"></span> <input id="captcha" name="captcha" type="text" placeholder="Введите код" class="form-control captcha1-input" required="required" value="" minlength="3" maxlength="3" autocomplete="off" oninput="this.value=this.value.replace(/[^0-9-+()]/g,'');"> </div> <div class="error_captcha_div"> <span class="error_captcha"></span> </div> <div class="form-group"> <div class="controls"> <input type="checkbox" name="pers_data" required="required" id="pers_data"> <label for="pers_data" class="pers_label">Согласен на обработку персональных данных</label> <span class="error_pers_data"></span> </div> </div> <p class="pers_comment">Ставя отметку, я даю свое согласие на обработку моих персональных данных в соответствии с законом №152-ФЗ «О персональных данных» от 27.07.2006</p> <div class="form-group"> <div class="controls"> <input type="submit" class="btn btn-red cb_submit" id="cb_submit_button" value="Перезвоните мне" /> </div> </div> [[+fi.validation_error:is=`1`:then=` <div class="alert alert-danger">[[+fi.validation_error_message]]</div> `]] </form> <div class="cb_success_mess"> Ваше сообщение отправлено!<br/>В ближайшее время с Вами свяжется менеджер. </div> <div class="callback_footer"> </div> </div>


Ё-моё. Разобрался. У меня в &validate идёт поле captcha1, а в форме captcha просто называется. Теперь всё работает.

Добавить комментарий