简体   繁体   中英

PHP contact form not sending emails

I downloaded a template for my website.
The template comes with a contact form that should work.

There is my MailHandler.php file (in French) :

<?php
    $owner_email='david.lobstein@gmail.com';
    //SMTP server settings
    $host = '';
    $port = '465';//"587";
    $username = '';
    $password = '';

    $subject='Vous avez reçu un message depuis le formulaire de contact de votre site ';
    $user_email='';
    $message_body='';
    $message_type='html';

    $max_file_size=50;//MB
    $file_types='/(doc|docx|txt|pdf|zip|rar)$/';
    $error_text='Quelque chose cest mal passe';
    $error_text_filesize='File size must be less than';
    $error_text_filetype='Failed to upload file. This file type is not allowed. Accepted files types: doc, docx, txt, pdf, zip, rar.';

    $private_recaptcha_key='6LeZwukSAAAAACmqrbLmdpvdhC68NLB1c9EA5vzU'; //localhost


    $use_recaptcha=isset( $_POST["recaptcha_challenge_field"]) and isset($_POST["recaptcha_response_field"]);
    $use_smtp=($host=='' or $username=='' or $password=='');
    $max_file_size*=1048576;

    if($owner_email=='' || $owner_email=='#'){
        die('Attention, recipient e-mail is not set! Please define "owner_email" variable in the MailHanlder.php file.');
    }

    if(preg_match('/^(127\.|192\.168\.)/',$_SERVER['REMOTE_ADDR'])){
        die('Attention, contact form will not work locally! Please upload your template to a live hosting server.');
    }

    if($use_recaptcha){
        require_once('recaptchalib.php');
        $resp = recaptcha_check_answer ($private_recaptcha_key,$_SERVER["REMOTE_ADDR"],$_POST["recaptcha_challenge_field"],$_POST["recaptcha_response_field"]);
        if (!$resp->is_valid){
            die ('wrong captcha');
        }
    }

    if(isset($_POST['name']) and $_POST['name'] != ''){$message_body .= '<p>Visitor: ' . $_POST['name'] . '</p>' . "\n" . '<br>' . "\n"; $subject.=$_POST['name'];}
    if(isset($_POST['email']) and $_POST['email'] != ''){$message_body .= '<p>Email Address: ' . $_POST['email'] . '</p>' . "\n" . '<br>' . "\n"; $user_email=$_POST['email'];}
    if(isset($_POST['state']) and $_POST['state'] != ''){$message_body .= '<p>State: ' . $_POST['state'] . '</p>' . "\n" . '<br>' . "\n";}
    if(isset($_POST['phone']) and $_POST['phone'] != ''){$message_body .= '<p>Phone Number: ' . $_POST['phone'] . '</p>' . "\n" . '<br>' . "\n";}
    if(isset($_POST['fax']) and $_POST['fax'] != ''){$message_body .= '<p>Fax Number: ' . $_POST['fax'] . '</p>' . "\n" . '<br>' . "\n";}
    if(isset($_POST['message']) and $_POST['message'] != ''){$message_body .= '<p>Message: ' . $_POST['message'] . '</p>' . "\n";}
    if(isset($_POST['stripHTML']) and $_POST['stripHTML']=='true'){$message_body = strip_tags($message_body);$message_type='text';}

try{
    include "libmail.php";
    $m= new Mail("utf-8");
    $m->From($user_email);
    $m->To($owner_email);
    $m->Subject($subject);
    $m->Body($message_body,$message_type);
    //$m->log_on(true);

    if(isset($_FILES['attachment'])){
        if($_FILES['attachment']['size']>$max_file_size){
            $error_text=$error_text_filesize . ' ' . $max_file_size . 'bytes';
            die($error_text);
        }else{
            if(preg_match($file_types,$_FILES['attachment']['name'])){
                $m->Attach($_FILES['attachment']['tmp_name'],$_FILES['attachment']['name'],'','attachment');
            }else{
                $error_text=$error_text_filetype;
                die($error_text);
            }
        }
    }
    if(!$use_smtp){
        $m->smtp_on( $host, $username, $password, $port);
    }

    if($m->Send()){
        die('success');
    }

}catch(Exception $mail){
    die($mail);
}
?>

When I send a mail from the contact form, it shows me that it should have been sent because of the pop-up "Success !". But I never received any mails.

Actually you should be able to use Gmail. It is just really slow. Use

//SMTP server settings
$host = 'tls://smtp.gmail.com';
$port = '587';
$username = 'david.lobstein@gmail.com';
$password = 'your_password';

Make sure your mail library is using smtp. Else use phpmailer as others suggested with the above settings.

You cannot use your gmail email as sender email $owner_email='david.lobstein@gmail.com';

Either your sender email or recipient email should be an email that is configured on your website's mail server or cPanel .

Due to security reasons, most hosting service providers do not allow this thing.

Change it to an email address which is configured on your website's mail server, it should work then.

If you want to send email, you should download PHPMailer and write this code

//in localhost
 require("phpmailer/AutoloadPHPMailer");    

$mail=new PHPMailer(true);
$mail->IsSMTP();
if(isset($_POST["btn"]))
{
    try
    {
        $mail->Host='__host addres__';
        $mail->SMTPAuth=true;
        $mail->SMTPSecure="ssl";
        $mail->Port=465;
        $mail->Username="__User Name__";
        $mail->Password="__Password__";
        $mail->AddAddress($_POST["to"]);
        $mail->SetFrom("__From__","__Name__");
        $mail->Subject=$_POST["subject"];
        $mail->CharSet="UTF-8";
        $mail->ContentType="text/htm";
        $mail->MsgHTML($_POST["content"]);
        $mail->Send();
        echo '<font color="#00CC00" size="2" face="tahoma">email send</font>';
    }
    catch(phpmailerException $e)
    {
        echo $e->errorMessage();
    }
    catch(Exception $e)
    {
        echo $e->getMessage();
    }
}

And this is Html code

<form id="form" action="" method="post" style="border:2px solid #03F;width:350px;margin-left:400px;">
<table width="400" >
  <tr>
    <td style="text-align: center">To:</td>
    <td><input type="text" name="to" id="to" style="border:2px solid #060"></td>
  </tr>
  <tr>
    <td style="text-align: center">Subject:</td>
    <td><input type="text" name="subject" id="subject" style="border:2px solid #060"></td>
  </tr>
  <tr>
    <td style="text-align: center">Content</td>
    <td><textarea name="content" cols="30" rows="5" id="content" style="border:2px solid #060"></textarea></td>
  </tr>
  <tr>
    <td colspan="2"><input type="submit" name="btn" id="btn" value="SEND"></td>
  </tr>
</table>
</form>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM