Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
附加文件时,PHP不发送邮件_Php_Email_Email Attachments - Fatal编程技术网

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

附加文件时,PHP不发送邮件,php,email,email-attachments,Php,Email,Email Attachments,我已经搜索了这个网站,但我找不到与此相关的东西。如果有,请指给我看 我的php分为两个部分,一个是在没有附件的情况下发送邮件(工作正常) 下一个应该附加文件并将其与$msg一起发送。然而,这是行不通的。我将在这里包括完整的发送邮件php <?php error_reporting(-1); ini_set('display_errors', 'on'); ini_set("SMTP", '\'); ini_set("smtp_port", "25"); ini_set

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

我的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."\r\n\r\n".$user_name."\r\nEmail : ".$user_email."\r\nPhone 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.0\r\n";
        $headers = "X-Mailer: PHP/" . phpversion()."\r\n";
        $headers .= "From: ".$from_email."\r\n";
        $headers .= "Subject: ".$subject."\r\n";
        $headers .= "Reply-To: ".$user_email."" . "\r\n";
        $headers .= "Content-Type: multipart/mixed; boundary=".md5('boundary1')."\r\n\r\n";

        $headers .= "--".md5('boundary1')."\r\n";
        $headers .= "Content-Type: multipart/alternative;  boundary=".md5('boundary2')."\r\n\r\n";

        $headers .= "--".md5('boundary2')."\r\n";
        $headers .= "Content-Type: text/plain; charset=utf-8\r\n\r\n";
        $headers .= $message_body."\r\n\r\n";
        $headers .= $obj."\r\n\r\n";
        $headers .= $product_code."\r\n\r\n";
        $headers .= $cart_itm."\r\n\r\n";
        $headers .= $total."\r\n\r\n";

        $headers .= "--".md5('boundary2')."--\r\n";
        $headers .= "--".md5('boundary1')."\r\n";
        $headers .= "Content-Type:  ".$file_type."; ";
        $headers .= "name=\"".$file_name."\"\r\n";
        $headers .= "Content-Transfer-Encoding:base64\r\n";
        $headers .= "Content-Disposition:attachment; ";
        $headers .= "filename=\"".$file_name."\"\r\n";
        $headers .= "X-Attachment-Id:".rand(1000,9000)."\r\n\r\n";
        $headers .= $encoded_content."\r\n";
        $headers .= "--".md5('boundary1')."--";
    }else{
        //proceed with PHP email.
        $headers = 'From: '.$user_name.'' . "\r\n" .
        'Reply-To: '.$user_email.'' . "\r\n" .
        '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);
    }
}
?>
“错误”,“文本”=>“无法发送邮件!请检查您的PHP邮件配置。“);
模具(产量);
}否则{
$output=json_encode(数组('type'=>'message','text'=>'Hi'.$user_name.'感谢您的电子邮件');
模具(产量);
}
}
?>
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>
名称*
电子邮件*
电话*
&mdash;
附件
请选择
订单已付
等待付款的订单
送货地址*
$(文档).ready(函数(){
$(“#提交”_btn”)。单击(函数(){
$(“.loader”).html(“”);
var=true;
//客户端的简单验证
//循环遍历每个字段,我们只需将无效字段的边框颜色更改为红色
$(“#联系人#表单输入[required=true],#联系人#表单文本区域[required=true])。每个(函数(){
$(this.css('border-color','');
if(!$.trim($(this.val()){//如果此字段为空
$(this.css('border-color','red');//将边框颜色更改为红色
继续=false;//设置不继续标志
}
//检查无效电子邮件
var email\u reg=/^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
if($(this.attr(“type”)==“email”&&!email注册测试($.trim($(this.val())){
$(this.css('border-color','red');//将边框颜色更改为红色
继续=false;//设置不继续标志
}   
});
如果(继续)//一切看起来都很好!继续。。。
{
//要发送到服务器的数据
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]);
//我们使用的不是$.post(),而是$.ajax()
//这是因为$.ajax()具有更多的选项和灵活性。
$.ajax({
url:“contact_me.php”,
数据:m_数据,
processData:false,
contentType:false,
键入:“POST”,
数据类型:'json',
成功:功能(响应){
$(“.loader”).html(“”);
//从服务器加载json数据并输出消息
if(response.type=='error'){//从服务器加载json数据并输出消息
输出=''+响应。文本+'';
$(“.loader”).html(“”);
}否则{
输出=''+响应。文本+'';
}
$(“#联系形式#联系结果”).hide().html(输出).slideDown();
$(“.loader”).html(“”);
}
});
}
});
//重置以前设置的边框颜色并隐藏.keyup()上的所有消息
$(“#contact#u form input[required=true],#contact#u form textarea[required=true]”).keyup(function(){
$(this.css('border-color','');
$(“#结果”).slideUp();
});
});

我有一个想法,它与$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
    }

请参阅输出数组中的“behind POST”。

您的代码中有错误,堆栈的语法高亮显示显示了这一点,我无法发现它。现在,您的表单是否包含正确的enctype?你的表单没有发布。这很奇怪,我在dreamweaver中没有发现任何语法错误。我将根据您的编辑编辑文章并添加重新列表,我没有看到任何表单标签。它需要有一个post方法和附加文件时需要的
enctype=“multipart/form data”
。您指的是$headers。=“内容类型:multipart/mixed;boundary=“.md5('boundary1')。”\r\n\r\n”;$headers.=“--”.md5('boundary1')。“\r\n”;$headers.=“内容类型:多部分/可选;边界=“.md5('boundary2')。”\r\n\r\n”<代码>东西在哪里?谢谢,我在那里添加了,但它仍然保持加载,不发送邮件