gbreadman13
@gbreadman13
Фронтенд-кодер из Красноярска

Как настроить отправку через phpmailer?

Добрый день. На сайте wp сделал страницу заглушку www.stellaquint.com/maintenance.html и через нее пытаюсь отправить форму
<form id="form_id" method="post" action="/mail.php" onsubmit="javascript:return validate('form_id','email'); checkField();">
            <input type="text" id="email" name="email" placeholder="*YOUR E-MAIL">
            <textarea name="question" id="question" cols="30" rows="5" placeholder="*YOUR MESSAGE"></textarea>
            <input type="submit" onclick="checkField()"  value="SEND MESSAGE">
        </form>

Подключил phpmailer и настроил mail.php
<?php 

// ini_set("display_errors","1");
// ini_set("display_startup_errors","1");
// ini_set('error_reporting', E_ALL);

require_once('./phpmailer/PHPMailerAutoload.php');
$mail = new PHPMailer;
$mail->CharSet = 'utf-8';



$question = $_POST['question'];
$email = $_POST['email'];

$mail->SMTPDebug = 0;                               // Enable verbose debug output

$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp.mail.ru';  																							// Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = '***@mail.ru'; // Ваш логин от почты с которой будут отправляться письма
$mail->Password = '*****'; // Ваш пароль от почты с которой будут отправляться письма
$mail->SMTPSecure = 'tsl';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 465; // TCP port to connect to / этот порт может отличаться у других провайдеров

$mail->setFrom('***@mail.ru'); // от кого будет уходить письмо?
$mail->addAddress('***@gmail.com');     // Кому будет уходить письмо 
//$mail->addAddress('ellen@example.com');               // Name is optional
//$mail->addReplyTo('info@example.com', 'Information');
//$mail->addCC('cc@example.com');
//$mail->addBCC('bcc@example.com');
//$mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
//$mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name
$mail->isHTML(true);                                  // Set email format to HTML

$mail->Subject = 'Заявка с сайта';
$mail->Body    = '' .$email . ' задал вопрос <br> ' .$question;
$mail->AltBody = '';

if(!$mail->send()) {
    echo 'Error';
} else {
    // header('location: maintenance.html');
    echo 'Nice';
}
?>


Но письма не доходят даже до хоста. А страница просто обновляется. В чем дело?
  • Вопрос задан
  • 327 просмотров
Пригласить эксперта
Ответы на вопрос 2
gscraft
@gscraft
Программист, философ
Илья Филонов, давайте разберемся.

# Тут Вы говорите Apache, следующее (RewriteRule) правило при условии, если адрес не равен /maintenance.html :
RewriteCond %{REQUEST_URI} !/maintenance.html$
# Тут говорите, следующее правило при условии, если адрес не равен 171.33.255.61:
RewriteCond %{REMOTE_ADDR} !^171.33.255.61
# Тут обязываете Apache ВСЁ, что не подпадает под правила выше, переадресовать на /maintenance.html
RewriteRule $ /maintenance.html [R=302,L]


Apache-настройка переадресации в общем случае так и работает: условия, условия, правило; условия, еще условия, правило. После выполнения всех условий и правил Apache действует установленным образом для переадресации директории.

Вам нужно перенаправить все, кроме mail.php на заглушку, так?

1 вариант, это с помощью фронт-контроллера PHP, адресуя все на скрипт index.php стандартным для движка способом, в начале которого определять наличие $_POST / mail, и все, что кроме, отдавать на mainstance.html: header('Content-Type: text/html'); die(file_get_contents(__DIR__ . '/mainstance.html')); При этом, в htaccess у вас остаются стандартные правила (WP так и так адресует на index.php).

2 вариант, это оставить Вашу версию .htaccess, но добавить правило RewriteCond %{REMOTE_URI} !/mail.php$ (или RewriteCond %{REQUEST_FILENAME} !mail.php, тут уж пробуйте сами в Вашем контексте)

3 вариант, найти плагин для WordPress для заглушки mainstance, поверьте, такие решения там есть, как есть плагины для оправки формы контактов.
Ответ написан
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Раскомментируйте

// ini_set("display_errors","1");
// ini_set("display_startup_errors","1");
// ini_set('error_reporting', E_ALL);

И смотрите ошибки, и первым делом проверьте в консоли браузера идет ли отправка формы
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы