PHP 在附加文件时不发送邮件



我已经搜索了这个网站,但我找不到与此相关的东西。如果有,请告诉我。

我的php分为两个部分,如果没有附件,则一个发送邮件(工作正常)

下一个应该附加文件并将其$msg与他们一起发送。但是,这不起作用。我将在此处包含完整的发送邮件 php。

    <?php
error_reporting(-1);
ini_set('display_errors', 'on');
  ini_set("SMTP", '');
  ini_set("smtp_port", "25");
  ini_set('sendmail_from','noreply@edomain');
if($_POST)
{
    $to_email       = "email here"; //Recipient email, Replace with own email here
    $from_email     = "noreply@domain"; //From email address (eg: no-reply@YOUR-DOMAIN.com)
    //check if its an ajax request, exit if not
    if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
        $output = json_encode(array( //create JSON data
            'type'=>'error',
            'text' => 'Sorry Request must be Ajax POST'
        ));
        die($output); //exit script outputting json data
    }
    //Sanitize input data using PHP filter_var().
    $user_name      = filter_var($_POST["user_name"], FILTER_SANITIZE_STRING);
    $user_email     = filter_var($_POST["user_email"], FILTER_SANITIZE_EMAIL);
    $country_code   = filter_var($_POST["country_code"], FILTER_SANITIZE_NUMBER_INT);
    $phone_number   = filter_var($_POST["phone_number"], FILTER_SANITIZE_NUMBER_INT);
    $subject        = filter_var($_POST["subject"], FILTER_SANITIZE_STRING);
    $message        = filter_var($_POST["msg"], FILTER_SANITIZE_STRING);
    //additional php validation
    if(strlen($user_name)<4){ // If length is less than 4 it will output JSON error.
        $output = json_encode(array('type'=>'error', 'text' => 'Name is too short or empty!'));
        die($output);
    }
    if(!filter_var($user_email, FILTER_VALIDATE_EMAIL)){ //email validation
        $output = json_encode(array('type'=>'error', 'text' => 'Please enter a valid email!'));
        die($output);
    }
    if(!filter_var($country_code, FILTER_VALIDATE_INT)){ //check for valid numbers in country code field
        $output = json_encode(array('type'=>'error', 'text' => 'Enter only digits in country code'));
        die($output);
    }
    if(!filter_var($phone_number, FILTER_SANITIZE_NUMBER_FLOAT)){ //check for valid numbers in phone number field
        $output = json_encode(array('type'=>'error', 'text' => 'Enter only digits in phone number'));
        die($output);
    }
    if(strlen($subject)<3){ //check emtpy subject
        $output = json_encode(array('type'=>'error', 'text' => 'Subject is required'));
        die($output);
    }
    if(strlen($message)<3){ //check emtpy message
        $output = json_encode(array('type'=>'error', 'text' => 'Too short message! Please enter something.'));
        die($output);
    }
    //email body
    $message_body = $message."rnrn".$user_name."rnEmail : ".$user_email."rnPhone Number : (".$country_code.") ". $phone_number ; 
    ### Attachment Preparation ###
    $file_attached = false;
    if(isset($_FILES['file_attach'])) //check uploaded file
    {
        //get file details we need
        $file_tmp_name    = $_FILES['file_attach']['tmp_name'];
        $file_name        = $_FILES['file_attach']['name'];
        $file_size        = $_FILES['file_attach']['size'];
        $file_type        = $_FILES['file_attach']['type'];
        $file_error       = $_FILES['file_attach']['error'];
        //exit script and output error if we encounter any
        if($file_error>0)
        {
            $mymsg = array( 
            1=>"The uploaded file exceeds the upload_max_filesize directive in php.ini", 
            2=>"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form", 
            3=>"The uploaded file was only partially uploaded", 
            4=>"No file was uploaded", 
            6=>"Missing a temporary folder" ); 
            $output = json_encode(array('type'=>'error', 'text' => $mymsg[$file_error]));
            die($output); 
        }
        //read from the uploaded file & base64_encode content for the mail
        $handle = fopen($file_tmp_name, "r");
        $content = fread($handle, $file_size);
        fclose($handle);
        $encoded_content = chunk_split(base64_encode($content));
        //now we know we have the file for attachment, set $file_attached to true
        $file_attached = true;
    }
    if($file_attached) //continue if we have the file
    {
        # Mail headers should work with most clients
        $headers = "MIME-Version: 1.0rn";
        $headers = "X-Mailer: PHP/" . phpversion()."rn";
        $headers .= "From: ".$from_email."rn";
        $headers .= "Subject: ".$subject."rn";
        $headers .= "Reply-To: ".$user_email."" . "rn";
        $headers .= "Content-Type: multipart/mixed; boundary=".md5('boundary1')."rnrn";
        $headers .= "--".md5('boundary1')."rn";
        $headers .= "Content-Type: multipart/alternative;  boundary=".md5('boundary2')."rnrn";
        $headers .= "--".md5('boundary2')."rn";
        $headers .= "Content-Type: text/plain; charset=utf-8rnrn";
        $headers .= $message_body."rnrn";
        $headers .= $obj."rnrn";
        $headers .= $product_code."rnrn";
        $headers .= $cart_itm."rnrn";
        $headers .= $total."rnrn";
        $headers .= "--".md5('boundary2')."--rn";
        $headers .= "--".md5('boundary1')."rn";
        $headers .= "Content-Type:  ".$file_type."; ";
        $headers .= "name="".$file_name.""rn";
        $headers .= "Content-Transfer-Encoding:base64rn";
        $headers .= "Content-Disposition:attachment; ";
        $headers .= "filename="".$file_name.""rn";
        $headers .= "X-Attachment-Id:".rand(1000,9000)."rnrn";
        $headers .= $encoded_content."rn";
        $headers .= "--".md5('boundary1')."--";
    }else{
        //proceed with PHP email.
        $headers = 'From: '.$user_name.'' . "rn" .
        'Reply-To: '.$user_email.'' . "rn" .
        'X-Mailer: PHP/' . phpversion();
    }
    $send_mail = mail($to_email, $subject, $message_body, $headers);
    if(!$send_mail)
    {
        //If mail couldn't be sent output error. Check your PHP email configuration (if it ever happens)
        $output = json_encode(array('type'=>'error', 'text' => 'Could not send mail! Please check your PHP mail configuration.'));
        die($output);
    }else{
        $output = json_encode(array('type'=>'message', 'text' => 'Hi '.$user_name .' Thank you for your email'));
        die($output);
    }
}
?>

