Почему не работает форма отправки email?
Здравствуйте!
Я хочу добавить на страницу форму подписки, используя API Юнисендера.
Нашел, как использовать метод subscribe, подготовил обработчик. Но при отправке получаю ошибку HTTP ERROR 500.
Если составлять запрос вручную, то введенный адрес добавляется в список.
Вот форма:
<form action="subscribe.php" method="POST"> <input type="email" class="input" placeholder="Your Email Address" name="fields[email]" required autocomplete="off"> <button type="submit"> Subscribe Now </button> </form> |
<form action="subscribe.php" method="POST"> <input type="email" class="input" placeholder="Your Email Address" name="fields[email]" required autocomplete="off"> <button type="submit"> Subscribe Now </button> </form>
Вот код:
<?php require_once("unisenderapi.php"); $api_key = "тут ключ"; $uni = new UniSenderApi($api_key); $user_lists = "тут id списка"; $user_tag = urlencode("Added using API"); $POST = array ( 'api_key' => $api_key, 'list_ids' => $user_lists, 'fields[email]' => $user_email, 'double_optin' => 3, 'tags' => $user_tag ); $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $POST); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_URL, 'http://api.unisender.com/ru/api/subscribe?format=json'); $result = curl_exec($ch); if ($result) { $jsonObj = json_decode($result); if(null===$jsonObj) { echo "Invalid JSON"; } elseif(!empty($jsonObj->error)) { echo "An error occured: " . $jsonObj->error . "(code: " . $jsonObj->code . ")"; } else { echo "Added. ID is " . $jsonObj->result->person_id; } } else { echo "API access error"; } ?> |
<?php require_once("unisenderapi.php"); $api_key = "тут ключ"; $uni = new UniSenderApi($api_key); $user_lists = "тут id списка"; $user_tag = urlencode("Added using API"); $POST = array ( 'api_key' => $api_key, 'list_ids' => $user_lists, 'fields[email]' => $user_email, 'double_optin' => 3, 'tags' => $user_tag ); $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $POST); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_URL, 'http://api.unisender.com/ru/api/subscribe?format=json'); $result = curl_exec($ch); if ($result) { $jsonObj = json_decode($result); if(null===$jsonObj) { echo "Invalid JSON"; } elseif(!empty($jsonObj->error)) { echo "An error occured: " . $jsonObj->error . "(code: " . $jsonObj->code . ")"; } else { echo "Added. ID is " . $jsonObj->result->person_id; } } else { echo "API access error"; } ?>
Дополнительно:
Переменная $user_email не инициализирована ничем.
Я попробовал прописать $user_email = $_POST["email"]; но ошибка ERROR 500 остается
'fields[email]' => $user_email,
Что-то мне подсказывает, что вложенный массив не так собирается.
Вероятно, нужно:
'fields' => array('email' => $user_email),
У вас поле называется так name="fields[email]"
По такому же имени и ищите его в $_POST
$user_email = $_POST["fields"]["email"];
B вообще Error500 – это не ошибка php, это ошибка сервера.
Нужно включить отображение всех ошибок, и уже конкретно смотреть что у вас не так.
Ответы:
Берите POST-запрос составленный вручную, и POST-запрос составленный в скрипте, и ищите разницу.
Видимо из-за разницы и происходит ERROR 500.
Кстати, точно должно быть http://, не https:// ?
- Я криво выразился: работает вручную собранная ссылка с подставленными значениями, как у них в документации:
https://api.unisender.com/ru/api/subscribe?format=...
list_ids=134,135&fields[email]=test@example.org&tags=MyTag1,
MyTag2&double_optin=0&overwrite=0 - AlShest, осталось переделать пример из документации на POST, проверит его работоспособность, и сравнить с POST-запросом сами знаете откуда.
Вы в посте подмассив ручками составляете, пусть пхп сделает это за вас
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Есть несколько возможных причин, почему форма отправки email может не работать. Давайте рассмотрим их по порядку:
1. Проверьте правильность кода HTML: Убедитесь, что ваша форма имеет атрибуты "action" и "method" с правильными значениями. Атрибут "action" должен указывать на обработчик формы (например, PHP скрипт), который будет обрабатывать отправленные данные, а "method" должен быть установлен в "post" для отправки данных через POST-запрос.
<!-- Ваши поля формы здесь -->
2. Проверьте PHP скрипт для обработки формы: Убедитесь, что в вашем PHP скрипте для обработки формы нет ошибок. Проверьте, что вы правильно получаете данные из формы и отправляете их по электронной почте. Вот пример простого PHP скрипта для отправки email:
3. Проверьте настройки сервера: Убедитесь, что ваш хостинг поддерживает отправку email через PHP. Некоторые хостинг-провайдеры могут блокировать отправку email из безопасностных соображений. Обратитесь к своему хостинг-провайдеру, чтобы уточнить эту информацию.
Если после выполнения этих шагов форма отправки email по-прежнему не работает, попробуйте использовать специализированные библиотеки для отправки email (например, PHPMailer) или обратитесь за помощью к специалисту по веб-разработке.