wp_mail() - 从表单发送 'file' 输入类型作为附件

wp_mail() - Sending 'file' input type from form as attachment

我的 fucntions.php 文件中有创建和验证表单的简码。提交并验证表单后,数据将存储在 SESSION 变量中。 SESSION 变量用于将信息传送到自定义 PHP 模板页面。此页面使用 wp_mail() 通过电子邮件发送表单数据并显示感谢信。

我的问题是表单有一个 'file' 图像上传输入类型。我已经正确验证了它,但是传输上传的图像然后通过电子邮件将其作为 wp_mail() 函数中的“$附件”发送是我正在努力解决的问题。

另外我知道我应该将上传的图像保存在临时文件夹中,而不是将其存储在 SESSION 变量中。然后我只需要在电子邮件发送后删除图像。

我的问题是如何?所有这些的代码很长,所以这里是简短而有趣的版本:

functions.php(在简码函数中)

<?php
$file = "";
$fileErr = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {

   //file upload is required, make sure its not empty
   if(empty($_FILES['pmFile'])){
       $fileErr = "This is required!";
   }
   else{
       $file = $_FILES['pmFile'];//I validate here, but lets just say its OK     
   } 

   //If the error message is empty, store data in SESSION variables, and 
   //uploaded file in temp folder + redirect to thank you page
   if(empty($fileErr)){

      //HOW DO I SAVE THE FILE TEMPORARILY FOR USE ON THE NEXT PAGE??? 

      wp_redirect( '../wp-content/themes/rest of the path/thankYouPage.php' );
      exit();

   }else{ /*display errors*/}

}

//down here is where I wrote the code for the form. YES method=post, YES I 
//included enctype="multipart/form-data, YES the file input name is in fact 
//'pmFile'.
?>

thankYouPage.php

//initial page stuff 
//start email setup
$to = 'XXXXX@gmail.com';

$email_from = 'XXXXX@gmail.com';
$email_subject = "New Price Match Request";
$email_body = "I display the html and data here";

//for attachments
//HOW DO I PULL THAT UPLOADED FILE FROM THE TEMP FOLDER AND SEND IT AS AN ATTACHMENT?
$attachments = (the file in temp folder);
//NOW HOW TO I DELETE IT FROM THE TEMP FOLDER

$headers = "From: $email_from \r\n";
$headers .= "Reply-To: $email \r\n"; //$email is a SESSION variable pulled from before
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

//set to html
add_filter('wp_mail_content_type',create_function('', 'return "text/html"; '));

//send
wp_mail( $to, $email_subject, $email_body, $headers, $attachments );

// Reset content-type to avoid conflicts
remove_filter( 'wp_mail_content_type', 'wpdocs_set_html_mail_content_type' );

我知道它删除了很多代码,但是电子邮件适用于由 SESSION 变量传输的表单中的所有其他信息。我真的只需要知道如何传输这个上传的文件并通过电子邮件发送。谢谢!

我只会使用 PHPMailer,它非常简单并且有很好的文档,发送附件也很容易。

如果我没理解错的话...

要从临时文件夹上传文件,请使用 move_uploaded_file or wp_handle_upload

然后将文件附加到邮件中$attachments = array( WP_CONTENT_DIR . '/uploads/file.txt' );

使用 unlink 发送邮件并删除。