Вложения не отправляются с помощью функции php mail () - PullRequest
0 голосов
/ 27 сентября 2019

Я работаю над вложением файла, здесь функция почты работает нормально, я получаю только поле с файлом, которое не приходит.Я пытался использовать Content-Type: multipart/mixed и некоторые другие методы, но не смог достичь желаемого результата.Я провел опрос и нашел другой ответ и попробовал, но все еще сталкиваюсь с той же проблемой.Эта тема уже задана, но я перепробовал все методы, может кто-нибудь направить меня в правильном направлении в соответствии с моим сценарием, чего я здесь не хватаеткак я могу получить файл вложения.Может кто-нибудь подсказать мне в правильном направлении, что мне здесь не хватает, почему другие поля не приходят, если я удаляю код вложения файла, тогда другие поля работают нормально, и почта пришла.HTML

<form class="test" action="contactMail.php" method="POST">
  <input type="hidden" name="formname" value="Form sent by About page">
  <select class="user-select">
    <option value="">Pick Job Role</option>
    <option>Web Developer</option>
    <option>Java Developer</option>
  </select>
  <input type="text" name="name" placeholder="Your Name">
  <input type="tel" name="phone" placeholder="Contact Number">
  <label for="file-upload" class="file-upload">Upload Image</label>
  <input type="file" id="file-upload" name="upload" required>
  <textarea name="message" placeholder="Your Message" rows="3">/textarea>
            <button type="submit" class="from-submit form-group form-fields">Submit</button>
    <div id="success_contact">                                               
        <h2>Request Sent!</h2>
    </div>
</form>
   `<?php
// Receiver mail id 
$mail_to = 'yourmail@gmail.com';

// Mail Subject 
$subject = 'Virtual Raasta';

$upload = $_FILES["upload"];
$path = 'assets/file';
$filename = 'myfile';

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

    if ( isset($_POST['name']) ) {
        $name = $_POST['name'];
    }

    if (isset($_POST['phone'])) {
        $phone = $_POST['phone'];
    }

    if (isset($_POST['company'])) {
        $company = $_POST['company'];
    }

    if(isset($_POST['message'])) {
        $message = $_POST['message'];
    }
    if(isset($_POST['industry'])) {
        $industry = $_POST['industry'];
    }
    if(isset($_POST['job'])) {
        $job = $_POST['job'];
    }
    if(isset($_FILES['upload'])) {
        $upload = $_FILES['upload'];
    }

    $reqBy = $_POST['formname'];

    // Message body

    $msg = '<html><body><p>';

    $msg .= '<b> Request Sent From : </b>' . $reqBy . '<br/>';

    $msg .= '<b> Name : </b>' . $name . '<br/>';

    if($_POST["phone"] != "") {
       $msg .= '<b> Phone : </b>' . $phone . '<br/>';
    }

    if($_POST["company"] != "") {
       $msg .= '<b> Company : </b>' . $company . '<br/>';
    }

    if($_POST["message"] != "") {
        $msg .= '<b> Message : </b>' . $message . '<br/>';
    }

    if($_POST["industry"] != "") {
        $msg .= '<b> Industry : </b>' . $industry . '<br/>';
    }

    if($_POST["job"] != "") {
        $msg .= '<b> Job Role : </b>' . $job . '<br/>';
    }

    if($_FILES["upload"] != "") {
        $msg .= '<b> Upload : </b>' . $upload . '<br/>';
    }

    $msg .= '</p>';
    $msg .= '</body></html>';
    var_dump($msg);

    $filename = $_FILES["upload"]["name"];
    //$content = file_get_contents( $_FILES['upload']['tmp_name'] );

    if(!empty($_FILES['upload']['tmp_name']) && file_exists($_FILES['upload']['tmp_name'])) {
        $content= addslashes(file_get_contents($_FILES['upload']['tmp_name']));
    }
    $content = chunk_split(base64_encode($content));
    $uid = md5(uniqid(time()));


    $replyto = 'test';
    $headers = "From: ".$subject." <".'yourmail@gmail.com'.">\r\n";
    $headers .= "Reply-To: ".$replyto."\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";

    $msg = "--".$uid."\r\n";
    $msg .= "Content-type:text/plain; charset=iso-8859-1\r\n";
    $msg .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
    $msg .= $msg."\r\n\r\n";
    $msg .= "--".$uid."\r\n";
    $msg .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n";
    $msg .= "Content-Transfer-Encoding: base64\r\n";
    $msg .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
    $msg .= $content."\r\n\r\n";
    $msg .= "--".$uid."--";

    if( mail( $mail_to, $subject, $msg, $headers )) {
        echo "Thank You!";
    } else {
        die("Error!");
    }
   }

 ?>`

