带有附件的php联系表单不发送没有文件

时间:2017-05-10 07:33:53

标签: php sendmail contact-form

对不起家伙我对PHP很新,可能显然很容易:
我有一个带附件的联系表单,但是当我尝试发送没有附件的时候,它没有发送,但我的错误信息出现了。我不确定如何能够使用和不使用附件发送。这是我的基本代码

if(isset($_POST) && !empty($_POST)) {

// catch spam bots which never loaded contact form
if (!isset($_POST["p3"]) || $_POST["p3"] != "sometext") {  
    header("Location: contactform.php");
    exit;  
}  

// check whether the POST method was used
if ("POST" != getenv("REQUEST_METHOD")) {  
    header("Location: contactform.php");
    exit;  
} 

// check for user-agent and http-referer
if ("" == getenv("HTTP_USER_AGENT") || "" == getenv("HTTP_REFERER")) {
    header("Location: contactform.php");
    exit;  
} 

//  trick the spam bot into identifying itself using a honeypot
if (!empty($_POST["email"])) {
    exit;  
}

//if there is an attachment
if(!empty($_FILES['attachment']['name'])) {
    //store some varables
    $file_name = $_FILES['attachment']['name'];
    $temp_name = $_FILES['attachment']['tmp_name'];
    $file_type = $_FILES['attachment']['type'];

    //get the extension of the file
    $base = basename($file_name);
    $extension = substr($base, strlen($base)-4, strlen($base));

    // only thes file types will be allowed
    $allowed_extensions = array(".doc","docx",".pdf",".zip",".png","jpeg",".jpg",".gif",".txt","docm",".odt","xlsx","xlsm",".csv",".xml",".ods","tiff",".rtf","");

    // check that this file type is allowed
    if(in_array($extension,$allowed_extensions)){

        //mail essentials
        $from = $_POST['mail'];
        $to = "abcabacagagagag@gmx.de";
        $subject = "Anfrage über Website";
        $message = $_POST['quote'];

        // things you need
        $file = $temp_name;
        $content = chunk_split(base64_encode(file_get_contents($file)));
        $uid = md5(uniqid(time()));

        // standard mail headers
        $header = "From: ".$from."\r\n";
        $header .= "Reply-To: ".$to."\r\n";
        $header .= "MIME-Version: 1.0\r\n";

        $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
        $message .= "This is a multi-part message in MIME format.\r\n";

        // plain text part
        $message .= "--".$uid."\r\n";
        $message .= "Content-Type:text/plain; charset=iso-8859-1\r\n";
        $message .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
        $message .= $message."\r\n\r\n";

        // file attachment
        $message .= "--".$uid."\r\n";
        $message .= "Content-Type: ".$file_type."; name=\"".$file_name."\"\r\n";
        $message .= "Content-Transfer-Encoding: base64\r\n";
        $message .= "Content-Disposition: attachment; filename=\"".$file_name."\"\r\n";
        $message .= $content."\r\n\r\n";

        $msg = "";

        //send the mail 
        if (mail($to, $subject, $message, $header)) {
            $msg = "Ich habe Ihre Mail erhalten und melde mich in Kürze!";
        } else {
            $msg = "Nachricht konnte nicht gesendet werden. Bitte senden Sie mir Ihre Anfrage an bm-translations@email.de";
        }
    } else {
        $msg = "Dieser Dateityp kann über das Formular nicht gesendet werden. Bitte senden Sie mir Ihre Anfrage an bm-translations@email.de";
    }
} 

// if no file, send anyway (does not work) 
//elseif (empty($_FILES['attachment']['name']) || !(is_uploaded_file($_FILES['attachment']['name']))) {
//}
}

现在我尝试使用此代码来允许无附件发送,但不幸的是它不起作用。

  // if no file, send anyway
  elseif (empty($_FILES['attachment']['name']) ||(is_uploaded_file($_FILES['attachment']['name']))) {
  }

什么是错的或有没有更简单的方法?请原谅之前告诉我你需要什么,因为它可能不太清楚。非常感谢你!

1 个答案:

答案 0 :(得分:0)

<?php
if(isset($_POST) && !empty($_POST)) {

// catch spam bots which never loaded contact form
if (!isset($_POST["p3"]) || $_POST["p3"] != "sometext") {  
    header("Location: contactform.php");
    exit;  
}  

// check whether the POST method was used
if ("POST" != getenv("REQUEST_METHOD")) {  
    header("Location: contactform.php");
    exit;  
} 

// check for user-agent and http-referer
if ("" == getenv("HTTP_USER_AGENT") || "" == getenv("HTTP_REFERER")) {
    header("Location: contactform.php");
    exit;  
} 

//  trick the spam bot into identifying itself using a honeypot
if (!empty($_POST["email"])) {
    exit;  
}
 //setting up the mail
$from = $_POST['mail'];
$to = "abcabacagagagag@gmx.de";
$subject = "Anfrage über Website";
$message = $_POST['quote'];
$uid = md5(uniqid(time()));
// standard mail headers
$header = "From: ".$from."\r\n";
$header .= "Reply-To: ".$to."\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
$message .= "This is a multi-part message in MIME format.\r\n";

// plain text part
$message .= "--".$uid."\r\n";
$message .= "Content-Type:text/plain; charset=iso-8859-1\r\n";
$message .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$message .= $message."\r\n\r\n";
$msg = "";

//if there is an attachment
if(!empty($_FILES['attachment']['name'])) {
    //store some varables
    $file_name = $_FILES['attachment']['name'];
    $temp_name = $_FILES['attachment']['tmp_name'];
    $file_type = $_FILES['attachment']['type'];

//get the extension of the file
$base = basename($file_name);
$extension = substr($base, strlen($base)-4, strlen($base));

// only thes file types will be allowed
$allowed_extensions = array(".doc","docx",".pdf",".zip",".png","jpeg",".jpg",".gif",".txt","docm",".odt","xlsx","xlsm",".csv",".xml",".ods","tiff",".rtf","");

// check that this file type is allowed
if(in_array($extension,$allowed_extensions)){

   // file attachment
     // handling the content of the mail 
    $file = $temp_name;
    $content = chunk_split(base64_encode(file_get_contents($file)));
    $message .= "--".$uid."\r\n";
    $message .= "Content-Type: ".$file_type."; name=\"".$file_name."\"\r\n";
    $message .= "Content-Transfer-Encoding: base64\r\n";
    $message .= "Content-Disposition: attachment; filename=\"".$file_name."\"\r\n";
    $message .= $content."\r\n\r\n";

    //send the mail 
    if (mail($to, $subject, $message, $header)) {
        $msg = "Ich habe Ihre Mail erhalten und melde mich in Kürze!";
    } else {
        $msg = "Nachricht konnte nicht gesendet werden. Bitte senden Sie mir Ihre Anfrage an bm-translations@email.de";
    }
} else {
    $msg = "Dieser Dateityp kann über das Formular nicht gesendet werden. Bitte senden Sie mir Ihre Anfrage an bm-translations@email.de";
}
}

else  mail($to, $subject, $message, $header);

?>

我想在你的代码中为你指出一些事情

1-使用elseif不是你应该使用的正确选项,因为条件与您之前所写的内容完全相反,更多信息请点击here

2-你在最后一部分发送的msg没有声明你在我写的代码中看到我基本上从附件中分离了主要消息并在代码的开头声明它然后最后发送它。