来自表单的 WP 邮件附件,没有在文件管理器上上传文件

Posted

技术标签:

【中文标题】来自表单的 WP 邮件附件,没有在文件管理器上上传文件【英文标题】:WP mail attachment from form without upload file on filemanager 【发布时间】:2016-05-22 11:51:50 【问题描述】:

从一个表单,通过 wp_mail 函数,我试图发送一封带有附件的电子邮件,而不是将文件上传到文件管理器。 我收到带有附件的电子邮件。但附件名称不正确且没有文件类型。请帮忙解决这个问题。

这是 HTML 表单

<form action="POST" enctype="multipart/form-data">
    <table>
        <input type="file" name="Attached">
        <input type="Submit" name="Submit">
    </table>
</form>

这是我的 PHP 代码

if (isset($_POST['Submit'])) 
    $attachments = $_FILES['Attached']['tmp_name'];

    $recipients = "john@mail.com";
    $SenderName = get_bloginfo('name');
    $SenderEmail = "noreply@domain.com";
    $body   = "How are you what are you doing now. bla bla bla";

    $recipients = array($to);
    $headers[] = "From: $SenderName <$SenderEmail>" . "\r\n";
    $headers[] = "Content-Type: text/html";
    $subj = "This is mail subject";
    $SendMail   = wp_mail( $recipients, $subj, $body, $headers, $attachments );

【问题讨论】:

图片转base64 你能把这个代码发给我吗? 先将上传的数值图片通过js转换为base64,并赋值给隐藏字段值,该数值将包含在POST中,然后您可以按照此发送带有附件的电子邮件,webcheatsheet.com/php/…,有很多这里或谷歌的信息,只需搜索它;) 【参考方案1】:

好吧,我不得不为此想出解决方法

我做的是

    上传文件到服务器 带有 wp-mail 的电子邮件 邮件成功与否;取消链接上传的图片

1.上传文件到服务器

    /*image upload */
/* GET File Variables */
$target_dir = $_SERVER['DOCUMENT_ROOT']. "/uploads/";
$image_name = $_FILES['YOUR_IMAGE']['name'];
$target_file = $target_dir . basename($_FILES['YOUR_IMAGE']['name']);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image

$check = getimagesize($_FILES["YOUR_IMAGE"]["tmp_name"]);
if($check !== false) 
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
 else 
    echo "File is not an image.";
    $uploadOk = 0;



// Check file size
if ($_FILES["YOUR_IMAGE"]["size"] > 500000) 
    echo "Sorry, your file is too large.";
    $uploadOk = 0;

// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
    && $imageFileType != "gif" ) 
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;

// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) 
    echo "Sorry, your file was not uploaded.";
    // if everything is ok, try to upload file
 else 
    if (move_uploaded_file($_FILES["YOUR_IMAGE"]["tmp_name"], $target_file)) 
        echo "The file ". basename( $_FILES["YOUR_IMAGE"]["name"]). " has been uploaded.";
     else 
        echo "Sorry, there was an error uploading your file.";
    


$attachment = array($target_file);

2.使用 wp-mail 发送电子邮件

    $to = $Email; // put your email here
        $headers = array('Content-Type: text/html; charset=UTF-8','From:' . $name . '<' . $fromEmail . '>');

        // $headers = 'From:' . $name . '<' . $studentEmail . '>' . "\r\n"; // put user's email here or duplicate your email
        $subject = 'Apply Online Form';

        if (wp_mail($to, $subject, $message, $headers, $attachment ) === false) 
            echo "Error";
             unlink($target_file);
         else 
             unlink($target_file);
            echo "<h3> Mail Sent Successfully</h3>";
        

3.发邮件成功或不取消上传图片的链接

unlink($target_file);

【讨论】:

以上是关于来自表单的 WP 邮件附件,没有在文件管理器上上传文件的主要内容,如果未能解决你的问题,请参考以下文章

多上传附件联系表单

使用来自 node.js 的 AWS SES 在邮件中上传 .jpg 图像附件

我可以通过自动电子邮件从 Google 表单/Google 表格发送多个上传的附件吗?

带有文件上传附件的 PHP 联系表

从表单发送电子邮件附件

如何使用multipart/form-data格式上传文件