2015-06-22 5 views
0

Я пытаюсь создать контактную форму внизу страницы. Я использую PHPMailer и пытаюсь получать электронные письма в своей учетной записи gmail. Каждый раз, когда я отправляю форму, мой url изменяется на url/email.php, и я получаю пустую страницу. Что я делаю не так? Может ли кто-нибудь увидеть вопиющую ошибку, которой я, очевидно, не хватает?PHPMailer не отправляет электронное письмо через Gmail, возвращает пустую страницу

HTML:

<div class="container-fluid"> 
     <form action="email.php" id="contact-me" method="post" name="contact-me"> 
      <div class="row-fluid"> 
      <div class="form-group"> 
       <div class="col-md-3 col-md-offset-3"> 
       <input class="input" name="name" id="name" placeholder="Name" type="text"> 
       </div> 
       <div class="col-md-3"> 
       <input class="input" id="email" name="email" 
       placeholder="Email" type="text"> 
       </div> 
      </div> 
      </div> 
      <div class="form-group"> 
       <textarea class="input input-textarea" id="message" name="message" placeholder="Type your message here" rows= 
       "5"></textarea> 
      </div> 
      <input name="send" class="send" type="submit" value="Get In Touch"> 
     </form> 
    </div> 
</section> 

PHP:

<?php 
if (isset($_POST['submit'])) 
{ 
require('PHPMailer-master/PHPMailerAutoload.php'); 
require_once('PHPMailer-master/class.smtp.php'); 
include_once('PHPMailer-master/class.phpmail.php'); 

$name = strip_tags($_Post['name']); 
$email = strip_tags($_POST['email']); 
$msg = strip_tags($_POST['message']); 
$subject = "Message from Portfolio"; 

$mail = new PHPMailer(); 
$mail->isSMTP(); 
$mail->CharSet = 'UTF-8'; 
$mail->Host = 'smtp.gmail.com'; 
$mail->SMTPAuth = true; 
$mail->SMTPSecure = 'tls';        
$mail->Port = 587;  
$mail->Username = '[email protected]';  
$mail->Password = '***********'; 

$mail->From = $email; 
$mail->FromName = $name; 

$mail->AddAddress("me.com", "Katia Sittmann"); 
$mail->AddReplyTo($email, $name); 
$mail->isHTML(true); 

$mail->WordWrap = 50; 
$mail->Subject =$subject; 
$mail->Body = $msg; 
$mail->AltBody ="No message entered"; 

if(!$mail->send()) { 
    echo 'Message could not be sent.'; 
    echo 'Mailer Error: ' . $mail->ErrorInfo; 
    exit; 
}else{ 
    header("Location: thank-you.html"); 
} 
} 
?> 
+0

Вы используете 'isset()', который замаскирует любое уведомление о 'submit', не соответствующем поле формы' send'. – mario

+0

попробуйте использовать try catch и посмотрите, подскажет ли он вам что-нибудь –

+0

Итак, если я выберу isset(), я должен использовать что-то в этом месте? Я также попытался поймать попытку и ничего не нашел. Некоторое время сеть выдавала ошибку 500, но мне нужно было изменить порт, чтобы исправить это и сделали это. Все еще получаю пустую страницу и нет электронной почты. – user2832346

ответ

0

У вас есть некоторые очень запутанный код здесь. Вы должны начать с современного примера, а не из старого, и убедитесь, что используете последний PHPMailer (не менее 5.2.10).

Не делайте этого:

require('PHPMailer-master/PHPMailerAutoload.php'); 
require_once('PHPMailer-master/class.smtp.php'); 
include_once('PHPMailer-master/class.phpmail.php'); 

Все, что вам нужно это, который будет автоматически загружать другие классы, если и когда они необходимы:

require 'PHPMailer-master/PHPMailerAutoload.php'; 

Это не будет работать :

$name = strip_tags($_Post['name']); 

PHP переменные чувствительны к регистру, поэтому сделать это:

$name = strip_tags($_POST['name']); 

Это вызовет проблемы:

$mail->From = $email; 

Когда вы сделаете это, вы кузнечно адрес отправителя, и он будет получать отвергнутую SPF проверки. Поместите здесь свой собственный адрес и дайте ответу, чтобы нести адрес отправителя, как вы уже делаете.

Submit не может быть включен в представление, если форма не отправлена ​​через этот элемент управления, например. если он отправлен путем возврата в текстовый ввод. Проверьте поле, что вы знаете, всегда будет в представлении:

if (array_key_exists('email', $_POST)) {... 

Добавление TRY/поймать ничего не добьются - PHPMailer не бросать исключения, если вы спросите его, и вы не являетесь.

Вы нанесете strip_tags на тело, но затем позвоните $mail->isHTML(true); - вам нужен HTML или нет?

Все, что сказано, ни одна из этих вещей не приведет к пустой странице. Это довольно вероятно, что вы работаете с проблемами AUTH GMAIL, которые популярны в последнее время, и видеть, что вам необходимо включить отладочный вывод:

$mail->SMTPDebug = 2; 

, а затем read the troubleshooting guide на то, что вы видите.

+0

Мне удалось разобраться! Спасибо за помощь!Это действительно проблема с проблемой проверки подлинности Gmail! – user2832346

Смежные вопросы