简体   繁体   English

PHP:如何发送包含在同一服务器中找到的多个附件的电子邮件

[英]PHP: How to send emails with multiple attachments found in the same server

Here are the codes that works by receiving multiple files from HTML form.以下是通过从 HTML 表单接收多个文件来工作的代码。 I need your assistance on how I can do the same while taking attachment files from the same server directory and not from HTML form anymore.我需要您的帮助,了解如何在从同一服务器目录而不是从 HTML 表单获取附件文件时执行相同操作。 Thanks.谢谢。

<?php

error_reporting(E_ALL);错误报告(E_ALL); ini_set('display_errors', 1); ini_set('display_errors', 1);

if(isset($_FILES) && (bool) $_FILES) { 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 = "anold@insprogress.com";
$from = "we@insprogress.com"; 
$subject ="test attachment"; 
$message = "this is a 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 "<p>mail sent to $to!</p>"; 
} else { 
    echo "<p>mail could not be sent!</p>"; 
} 

} }

?> ?>

        <input type="submit" value="submit"/>
    </form>
</body>

As per the question you want to send the attachments available on the server current working directory.根据您要发送服务器当前工作目录上可用附件的问题。

thus the above file upload code can be removed from the code.因此可以从代码中删除上述文件上传代码。

if the user wants to see the files present in the server you can make a AJAX request system which will contact the server for the files present in the directory and show them to the user.如果用户想查看服务器中存在的文件,您可以创建一个AJAX请求系统,该系统将联系服务器以获取目录中存在的文件并将它们显示给用户。

for the above task you can refer the Directory Class functions to show the file names over the web page.对于上述任务,您可以参考目录类函数以在网页上显示文件名。

the above code for the attachments can be modified as:附件的上述代码可以修改为:

$files = //the options selected by the user in an array
//don't forget to sanitize and check the data.
// preparing attachments
for($x=0;$x<count($files);$x++){
    $file = fopen($files[$x],"rb");
    $data = fread($file,filesize($files[$x]));
    fclose($file);
...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM