0

while sending a mail using PHP mail() without attachment working fine.

But while sending with attachment sending Failed please help me. Whats wrong in my code?

Thanks in advance. My HTML code is shown below

index.html

<html>
    <head>
        <title>Mail</title>
    </head>
    <body>
        <form method="POST" action="mail.php" enctype="multipart/form-data">
            <input type="text" name="fromName">
            <input type="email" name="fromEmail">
            <input type="file" name="fileAttach">
            <input type="submit" name="submit">

        </form>
    </body>
</html>

The following is my Mail code

mail.php

<?php
if (isset($_POST['submit'])) {
   /* $mailto = $_POST["mailTo"];*/
   $mailto = "to@gmail.com";
    $from_mail = $_POST["fromEmail"];
    $replyto = $_POST["fromEmail"];
    $from_name = $_POST["fromName"];
    /*$message = $_POST["message"];*/
    $message="This is message part";
    /*$subject = $_POST["subject"];*/
    $subject ="this is subject part";

    $filename = $_FILES["fileAttach"]["name"];
    $content = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"])));

    $uid = md5(uniqid(time()));
    $name = basename($file);
    $header = "From: " . $from_name . " <" . $from_mail . ">\r\n";
    $header .= "Reply-To: " . $replyto . "\r\n";

    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-Type: multipart/mixed; boundary=\"" . $uid . "\"\r\n\r\n";
    $header .= "This is a multi-part message in MIME format.\r\n";
    $header .= "--" . $uid . "\r\n";

// You add html "Content-type: text/html; charset=utf-8\n" or for Text "Content-type:text/plain; charset=iso-8859-1\r\n" by I.khan
    $header .= "Content-type:text/html; charset=utf-8\n";
    $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";

// User Message you can add HTML if You Selected HTML content
    $header .= "<div style='color: red'>" . $message . "</div>\r\n\r\n";

    $header .= "--" . $uid . "\r\n";
    $header .= "Content-Type: application/octet-stream; name=\"" . $filename . "\"\r\n"; // use different content types here
    $header .= "Content-Transfer-Encoding: base64\r\n";
    $header .= "Content-Disposition: attachment; filename=\"" . $filename . "\"\r\n\r\n"; // For Attachment
    $header .= $content . "\r\n\r\n";
    $header .= "--" . $uid . "--";
    if (mail($mailto, $subject, $message, $header)) {
        echo "<script>alert('Success');</script>"; // or use booleans here
    } else {
        //echo mysqli_error();
        echo "<script>alert('Failed');</script>";

    }
}

Is there anything to add or change in the code?

Ramlal S
  • 1,573
  • 1
  • 14
  • 34
  • 2
    Use `PHPMailer` instead. https://github.com/PHPMailer/PHPMailer – hungrykoala Jun 01 '18 at 04:39
  • 2
    I totally agree with @hungrykoala. Use one of the tried and tested mail libraries instead of the low lever `mail()`-function. It gives you a way more verbose API, easier to send through SMTP which not only more secure, but also removes server dependencies, making your script more portable. – M. Eriksson Jun 01 '18 at 04:45
  • 1
    Yeah, PHPMailer is the right way, see notes about attachments: https://github.com/PHPMailer/PHPMailer#why-you-might-need-it – bimlas Jun 01 '18 at 05:58

0 Answers0