如何使用phpMailer发送上传的文件(通过filepond)?
我正在使用filepond()在我的服务器上上载文件。 我能够使用php样板文件() 并且能够用filepond上传我的文件,但不知道如何上传 要用phpMailer发送吗?如何将此代码(Rik的send.php)与phpMailer相结合 正如我注意到的,下面的代码将文件放在服务器上。顺便说一下,我不需要存储它,我只想在临时文件夹中找到它并发送它。在它可以被删除之后如何使用phpMailer发送上传的文件(通过filepond)?,php,phpmailer,filepond,Php,Phpmailer,Filepond,我正在使用filepond()在我的服务器上上载文件。 我能够使用php样板文件() 并且能够用filepond上传我的文件,但不知道如何上传 要用phpMailer发送吗?如何将此代码(Rik的send.php)与phpMailer相结合 正如我注意到的,下面的代码将文件放在服务器上。顺便说一下,我不需要存储它,我只想在临时文件夹中找到它并发送它。在它可以被删除之后 <?php // Comment if you don't want to allow posts from other
<?php
// Comment if you don't want to allow posts from other domains
header('Access-Control-Allow-Origin: *');
// Allow the following methods to access this file
header('Access-Control-Allow-Methods: POST');
// Load the FilePond class
require_once('FilePond.class.php');
// Load our configuration for this server
require_once('config.php');
// Catch server exceptions and auto jump to 500 response code if caught
FilePond\catch_server_exceptions();
FilePond\route_form_post(ENTRY_FIELD, [
'FILE_OBJECTS' => 'handle_file_post',
'BASE64_ENCODED_FILE_OBJECTS' => 'handle_base64_encoded_file_post',
'TRANSFER_IDS' => 'handle_transfer_ids_post'
]);
function handle_file_post($files) {
// This is a very basic implementation of a classic PHP upload function, please properly
// validate all submitted files before saving to disk or database, more information here
// http://php.net/manual/en/features.file-upload.php
foreach($files as $file) {
FilePond\move_file($file, UPLOAD_DIR);
}
}
function handle_base64_encoded_file_post($files) {
foreach ($files as $file) {
// Suppress error messages, we'll assume these file objects are valid
/* Expected format:
{
"id": "iuhv2cpsu",
"name": "picture.jpg",
"type": "image/jpeg",
"size": 20636,
"metadata" : {...}
"data": "/9j/4AAQSkZJRgABAQEASABIAA..."
}
*/
$file = @json_decode($file);
// Skip files that failed to decode
if (!is_object($file)) continue;
// write file to disk
FilePond\write_file(
UPLOAD_DIR,
base64_decode($file->data),
FilePond\sanitize_filename($file->name)
);
}
}
function handle_transfer_ids_post($ids) {
foreach ($ids as $id) {
// create transfer wrapper around upload
$transfer = FilePond\get_transfer(TRANSFER_DIR, $id);
// transfer not found
if (!$transfer) continue;
// move files
$files = $transfer->getFiles(defined('TRANSFER_PROCESSOR') ? TRANSFER_PROCESSOR : null);
foreach($files as $file) {
FilePond\move_file($file, UPLOAD_DIR);
}
// remove transfer directory
FilePond\remove_transfer_directory(TRANSFER_DIR, $id);
}
}
这是两个独立的操作:
- 从远程位置获取文件
- 将其作为附件添加到电子邮件中
使用PHPMailer执行此操作最简单的方法是:
$path=tempnam(sys_get_temp_dir(),'emailfile');
if(file\u put\u contents($path,file\u get\u contents($pathhttps://example.com/path/to/file.png'))) {
$mail->addAttachment($path);
}
请注意,PHPMailer显式避免成为HTTP客户机本身addAttachment()
将不接受远程URL,只接受本地路径。使用适当的HTTP客户端类(如)获取数据并将其存储在文件中,然后将路径名传递给PHPMailer
或者,您可以将远程内容提取为二进制字符串,并通过addStringAttachment()
将其传递给PHPMailer,这样可以避免写入磁盘,但您应该只对内存中适合的小项目执行此操作