Ответы [ 3 ]

0 голосов
/ 28 сентября 2019

обновите тег открытия формы с помощью

<form class="test" action="contactMail.php" method="POST" enctype="multipart/form-data">

и добавьте приведенный ниже код перед запуском, если условие

if ($_FILES['upload']['error'] == 0) {
   $filename = $_FILES["upload"]["name"];
   $content = file_get_contents( $_FILES['upload']['tmp_name'] );
   $content = chunk_split(base64_encode($content));
   $uid = md5(uniqid(time()));
}
0 голосов
/ 30 сентября 2019

Надеюсь, это просто опечатка.Вы используете var $msg дважды.Один раз для Вашего html-сообщения и для тела сообщения.

<?php

....

    // Message body

    $msg = '<html><body><p>';

    $msg .= '<b> Request Sent From : </b>' . $reqBy . '<br/>';

    $msg .= '<b> Name : </b>' . $name . '<br/>';

    if($_POST["phone"] != "") {
       $msg .= '<b> Phone : </b>' . $phone . '<br/>';
    }

    if($_POST["company"] != "") {
       $msg .= '<b> Company : </b>' . $company . '<br/>';
    }

    if($_POST["message"] != "") {
        $msg .= '<b> Message : </b>' . $message . '<br/>';
    }

    if($_POST["industry"] != "") {
        $msg .= '<b> Industry : </b>' . $industry . '<br/>';
    }

    if($_POST["job"] != "") {
        $msg .= '<b> Job Role : </b>' . $job . '<br/>';
    }

    if($_FILES["upload"] != "") {
        $msg .= '<b> Upload : </b>' . $upload . '<br/>';
    }

    $msg .= '</p>';
    $msg .= '</body></html>';
    var_dump($msg);

    $filename = $_FILES["upload"]["name"];
    //$content = file_get_contents( $_FILES['upload']['tmp_name'] );

    if(!empty($_FILES['upload']['tmp_name']) && file_exists($_FILES['upload']['tmp_name'])) {
        $content= file_get_contents($_FILES['upload']['tmp_name']); // No add_slashes()
    }
    $content = chunk_split(base64_encode($content));
    $uid = md5(uniqid(time()));


    $replyto = 'test';
    $headers = "From: ".$subject." <".'yourmail@gmail.com'.">\r\n";
    $headers .= "Reply-To: ".$replyto."\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";

Переименуйте переменную здесь и измените также тип содержимого и кодировку передачи:

    $msgBody = "--".$uid."\r\n";
    $msgBody .= "Content-type:text/html; charset=iso-8859-1\r\n";
    $msgBody .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
    $msgBody .= $msg."\r\n\r\n";
    $msgBody .= "--".$uid."\r\n";
    $msgBody .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n";
    $msgBody .= "Content-Transfer-Encoding: base64\r\n";
    $msgBody .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
    $msgBody .= $content."\r\n\r\n";
    $msgBody .= "--".$uid."--";

    if( mail( $mail_to, $subject, $msgBody, $headers )) {
        echo "Thank You!";
    } else {
        die("Error!");
    }
   }

 ?>
0 голосов
/ 27 сентября 2019

Чтобы лучше обрабатывать электронные письма с помощью PHP, вы можете использовать эту библиотеку:

https://github.com/PHPMailer/PHPMailer

Существует также возможность минимальной установки :

Как минимум вам понадобится src / PHPMailer.php.Если вы используете SMTP, вам понадобится src / SMTP.php, а если вы используете POP до SMTP, вам понадобится src / POP3.php.

...