Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WP mail attachment from form without upload file on filemanager

From a form, via wp_mail function, I'm trying to send an email with an attachment, without upload the file to the file manager. I'm getting the email with an attachment. But the attachment name not correct and no file type. Please help to solving this.

This is HTML form

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

There is my PHP Code

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

    $recipients = "[email protected]";
    $SenderName = get_bloginfo('name');
    $SenderEmail = "[email protected]";
    $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 );
}
like image 806
Feroz Ahmed Avatar asked Nov 08 '22 20:11

Feroz Ahmed


1 Answers

Well I had to come up with workaround for this one

What I did is

  1. Upload the file to the server
  2. email with wp-mail
  3. on successful email or not; unlink the uploaded image

1.Upload the file to the server

    /*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.email with 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.on successful email or not unlink the uploaded image

unlink($target_file);
like image 91
Regolith Avatar answered Nov 14 '22 22:11

Regolith