HTML 和 JS

<label><span>Name <span class="required">*</span></span>
            <input type="text" name="name" id="name" required class="input-field"/>
        </label>
        <label><span>Email <span class="required">*</span></span>
            <input type="email" name="email" required class="input-field"/>
        </label>
        <label><span>Phone <span class="required">*</span></span>
            <input type="text" name="phone1" maxlength="4" placeholder="+91"  required="true" class="tel-number-field"/>&mdash;<input type="text" name="phone2" maxlength="15"  required="true" class="tel-number-field long" />
        </label>
        <label><span>Attachment</span>
            <input type="file" name="file_attach" class="input-field" />
        </label>
            <label for="subject"><span>Please select</span>
            <select name="subject" class="select-field">
            <option value="Order Paid">Order Paid</option>
            <option value="Awaiting Payment">Order Awaiting Payment</option>
            </select>
        </label>
        <label for="field5"><span>Delivery Address <span class="required">*</span></span>
            <textarea name="message" id="message" class="textarea-field" required></textarea>
        </label>
        <label>
            <span class="loader"></span><input type="submit" id="submit_btn" value="Submit" />
        </label>
<script type="text/javascript">
$(document).ready(function() {
   $("#submit_btn").click(function(){
$(".loader").html('<img src="images/ajax-loader.gif" />');
        var proceed = true;
        //simple validation at client's end
        //loop through each field and we simply change border color to red for invalid fields       
        $("#contact_form input[required=true], #contact_form textarea[required=true]").each(function(){
            $(this).css('border-color',''); 
            if(!$.trim($(this).val())){ //if this field is empty 
                $(this).css('border-color','red'); //change border color to red   
                proceed = false; //set do not proceed flag
            }
            //check invalid email
            var email_reg = /^([w-.]+@([w-]+.)+[w-]{2,4})?$/; 
            if($(this).attr("type")=="email" && !email_reg.test($.trim($(this).val()))){
                $(this).css('border-color','red'); //change border color to red   
                proceed = false; //set do not proceed flag              
            }   
        });
        if(proceed) //everything looks good! proceed...
        {
           //data to be sent to server         
            var m_data = new FormData();    
            m_data.append( 'user_name', $('input[name=name]').val());
            m_data.append( 'user_email', $('input[name=email]').val());
            m_data.append( 'country_code', $('input[name=phone1]').val());
            m_data.append( 'phone_number', $('input[name=phone2]').val());
            m_data.append( 'subject', $('select[name=subject]').val());
            m_data.append( 'msg', $('textarea[name=message]').val());
            m_data.append( 'file_attach', $('input[name=file_attach]')[0].files[0]);
            //instead of $.post() we are using $.ajax()
            //that's because $.ajax() has more options and flexibly.
            $.ajax({
              url: 'contact_me.php',
              data: m_data,
              processData: false,
              contentType: false,
              type: 'POST',
              dataType:'json',
              success: function(response){    
                  $(".loader").html("");
                 //load json data from server and output message     
                if(response.type == 'error'){ //load json data from server and output message     
                    output = '<div class="error">'+response.text+'</div>';
                  $(".loader").html("");
                }else{
                    output = '<div class="success">'+response.text+'</div>';
                }
                $("#contact_form #contact_results").hide().html(output).slideDown();
                $(".loader").html("");
              }
            });

        }
    });
    //reset previously set border colors and hide all message on .keyup()
    $("#contact_form  input[required=true], #contact_form textarea[required=true]").keyup(function() { 
        $(this).css('border-color',''); 
        $("#result").slideUp();
    });
});
</script>

我有一个想法,它与$FILES和$POST有关,但无法正确处理

您的代码存在语法错误:

 if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
        $output = json_encode(array( //create JSON data
            'type'=>'error',
            'text' => 'Sorry Request must be Ajax POST'
        ));
        die($output); //exit script outputting json data
    }

请参阅输出阵列中开机自检后面的 '。

相关内容

  • 没有找到相关文章

最新更新