簡體   English   中英

發送帶有多個附件和 JavaScript Ajax 請求的電子郵件

[英]Sending E-Mail with multiple attachments and JavaScript Ajax request

我有一個彈出表單,在提交后會發送一封電子郵件。 一切正常。 我正在嘗試為要添加的文檔添加 3 個上傳文件字段。 我嘗試使用 input type="file" 沒有運氣。 我已經按照要求用我的整個代碼編輯了這個問題。 我在底部添加了發送郵件的代碼

該表格工作正常。 我只是缺少這 3 個用於文件上傳的字段。

我的javascript:

<script language="javascript">
function validate(){
    var f=document.formED;
    if(f.idnumber.value==''){
        alert('ID Number is required');
        f.idnumber.focus();
        return false;
    }
    /** doing the same for each field => remove here **/

    //f.command.value='btn1';
    //f.submit();

}
    function showHide(){
    var f=document.formED;
    if(f.fullnames.value==''){
        f.fullnames.focus();
        return false;
    }
    /** doing the same for each field => remove here **/

    //create an object reference to the div containing images 
    var oimageDiv=document.getElementById('searchingimageDiv') 
    //set display to inline if currently none, otherwise to none 
    oimageDiv.style.display=(oimageDiv.style.display=='none')?'inline':'none' 
    }
</script>
<div class="col-md-8">
    <div class="panel panel-white">
        <!-- Removed the irrelevant HTML content for this question -->
        <div class="panel-body">
            <form onsubmit="return validate()" autocomplete="off" name="formED" action="#" method="post" role="form">
                <!-- Removed the irrelevant HTML content for this question -->

                <div class="form-group">
                    <label for="exampleInputEmail1">License Disk Copy:(Please press control while selecting to choose
                        multiple images)</label>
                    <input type="file" name="multiple_files[1]" multiple="multiple">

                </div>

                <div class="form-group">
                    <label for="exampleInputEmail1">Picture Of Damage:(Please press control while selecting to choose
                        multiple images)</label>
                    <input type="file" name="multiple_files[2]" multiple="multiple">
                </div>

                <div class="form-group">
                    <label for="exampleInputEmail1">License Copy: (Please press control while selecting to choose
                        multiple images)</label>
                    <input type="file" name="multiple_files[3]" multiple="multiple">
                </div>

                <!-- Removed the irrelevant HTML content for this question -->
                <button type="submit" name="newClient" class="btn btn-info" onclick="showHide()">Submit <i
                            class="fa fa-check" aria-hidden="true"></i></button>
            </form>
        </div>
    </div>
</div>

發送郵件的php:

<?php
$to = 'info@****';
$subject = "New Assessment Request has been submitted by ".$fullnames;
// Get HTML contents from file
$htmlContent = '<div style="font-family:HelveticaNeue-Light,Arial,sans-
serif;background-color:#FFFFFF"><!-- Removed the irrelevant HTML content for this question -->
</div>';

// Set content-type for sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";

// Additional headers
$headers .= 'From: Digiteks Assessment Request<info@****>' . "\r\n";

// Send email
if(mail($to,$subject,$htmlContent,$headers)):

else:
//$errorMsg = 'We are unable to send you a mail, possible your email is a scam..';
endif;  
?>          

通常您需要將enctype="multipart/form-data"到您的from字段。 如果您向input字段添加multiple屬性,用戶可以一次選擇多個文件,或者您使用 3 個單個輸入字段進行選擇。 type="file"是正確的:

<form method="POST" action="/upload" accept-charset="UTF-8" enctype="multipart/form-data">
    <input type="file" name="multiple_files[]" multiple="multiple">
    <input type="file" name="single_file1">
    <input type="file" name="single_file2">
    <input type="file" name="single_file3">
    <input value="Upload" type="submit">
</form>

如果您不使用 Ajax,您的代碼中將缺少enctype="multipart/form-data"部分。 您的字段名稱也有語法錯誤。 它是multiple_files1[]multiple_files[1][]而不是multiple_files[1]

在您的mail()函數中,您不處理文件,因此即使其余部分是正確的,您也根本不會發送它,而使用mail()則很難做到這一點。

從這里嘗試 PHPMailer 腳本: http : //github.com/PHPMailer/PHPMailer
但是如果你真的想用mail()來做,這里有一個教程你怎么做: http : //webcheatsheet.com/php/send_email_text_html_attachment.php

因為您沒有共享 Ajax 代碼(例如 jQuery Ajax),所以我無法檢查您的 JavaScript 代碼是否有錯誤。

在處理標題和 MIME 一段時間后,我讓它開始工作

<?php

 error_reporting(E_ALL);
 ini_set('display_errors', 1);

if(isset($_FILES) && (bool) $_FILES) {

$allowedExtensions = array("pdf","doc","docx","gif","jpeg","jpg","png","rtf","txt");

$files = array();
foreach($_FILES as $name=>$file) {
    $file_name = $file['name']; 
    $temp_name = $file['tmp_name'];
    $file_type = $file['type'];
    $path_parts = pathinfo($file_name);
    $ext = $path_parts['extension'];
    if(!in_array($ext,$allowedExtensions)) {
        die("File $file_name has the extensions $ext which is not allowed");
    }
    array_push($files,$file);
}

// email fields: to, from, subject, and so on
$to = "***";
$from = "***"; 
$subject ="New Assessment Request";
$message = "Test Message";

$headers = "From: $from";

// boundary 
$semi_rand = md5(time()); 
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

// headers for attachment 
$headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; 

// multipart 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 . "\n\n"; 
$message .= "--{$mime_boundary}\n";

// preparing attachments
for($x=0;$x<count($files);$x++){
    $file = fopen($files[$x]['tmp_name'],"rb");
    $data = fread($file,filesize($files[$x]['tmp_name']));
    fclose($file);
    $data = chunk_split(base64_encode($data));
    $name = $files[$x]['name'];
    $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";
}
// send

    $ok = mail($to, $subject, $message, $headers); 
if ($ok) { 
     echo '<script language="javascript">';
     echo 'alert("Your Message successfully sent, we will get back to you ASAP.");';
     echo 'window.location.href="index.php";';
     echo '</script>';

} else { 
    echo "<p>mail could not be sent!</p>"; 
} 
}   

?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM