邮件功能不会回显电子邮件中的值

时间:2016-02-04 09:40:15

标签: php email

这个PHP代码是正确的。这个代码没有错误但是当用户提交表单时,在收到的电子邮件中只显示email.it中的文件附件没有显示所有输入字段值。需要做什么???

    <?php
if(isset($_FILES) && (bool) $_FILES) {
    $AllowedExtensions = ["pdf","doc","docx","gif","jpeg","jpg","png","rtf","txt"];
    $files = [];
    $server_file = [];
    foreach($_FILES as $name => $file) {
        $file_name = $file["name"];
        $file_temp = $file["tmp_name"];
        foreach($file_name as $key) {
            $path_parts = pathinfo($key);
            $extension = strtolower($path_parts["extension"]);
            if(!in_array($extension, $AllowedExtensions)) { die("Extension not allowed"); }
            $server_file[] = "uploads/{$path_parts["basename"]}";
        }
        for($i = 0; $i<count($file_temp); $i++) { move_uploaded_file($file_temp[$i], $server_file[$i]); }
    }
    $from = "example@gmail.com";
    $headers = "From: $from";
    $semi_rand = md5(time());
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
    $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";
    $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n"; 
    $message .= "--{$mime_boundary}\n";
    $FfilenameCount = 0;
    for($i = 0; $i<count($server_file); $i++) {
        $afile = fopen($server_file[$i],"rb");
        $data = fread($afile,filesize($server_file[$i]));
        fclose($afile);
        $data = chunk_split(base64_encode($data));
        $name = $file_name[$i];
        $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$name\"\n" .
            "Content-Disposition: attachment;\n" . " filename=\"$name\"\n" .
            "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
        $message .= "--{$mime_boundary}\n";
    }
}

/** Your submit block **/
if(isset($_POST['submit']))
{
    $name = htmlspecialchars($_REQUEST['name']);
    $email = htmlspecialchars($_REQUEST['email']);
    $mobile = htmlspecialchars($_REQUEST['mobile']);
    $company = htmlspecialchars($_REQUEST['company']);
    $qty = htmlspecialchars($_REQUEST['qty']);
    $msg = htmlspecialchars($_REQUEST['msg']);

    $subject = "Order Information";
    $message .= "Name: " . $name . "\n";
    $message .= "Email: " . $email . "\n";
    $message .= "ContactNo: " . $mobile . "\n";
    $message .= "Company: " . $company . "\n";
    $message .= "Quantity: " . $qty . "\n";
    $message .= "Message: " . $msg . "\n";
    if(mail($from, $subject, $message, $headers)) {   
        echo 'thank you';   
    }
    else { 
        echo 'error';
    }
}

?>

1 个答案:

答案 0 :(得分:2)

我认为您还需要将发送数据的部分转换为多部分。否则你的邮件客户端可能会忽略它(我想你可能会在邮件的底部找到它&#34;查看邮件来源&#34;模式)。

应该是(只有$ _POST部分):

if(isset($_POST['submit']))
{
    $name = htmlspecialchars($_REQUEST['name']);
    $email = htmlspecialchars($_REQUEST['email']);
    $mobile = htmlspecialchars($_REQUEST['mobile']);
    $company = htmlspecialchars($_REQUEST['company']);
    $qty = htmlspecialchars($_REQUEST['qty']);
    $msg = htmlspecialchars($_REQUEST['msg']);
    $to="amar.ghodke30@gmail.com";
    $subject = "Order Information";
    $message .= "--{$mime_boundary}\n"; //$mime_boundary should be the same as for attachments.
    $message .= "Content-type: text/plain;charset=utf-8\n\n";
    $message .= "Name: " . $name . "\n";
    $message .= "Email: " . $email . "\n";
    $message .= "ContactNo: " . $mobile . "\n";
    $message .= "Company: " . $company . "\n";
    $message .= "Quantity: " . $qty . "\n";
    $message .= "Message: " . $msg . "\n";
    $message .= "--{$mime_boundary}\n\n";
    if(mail($from, $subject, $message, $headers)) {   
        echo 'thank you';   
    }
    else { 
        echo 'error';
    }
}