2015-05-30 2 views
0

У меня есть контактная форма, которая позволяет пользователям загружать вложения. Это странно, потому что, когда я использую контактную форму, появляется сообщение об успешном завершении, но когда я проверяю свой адрес электронной почты, я не получаю ничего ни в папке «Я», ни в папке «Спам». Тем не менее, файлы, которые я прикрепляю к сообщению DO, отображаются в папке/upload, так что часть, кажется, работает правильно.Контактная форма говорит успешно, но не отправляет Email

Просто я не получаю никаких сообщений или чего-либо еще. Я не уверен, что случилось. Код будет вставлен ниже.

<? 



if($_SERVER['REQUEST_METHOD'] == "POST")  {                
$allowedExts = array("gif", "jpeg", "jpg", "png", "doc", "pdf", "docx", "jpg", "docx", "odt", "txt", "msg", "csv", "pps", "ppt", "pptx", "xml", "tar", "m4a", "mp3", "wav", "wma", "mp4", "mov", "flv", "exe"); 


for ($i = 1; $i <= 2; $i++) { 
$temp = explode(".", $_FILES["attach".$i]["name"]); 
$extension = end($temp); 
if (in_array($extension, $allowedExts)) { 
    move_uploaded_file($_FILES["attach".$i]["tmp_name"], 
    "upload/" .$_POST["firstname"]."-".$_FILES["attach".$i]["name"]); 
} 
} 

$to  = '[email protected]'; 
$subject = 'Consultation from '.$_POST["firstname"]; 
$message = $_POST["message"]."\n\n\n Attachments: ".$_FILES["attach1"]["firstname"]." ".$_FILES["attach2"]["firstname"]." ".$_FILES["attach3"]["firstname"]; 
    $firstname=$_REQUEST['firstname']; 
    $companyname=$_REQUEST['companyname']; 
    $email=$_REQUEST['email']; 

    if (($firstname=="")||($email=="")||($message=="")) 
    { 
    echo "<strong><p class =greentip>A first name, message, and email are required, please fill <a href=/consult.php>the form</a> again.</p></strong><br>"; 
    } 
    else{ 
    mail($to, $subject, $message, $firstname, $email); 
echo "<strong><p class = greentip>Your free consultation request has been received! Expect a detailed response within the next 3 hours.</p></strong>"; 
    } 
    } 
    ?> 

    <form action="" method="post" enctype="multipart/form-  data">      

<strong>First Name *</strong><br> 
<input name="firstname" type="text" value=""><br> 

<strong>Company Name </strong><br> 
<input name="companyname" type="text" value=""><br> 


<strong>Email *</strong><br> 
<input name="email" type="text" value=""<br> 

<strong>Your message *</strong><br> 
<textarea name="message" rows="7" cols="30" placeholder="In your query, include any and all revelant information pertaining to the nature of your writing request. The more specific you are in your request, the more complete we will be in our response!"></textarea><br> 

<strong>Attachments</strong><br> 

    <input name = "attach1" type="file" class="file" /> 

    <br> 

    <input name = "attach2" type="file" class="file" /> 

    <br><br> 
    <center><input type="submit" value="submit"></center> <br> 
    </form> 
+0

Вы работаете локально или на сервере? У вас установлен почтовый сервер? –

+0

Последний (пятый) параметр функции почты - это дополнительные параметры командной строки, http://php.net/manual/en/function.mail.php. Вы пытаетесь отправить там заголовок 'From'? Попробуйте поместить «mail» в условное выражение, чтобы вы могли подтвердить, что он терпит неудачу. – chris85

+0

Adndres, у меня нет установленного почтового сервера. Однако в другой моей контактной форме используется тот же код, но без вложений, и он отлично работает. – joshmoe123456

ответ

1

EDIT: Вы используете функцию mail() неправильно. Функция принимает:

mail($to, $subject, $message, $optional_headers, $optional_additional_params);

, как вы пытаетесь передать его $firstname и $email неправильно. Пожалуйста, see the docs.

================================================================================================================================================== =======================

Функция php mail() ОЧЕНЬ простая. Он возвращает логическое значение, указывающее на успех, но даже когда он возвращает true, существует много вещей, которые могли бы пойти не так, чтобы предотвратить доставку электронной почты, о которой mail() не будет знать.

По моему опыту, Gmail стал чрезвычайно разборчивым в получении электронных писем. Раньше было, что если у вас не было правильных заголовков, письмо просто приземлилось бы в папке спама, но в настоящее время я видел, как он менялся, когда Gmail просто не принимает письмо вообще.

Вы можете найти много информации об этом по googling что-то вроде «php mail для спама gmail», поскольку раньше было, что электронные письма по крайней мере попадали в папку спама. И, к сожалению, проблема сложнее, чем просто правильно настроить заголовки, ваша настройка сервера электронной почты и все, что с ней связано, также должны быть правы.

https://serverfault.com/questions/449244/php-mail-to-gmail-spam

sending email via php mail function goes to spam

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