2017-03-08 1 views
0

Ich kann nicht herausfinden, wo das Problem herkommt! Die Mail() funktioniert perfekt (ich habe es bereits mit einer einfachen PHP-Datei getestet), aber mein Formular sendet keine E-Mail!HTML-Formular mit Sendemail

HTML

<section id="contact"> 
    <div id="google-map" class="wow fadeIn" data-latitude="35.7777622" data-longitude="10.8285004" data-wow-duration="1000ms" data-wow-delay="400ms"></div> 
    <div id="contact-us" class="parallax"> 
     <div class="container"> 
     <div class="row"> 
      <div class="heading text-center col-sm-8 col-sm-offset-2 wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms"> 
      <h2>Contact</h2> 
      <p>Send a message</p> 
      </div> 
     </div> 
     <div class="contact-form wow fadeIn" data-wow-duration="1000ms" data-wow-delay="600ms"> 
      <div class="row"> 
      <div class="col-sm-6"> 
       <form id="main-contact-form" name="contact-form" method="post" action="sendemail.php"> 
       <div class="row wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms"> 
        <div class="col-sm-6"> 
        <div class="form-group"> 
         <input type="text" name="name" class="form-control" placeholder="Name" required="required"> 
        </div> 
        </div> 
        <div class="col-sm-6"> 
        <div class="form-group"> 
         <input type="email" name="email" class="form-control" placeholder="Email" required="required"> 
        </div> 
        </div> 
       </div> 
       <div class="form-group"> 
        <input type="text" name="subject" class="form-control" placeholder="Sub" required="required"> 
       </div> 
       <div class="form-group"> 
        <textarea name="message" id="message" class="form-control" rows="4" placeholder="Type your message" required="required"></textarea> 
       </div>       
       <div class="form-group"> 
        <button type="submit" class="btn-submit">Send</button> 
       </div> 
       </form> 
      </div> 
      <div class="col-sm-6">       
      </div> 
      </div> 
     </div> 
     </div> 
    </div>   
    </section><!--/#contact--> 

main.js

// Contact form 
var form = $('#main-contact-form'); 
form.submit(function(event){ 
    event.preventDefault(); 
    var form_status = $('<div class="form_status"></div>'); 
    $.ajax({ 
     url: $(this).attr('action'), 
     beforeSend: function(){ 
      form.prepend(form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Progress...</p>').fadeIn()); 
     } 
    }).done(function(data){ 
     form_status.html('<p class="text-success">Thanks for your message</p>').delay(3000).fadeOut(); 
    }); 
}); 

mailsenden.php

<?php 
$name  = @trim(stripslashes($_POST['name'])); 
$from  = @trim(stripslashes($_POST['email'])); 
$subject = @trim(stripslashes($_POST['subject'])); 
$message = @trim(stripslashes($_POST['message'])); 
$to   = '[email protected]'; 

$headers = array(); 
$headers[] = "MIME-Version: 1.0"; 
$headers[] = "Content-type: text/plain; charset=iso-8859-1"; 
$headers[] = "From: {$name} <{$from}>"; 
$headers[] = "Reply-To: <{$from}>"; 
$headers[] = "Subject: {$subject}"; 
$headers[] = "X-Mailer: PHP/".phpversion(); 

mail($to, $subject, $message, $headers); 

die; 

Könnten Sie mir bitte helfen, das Problem herauszufinden? Wenn ich eine einfache Mail ('[email protected] ',' Mein Betreff ',' Nachricht ') an die sendemail.php-Datei anfüge, erhalte ich jedes Mal, wenn das Formular gesendet wird, eine E-Mail! Aber ich bekomme nie die Mail ($ zu, $ Betreff, $ Nachricht, $ Header);

Vielen Dank

+0

Verwenden Sie den Fehlerunterdrückungsoperator (@) nicht, da er Fehlermeldungen ausblendet, die beim Debuggen Ihres Codes hilfreich sein können. Sie sollten Ihren Code auch immer schreiben, damit er keine PHP-Fehler einschließlich Benachrichtigungen erzeugt. –

Antwort

0

Ich denke Headers ein String sein muss.

$headers = ''; 
$headers .= "MIME-Version: 1.0\r\n"; 
$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n"; 
$headers .= "From: {$name} <{$from}>\r\n"; 
$headers .= "Reply-To: <{$from}>\r\n"; 
$headers .= "Subject: {$subject}\r\n"; 
$headers .= "X-Mailer: PHP/".phpversion() . "\r\n"; 

http://php.net/manual/en/function.mail.php

Sie sollten auch ich denke, $ _POST

http://php.net/manual/en/function.filter-input.php

filtern Sie müssen auch Anfrage die Daten über den Ajax senden.

$.ajax({ 
    url: $(this).attr('action'), 
    type: "POST", 
    data: $(this).serialize(), 
+0

Vielen Dank! Aber leider bekomme ich E-Mails, aber leere E-Mails, ich habe versucht, Ihre Ajax-Anfrage, aber es ist immer noch das Gleiche! – ThibaudJ

1

Sie spoofing den From-Header auf der Grundlage der Benutzereingabe. Tu das nicht. Der From-Header einer E-Mail-Nachricht muss den Absender der E-Mail-Nachricht korrekt darstellen. Wenn Sie einen anderen Wert in diesen Header einfügen, lehnen viele Mail-Server Ihre E-Mails ab oder kennzeichnen sie als Spam, da die resultierende Nachricht fehlschlägt SPF und/oder DMARC überprüft.

Verwenden Sie eine From-Kopfzeile, die die Quelle der Nachricht genau darstellt. Wenn Ihre Website z. B. example.com lautet, legen Sie den Von-Header als From: [email protected] fest. Fügen Sie die E-Mail-Adresse und den Namen, die vom Benutzer festgelegt wurden, entweder in den Nachrichtentext oder in eine Kopfzeile Reply-To ein.

+0

Vielen Dank, das funktioniert! Jetzt erhalte ich die E-Mail, aber leider erhalte ich eine leere Nachricht und einen leeren Betreff (obwohl ich sicher bin, dass ich einen hinzugefügt habe). Irgendwelche Ideen? – ThibaudJ

Verwandte Themen