복붙노트

PHP 메일 ()로 첨부 파일을 보내시겠습니까?

PHP

PHP 메일 ()로 첨부 파일을 보내시겠습니까?

나는 우편으로 pdf를 보낼 필요가있다?

$to = "xxx";
$subject = "Subject" ;
$message = 'Example message with <b>html</b>';
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: xxx <xxx>' . "\r\n";
mail($to,$subject,$message,$headers);

내가 뭘 놓치고 있니?

해결법

  1. ==============================

    1.

    @MihaiIorga와 의견에 동의합니다 - PHPMailer 스크립트를 사용하십시오. 당신은 당신이 쉬운 옵션을 원하기 때문에 그것을 거절하는 것처럼 들리 네요. 저를 믿으십시오, PHPMailer는 PHP의 붙박이 mail () 기능으로 너 자신 그것을하는 것을 시도에 비교 된 아주 큰 한계에 의하여 쉬운 선택권이다. PHP의 mail () 함수는 실제로 그렇게 좋지 않습니다.

    PHPMailer를 사용하려면,

    이제 첨부 파일이 포함 된 이메일을 보내는 것은 크게 어렵지 않게 어렵습니다.

    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;
    
    $email = new PHPMailer();
    $email->SetFrom('you@example.com', 'Your Name'); //Name is optional
    $email->Subject   = 'Message Subject';
    $email->Body      = $bodytext;
    $email->AddAddress( 'destinationaddress@example.com' );
    
    $file_to_attach = 'PATH_OF_YOUR_FILE_HERE';
    
    $email->AddAttachment( $file_to_attach , 'NameOfFile.pdf' );
    
    return $email->Send();
    

    그것은 $ email-> AddAttachment () 한 줄에 불과합니다. - 당신은 더 쉽게 요청할 수 없었습니다.

    PHP의 mail () 함수를 사용하면 코드 스택을 작성하게되고 버그를 찾기가 정말 어려울 것입니다.

  2. ==============================

    2.

    다음 코드를 사용해보십시오.

        $filename = 'myfile';
        $path = 'your path goes here';
        $file = $path . "/" . $filename;
    
        $mailto = 'mail@mail.com';
        $subject = 'Subject';
        $message = 'My message';
    
        $content = file_get_contents($file);
        $content = chunk_split(base64_encode($content));
    
        // a random hash will be necessary to send mixed content
        $separator = md5(time());
    
        // carriage return type (RFC)
        $eol = "\r\n";
    
        // main header (multipart mandatory)
        $headers = "From: name <test@test.com>" . $eol;
        $headers .= "MIME-Version: 1.0" . $eol;
        $headers .= "Content-Type: multipart/mixed; boundary=\"" . $separator . "\"" . $eol;
        $headers .= "Content-Transfer-Encoding: 7bit" . $eol;
        $headers .= "This is a MIME encoded message." . $eol;
    
        // message
        $body = "--" . $separator . $eol;
        $body .= "Content-Type: text/plain; charset=\"iso-8859-1\"" . $eol;
        $body .= "Content-Transfer-Encoding: 8bit" . $eol;
        $body .= $message . $eol;
    
        // attachment
        $body .= "--" . $separator . $eol;
        $body .= "Content-Type: application/octet-stream; name=\"" . $filename . "\"" . $eol;
        $body .= "Content-Transfer-Encoding: base64" . $eol;
        $body .= "Content-Disposition: attachment" . $eol;
        $body .= $content . $eol;
        $body .= "--" . $separator . "--";
    
        //SEND Mail
        if (mail($mailto, $subject, $body, $headers)) {
            echo "mail send ... OK"; // or use booleans here
        } else {
            echo "mail send ... ERROR!";
            print_r( error_get_last() );
        }
    

    2018 년 6 월 14 일 편집

    일부 이메일 제공 업체에서 더 읽기 쉽도록 용도

    $ body. = $ eol. $ 메시지. $ eol. $ eol; 과 $ body. = $ eol. $ 콘텐츠. $ eol. $ eol;

  3. ==============================

    3.

    PHP 5.5.27 보안 업데이트

    $file = $path.$filename;
    $content = file_get_contents( $file);
    $content = chunk_split(base64_encode($content));
    $uid = md5(uniqid(time()));
    $name = basename($file);
    
    // header
    $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";
    
    // message & attachment
    $nmessage = "--".$uid."\r\n";
    $nmessage .= "Content-type:text/plain; charset=iso-8859-1\r\n";
    $nmessage .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
    $nmessage .= $message."\r\n\r\n";
    $nmessage .= "--".$uid."\r\n";
    $nmessage .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n";
    $nmessage .= "Content-Transfer-Encoding: base64\r\n";
    $nmessage .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
    $nmessage .= $content."\r\n\r\n";
    $nmessage .= "--".$uid."--";
    
    if (mail($mailto, $subject, $nmessage, $header)) {
        return true; // Or do something here
    } else {
      return false;
    }
    
  4. ==============================

    4.

    Swiftmailer는 이메일 주입을 자동으로 방지하고 첨부 파일을 쉽게 만들어주는 사용하기 쉬운 또 다른 스크립트입니다. 필자는 PHP의 내장 된 mail () 함수 사용을 강력히 권장하지 않습니다.

    사용:

    이제 메일을 보내야 할 때 코드를 추가하십시오.

    // Create the message
    $message = Swift_Message::newInstance()
        ->setSubject('Your subject')
        ->setFrom(array('webmaster@mysite.com' => 'Web Master'))
        ->setTo(array('receiver@example.com'))
        ->setBody('Here is the message itself')
        ->attach(Swift_Attachment::fromPath('myPDF.pdf'));
    
    //send the message          
    $mailer->send($message);
    

    자세한 정보와 옵션은 Swiftmailer 문서에서 찾을 수 있습니다.

  5. ==============================

    5.

    첨부 파일이있는 전자 메일을 보내려면 혼합 유형이 전자 메일에 포함되도록 지정하는 multipart / mixed MIME 형식을 사용해야합니다. 또한 multipart / alternative MIME 형식을 사용하여 일반 텍스트와 HTML 버전의 전자 메일을 보내려고합니다. 예제를 살펴보십시오.

    <?php 
    //define the receiver of the email 
    $to = 'youraddress@example.com'; 
    //define the subject of the email 
    $subject = 'Test email with attachment'; 
    //create a boundary string. It must be unique 
    //so we use the MD5 algorithm to generate a random hash 
    $random_hash = md5(date('r', time())); 
    //define the headers we want passed. Note that they are separated with \r\n 
    $headers = "From: webmaster@example.com\r\nReply-To: webmaster@example.com"; 
    //add boundary string and mime type specification 
    $headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""; 
    //read the atachment file contents into a string,
    //encode it with MIME base64,
    //and split it into smaller chunks
    $attachment = chunk_split(base64_encode(file_get_contents('attachment.zip'))); 
    //define the body of the message. 
    ob_start(); //Turn on output buffering 
    ?> 
    --PHP-mixed-<?php echo $random_hash; ?>  
    Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>" 
    
    --PHP-alt-<?php echo $random_hash; ?>  
    Content-Type: text/plain; charset="iso-8859-1" 
    Content-Transfer-Encoding: 7bit
    
    Hello World!!! 
    This is simple text email message. 
    
    --PHP-alt-<?php echo $random_hash; ?>  
    Content-Type: text/html; charset="iso-8859-1" 
    Content-Transfer-Encoding: 7bit
    
    <h2>Hello World!</h2> 
    <p>This is something with <b>HTML</b> formatting.</p> 
    
    --PHP-alt-<?php echo $random_hash; ?>-- 
    
    --PHP-mixed-<?php echo $random_hash; ?>  
    Content-Type: application/zip; name="attachment.zip"  
    Content-Transfer-Encoding: base64  
    Content-Disposition: attachment  
    
    <?php echo $attachment; ?> 
    --PHP-mixed-<?php echo $random_hash; ?>-- 
    
    <?php 
    //copy current buffer contents into $message variable and delete current output buffer 
    $message = ob_get_clean(); 
    //send the email 
    $mail_sent = @mail( $to, $subject, $message, $headers ); 
    //if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" 
    echo $mail_sent ? "Mail sent" : "Mail failed"; 
    ?>
    

    보시다시피 첨부 파일이 포함 된 이메일을 보내는 것은 쉽습니다. 앞의 예제에서 우리는 multipart / mixed MIME 타입을 가지고 있으며, 그 안에는 두 버전의 전자 메일을 지정하는 multipart / alternative MIME 타입이 있습니다. 메시지에 첨부 파일을 포함 시키려면 지정된 파일의 데이터를 문자열로 읽은 다음 base64로 인코딩하고 작은 덩어리로 분할하여 MIME 사양과 일치하는지 확인한 다음 첨부 파일로 포함시킵니다.

    여기에서 찍은.

  6. ==============================

    6.

    작업 개념 :

    if (isset($_POST['submit'])) {
        $mailto = $_POST["mailTo"];
        $from_mail = $_POST["fromEmail"];
        $replyto = $_POST["fromEmail"];
        $from_name = $_POST["fromName"];
        $message = $_POST["message"];
        $subject = $_POST["subject"];
    
        $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, "", $header)) {
            echo "<script>alert('Success');</script>"; // or use booleans here
        } else {
            echo "<script>alert('Failed');</script>";
        }
    }
    
  7. ==============================

    7.

    심하게 형식화 된 첨부 파일로 잠시 고생 한 후 다음 코드를 사용합니다.

    $email = new PHPMailer();
    $email->From      = 'from@somedomain.com';
    $email->FromName  = 'FromName';
    $email->Subject   = 'Subject';
    $email->Body      = 'Body';
    $email->AddAddress( 'to@somedomain.com' );
    $email->AddAttachment( "/path/to/file" , "filename.ext", 'base64', 'application/octet-stream' );
    $email->Send();
    
  8. ==============================

    8.

    이것은 나를 위해 작동합니다. 또한 여러 첨부 파일도 첨부합니다. 용이하게

    <?php
    
    if ($_POST && isset($_FILES['file'])) {
        $recipient_email = "recipient@yourmail.com"; //recepient
        $from_email = "info@your_domain.com"; //from email using site domain.
        $subject = "Attachment email from your website!"; //email subject line
    
        $sender_name = filter_var($_POST["s_name"], FILTER_SANITIZE_STRING); //capture sender name
        $sender_email = filter_var($_POST["s_email"], FILTER_SANITIZE_STRING); //capture sender email
        $sender_message = filter_var($_POST["s_message"], FILTER_SANITIZE_STRING); //capture message
        $attachments = $_FILES['file'];
    
        //php validation
        if (strlen($sender_name) < 4) {
            die('Name is too short or empty');
        }
        if (!filter_var($sender_email, FILTER_VALIDATE_EMAIL)) {
            die('Invalid email');
        }
        if (strlen($sender_message) < 4) {
            die('Too short message! Please enter something');
        }
    
        $file_count = count($attachments['name']); //count total files attached
        $boundary = md5("specialToken$4332"); // boundary token to be used
    
        if ($file_count > 0) { //if attachment exists
            //header
            $headers = "MIME-Version: 1.0\r\n";
            $headers .= "From:" . $from_email . "\r\n";
            $headers .= "Reply-To: " . $sender_email . "" . "\r\n";
            $headers .= "Content-Type: multipart/mixed; boundary = $boundary\r\n\r\n";
    
            //message text
            $body = "--$boundary\r\n";
            $body .= "Content-Type: text/plain; charset=ISO-8859-1\r\n";
            $body .= "Content-Transfer-Encoding: base64\r\n\r\n";
            $body .= chunk_split(base64_encode($sender_message));
    
            //attachments
            for ($x = 0; $x < $file_count; $x++) {
                if (!empty($attachments['name'][$x])) {
    
                    if ($attachments['error'][$x] > 0) { //exit script and output error if we encounter any
                        $mymsg = array(
                            1 => "The uploaded file exceeds the upload_max_filesize directive in php.ini",
                            2 => "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
                            3 => "The uploaded file was only partially uploaded",
                            4 => "No file was uploaded",
                            6 => "Missing a temporary folder");
                        die($mymsg[$attachments['error'][$x]]);
                    }
    
                    //get file info
                    $file_name = $attachments['name'][$x];
                    $file_size = $attachments['size'][$x];
                    $file_type = $attachments['type'][$x];
    
                    //read file 
                    $handle = fopen($attachments['tmp_name'][$x], "r");
                    $content = fread($handle, $file_size);
                    fclose($handle);
                    $encoded_content = chunk_split(base64_encode($content)); //split into smaller chunks (RFC 2045)
    
                    $body .= "--$boundary\r\n";
                    $body .= "Content-Type: $file_type; name=" . $file_name . "\r\n";
                    $body .= "Content-Disposition: attachment; filename=" . $file_name . "\r\n";
                    $body .= "Content-Transfer-Encoding: base64\r\n";
                    $body .= "X-Attachment-Id: " . rand(1000, 99999) . "\r\n\r\n";
                    $body .= $encoded_content;
                }
            }
        } else { //send plain email otherwise
            $headers = "From:" . $from_email . "\r\n" .
                    "Reply-To: " . $sender_email . "\n" .
                    "X-Mailer: PHP/" . phpversion();
            $body = $sender_message;
        }
    
        $sentMail = @mail($recipient_email, $subject, $body, $headers);
        if ($sentMail) { //output success or failure messages
            die('Thank you for your email');
        } else {
            die('Could not send mail! Please check your PHP mail configuration.');
        }
    }
    ?>
    
  9. ==============================

    9.

    위의 응답 중 어느 것도 지정된 첨부 형식 (응용 프로그램 / 옥텟 스트림)으로 인해 저에게 효과적이었습니다. PDF 파일로 최상의 결과를 얻으려면 application / pdf를 사용하십시오.

    <?php
    
    // just edit these 
    $to          = "email1@domain.com, email2@domain.com"; // addresses to email pdf to
    $from        = "sent_from@domain.com"; // address message is sent from
    $subject     = "Your PDF email subject"; // email subject
    $body        = "<p>The PDF is attached.</p>"; // email body
    $pdfLocation = "./your-pdf.pdf"; // file location
    $pdfName     = "pdf-file.pdf"; // pdf file name recipient will get
    $filetype    = "application/pdf"; // type
    
    // creates headers and mime boundary
    $eol = PHP_EOL;
    $semi_rand     = md5(time());
    $mime_boundary = "==Multipart_Boundary_$semi_rand";
    $headers       = "From: $from$eolMIME-Version: 1.0$eol" .
        "Content-Type: multipart/mixed;$eol boundary=\"$mime_boundary\"";
    
    // add html message body
    $message = "--$mime_boundary$eol" .
        "Content-Type: text/html; charset=\"iso-8859-1\"$eol" .
        "Content-Transfer-Encoding: 7bit$eol$eol$body$eol";
    
    // fetches pdf
    $file = fopen($pdfLocation, 'rb');
    $data = fread($file, filesize($pdfLocation));
    fclose($file);
    $pdf = chunk_split(base64_encode($data));
    
    // attaches pdf to email
    $message .= "--$mime_boundary$eol" .
        "Content-Type: $filetype;$eol name=\"$pdfName\"$eol" .
        "Content-Disposition: attachment;$eol filename=\"$pdfName\"$eol" .
        "Content-Transfer-Encoding: base64$eol$eol$pdf$eol--$mime_boundary--";
    
    // Sends the email
    if(mail($to, $subject, $message, $headers)) {
        echo "The email was sent.";
    }
    else {
        echo "There was an error sending the mail.";
    }
    
  10. ==============================

    10.

    나는 내 자신의 이메일 보내기 / 인코딩 기능을 작성했다. 이것은 PDF 첨부 파일을 보내는 나를 위해 잘 작동했습니다. 프로덕션에서 다른 기능을 사용하지 않았습니다.

    참고 : 헤더를 구분하기 위해 \ r \ n을 사용해야한다는 스펙이 매우 강하지 만, PHP_EOL을 사용할 때만 작동한다는 것을 알았습니다. 나는 리눅스에서만 이것을 테스트했다. YMMV

    <?php
    # $args must be an associative array
    #     required keys: from, to, body
    #          body can be a string or a [tree of] associative arrays. See examples below
    #     optional keys: subject, reply_to, cc, bcc
    # EXAMPLES:
    #    # text-only email:
    #    email2(array(
    #        'from' => 'noreply@foo.com',
    #        'to' => 'jason@jasonwoof.com',
    #        'subject' => 'test',
    #        # body will be text/plain because we're passing a string that doesn't start with '<'
    #        'body' => 'Hi, testing 1 2 3',
    #    ));
    #
    #    # html-only email
    #    email2(array(
    #        'from' => 'noreply@foo.com',
    #        'to' => 'jason@jasonwoof.com',
    #        'subject' => 'test',
    #        # body will be text/html because we're passing a string that starts with '<'
    #        'body' => '<h1>Hi!</h1>I like <a href="http://cheese.com">cheese</a>',
    #    ));
    #
    #    # text-only email (explicitly, in case first character is dynamic or something)
    #    email2(array(
    #        'from' => 'noreply@foo.com',
    #        'to' => 'jason@jasonwoof.com',
    #        'subject' => 'test',
    #        # body will be text/plain because we're passing a string that doesn't start with '<'
    #        'body' => array(
    #            'type' => 'text',
    #            'body' => $message_text,
    #        )
    #    ));
    #
    #    # email with text and html alternatives (auto-detected mime types)
    #    email2(array(
    #        'from' => 'noreply@foo.com',
    #        'to' => 'jason@jasonwoof.com',
    #        'subject' => 'test',
    #        'body' => array(
    #            'type' => 'alternatives',
    #            'body' => array(
    #                "Hi!\n\nI like cheese",
    #                '<h1>Hi!</h1><p>I like <a href="http://cheese.com">cheese</a></p>',
    #            )
    #        )
    #    ));
    #
    #    # email with text and html alternatives (explicit types)
    #    email2(array(
    #        'from' => 'noreply@foo.com',
    #        'to' => 'jason@jasonwoof.com',
    #        'subject' => 'test',
    #        'body' => array(
    #            'type' => 'alternatives',
    #            'body' => array(
    #                array(
    #                    'type' => 'text',
    #                    'body' => "Hi!\n\nI like cheese",
    #                ),
    #                array(
    #                    'type' => 'html',
    #                    'body' => '<h1>Hi!</h1><p>I like cheese</p>',
    #                ),
    #            )
    #        )
    #    ));
    #
    #    # email with an attachment
    #    email2(array(
    #        'from' => 'noreply@foo.com',
    #        'to' => 'jason@jasonwoof.com',
    #        'subject' => 'test',
    #        'body' => array(
    #            'type' => 'mixed',
    #            'body' => array(
    #                "Hi!\n\nCheck out this (inline) image",
    #                array(
    #                    'type' => 'image/png',
    #                    'disposition' => 'inline',
    #                    'body' => $image_data, # raw file contents
    #                ),
    #                "Hi!\n\nAnd here's an attachment",
    #                array(
    #                    'type' => 'application/pdf; name="attachment.pdf"',
    #                    'disposition' => 'attachment; filename="attachment.pdf"',
    #                    'body' => $pdf_data, # raw file contents
    #                ),
    #                "Or you can use shorthand:",
    #                array(
    #                    'type' => 'application/pdf',
    #                    'attachment' => 'attachment.pdf', # name for client (not data source)
    #                    'body' => $pdf_data, # raw file contents
    #                ),
    #            )
    #        )
    #    ))
    function email2($args) {
        if (!isset($args['from'])) { return 1; }
        $from = $args['from'];
        if (!isset($args['to'])) { return 2; }
        $to = $args['to'];
        $subject = isset($args['subject']) ? $args['subject'] : '';
        $reply_to = isset($args['reply_to']) ? $args['reply_to'] : '';
        $cc = isset($args['cc']) ? $args['cc'] : '';
        $bcc = isset($args['bcc']) ? $args['bcc'] : '';
    
        #FIXME should allow many more characters here (and do Q encoding)
        $subject = isset($args['subject']) ? $args['subject'] : '';
        $subject = preg_replace("|[^a-z0-9 _/#'.:&,-]|i", '_', $subject);
    
        $headers = "From: $from";
        if($reply_to) {
            $headers .= PHP_EOL . "Reply-To: $reply_to";
        }
        if($cc) {
            $headers .= PHP_EOL . "CC: $cc";
        }
        if($bcc) {
            $headers .= PHP_EOL . "BCC: $bcc";
        }
    
        $r = email2_helper($args['body']);
        $headers .= PHP_EOL . $r[0];
        $body = $r[1];
    
        if (mail($to, $subject, $body, $headers)) {
            return 0;
        } else {
            return 5;
        }
    }
    
    function email2_helper($body, $top = true) {
        if (is_string($body)) {
            if (substr($body, 0, 1) == '<') {
                return email2_helper(array('type' => 'html', 'body' => $body), $top);
            } else {
                return email2_helper(array('type' => 'text', 'body' => $body), $top);
            }
        }
        # now we can assume $body is an associative array
        # defaults:
        $type = 'application/octet-stream';
        $mime = false;
        $boundary = null;
        $disposition = null;
        $charset = false;
        # process 'type' first, because it sets defaults for others
        if (isset($body['type'])) {
            $type = $body['type'];
            if ($type === 'text') {
                $type = 'text/plain';
                $charset = true;
            } elseif ($type === 'html') {
                $type = 'text/html';
                $charset = true;
            } elseif ($type === 'alternative' || $type === 'alternatives') {
                $mime = true;
                $type = 'multipart/alternative';
            } elseif ($type === 'mixed') {
                $mime = true;
                $type = 'multipart/mixed';
            }
        }
        if (isset($body['disposition'])) {
            $disposition = $body['disposition'];
        }
        if (isset($body['attachment'])) {
            if ($disposition == null) {
                $disposition = 'attachment';
            }
            $disposition .= "; filename=\"{$body['attachment']}\"";
            $type .= "; name=\"{$body['attachment']}\"";
        }
        # make headers
        $headers = array();
        if ($top && $mime) {
            $headers[] = 'MIME-Version: 1.0';
        }
        if ($mime) {
            $boundary = md5('5sd^%Ca)~aAfF0=4mIN' . rand() . rand());
            $type .= "; boundary=$boundary";
        }
        if ($charset) {
            $type .= '; charset=' . (isset($body['charset']) ? $body['charset'] : 'UTF-8');
        }
        $headers[] = "Content-Type: $type";
        if ($disposition !== null) {
            $headers[] = "Content-Disposition: {$disposition}";
        }
    
        $data = '';
        # return array, first el is headers, 2nd is body (php's mail() needs them separate)
        if ($mime) {
            foreach ($body['body'] as $sub_body) {
                $data .= "--$boundary" . PHP_EOL;
                $r = email2_helper($sub_body, false);
                $data .= $r[0] . PHP_EOL . PHP_EOL; # headers
                $data .= $r[1] . PHP_EOL . PHP_EOL; # body
            }
            $data .= "--$boundary--";
        } else {
            if(preg_match('/[^\x09\x0A\x0D\x20-\x7E]/', $body['body'])) {
                $headers[] = "Content-Transfer-Encoding: base64";
                $data .= chunk_split(base64_encode($body['body']));
            } else {
                $data .= $body['body'];
            }
        }
        return array(join(PHP_EOL, $headers), $data);
    }
    
  11. ==============================

    11.

                $to = "to@gmail.com";
                $subject = "Subject Of The Mail";
                $message = "Hi there,<br/><br/>This is my message.<br><br>";
    
                $headers = "From: From-Name<from@gmail.com>";
    // boundary
                $semi_rand = md5(time());
                $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
    
    // headers for attachment
                $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";
    
    // multipart boundary
                $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/html; charset=ISO-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n";
    
                    $message .= "--{$mime_boundary}\n";
                    $filepath = 'uploads/'.$_FILES['image']['name'];
                    move_uploaded_file($_FILES['image']['tmp_name'], $filepath); //upload the file
                    $filename = $_FILES['image']['name'];
                    $file = fopen($filepath, "rb");
                    $data = fread($file, filesize($filepath));
                    fclose($file);
                    $data = chunk_split(base64_encode($data));
                    $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$filename\"\n" .
                            "Content-Disposition: attachment;\n" . " filename=\"$filename\"\n" .
                            "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
                    $message .= "--{$mime_boundary}\n";
    
    mail($to, $subject, $message, $headers);
    
  12. ==============================

    12.

    이 페이지에서 코드 복사 - mail ()

    그는 나중에 호출 할 수있는 mail_attachment 함수를 만들기 시작합니다. 나중에 첨부 파일 코드로 처리합니다.

    <?php
    function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) {
        $file = $path.$filename;
        $file_size = filesize($file);
        $handle = fopen($file, "r");
        $content = fread($handle, $file_size);
        fclose($handle);
        $content = chunk_split(base64_encode($content));
        $uid = md5(uniqid(time()));
        $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";
        $header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
        $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
        $header .= $message."\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";
        $header .= $content."\r\n\r\n";
        $header .= "--".$uid."--";
        if (mail($mailto, $subject, "", $header)) {
            echo "mail send ... OK"; // or use booleans here
        } else {
            echo "mail send ... ERROR!";
        }
    }
    
    //start editing and inputting attachment details here
    $my_file = "somefile.zip";
    $my_path = "/your_path/to_the_attachment/";
    $my_name = "Olaf Lederer";
    $my_mail = "my@mail.com";
    $my_replyto = "my_reply_to@mail.net";
    $my_subject = "This is a mail with attachment.";
    $my_message = "Hallo,\r\ndo you like this script? I hope it will help.\r\n\r\ngr. Olaf";
    mail_attachment($my_file, $my_path, "recipient@mail.org", $my_mail, $my_name, $my_replyto, $my_subject, $my_message);
    ?>
    

    그는 자신의 페이지에 대한 자세한 내용을 알고 의견 섹션에 몇 가지 문제에 답합니다.

  13. ==============================

    13.

    100 % 작동 PHP에서 첨부 파일과 함께 이메일을 보내는 작업 :

    if (isset($_POST['submit'])) {
      extract($_POST);
      require_once('mail/class.phpmailer.php');
    
      $subject = "$name Applied For - $position";
      $email_message = "<div>Thanks for Applying ....</div> ";
    
      $mail = new PHPMailer;
      $mail->IsSMTP(); // telling the class to use SMTP
      $mail->Host = "mail.companyname.com"; // SMTP server
      $mail->SMTPDebug = 0;
      $mail->SMTPAuth = true;
      $mail->SMTPSecure = "ssl";
      $mail->Host = "smtp.gmail.com";
      $mail->Port = 465;
      $mail->IsHTML(true);
      $mail->Username = "info@companyname.com";  // GMAIL username
      $mail->Password = "mailPassword";          // GMAIL password
    
      $mail->SetFrom('info@companyname.com', 'new application submitted');
      $mail->AddReplyTo("name@yourdomain.com","First Last");
      $mail->Subject = "your subject";
    
      $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
    
      $mail->MsgHTML($email_message);
    
      $address = 'info@companyname.com';
      $mail->AddAddress($address, "companyname");
    
      $mail->AddAttachment($_FILES['file']['tmp_name'], $_FILES['file']['name']);      // attachment
    
      if (!$mail->Send()) {
        /* Error */
        echo 'Message not Sent! Email at info@companyname.com';
      } else {
        /* Success */
        echo 'Sent Successfully! <b> Check your Mail</b>';
      }
    }
    

    첨부 파일과 함께 보내는 Google smtp 메일에이 코드를 사용했습니다 ....

    참고 : 여기에서 PHPMailer 라이브러리 다운로드 -> https://github.com/PHPMailer/PHPMailer

  14. from https://stackoverflow.com/questions/12301358/send-attachments-with-php-mail by cc-by-sa and MIT lisence