파일 첨부하여 메일 보내기

프로그래밍/PHP|2015. 6. 23. 15:25
반응형

<?php
        /*
        ** 함수 : makeAttachment
        ** 입력 : ARRAY attachment
        ** 출력 : STRING
        ** 설명 : 하나의 첨부에 대한 헤더들과 데이터를 돌려준다.
        ** 입력 배열에는 name, type, content 원소들이
        ** 있어야 한다. 첨부파일은 무조건 base64로 인코딩한다.
        */
        function makeAttachment($attachment)
        {
                $headers = "Content-Type: " . $attachment["type"];
                
                if($attachment["name"] != "")
                {
                        $headers .= "; name=\"{$attachment["name"]}\"";
                }       
                
                $headers .= "\r\n";

                $headers .= "Content-Transfer-Encoding : base64\r\n";

                $headers .= "\r\n";
                $headers .= chunk_split(base64_encode($attachment["content"]));
                $headers .= "\r\n";

                return($headers);
        }
        
        /*
        ** 함수 : mailAttachment
        ** 입력 : STRING to, STRING from, STRING subject, ARRAY attachment
        ** 출력 : 없음
        ** 설명 : 파일이 첨부된 메세지를 전송, attachment 는 2차원 배열이다
        ** 각 원소는 type, name, content 를 원소로 하는 연관 배열이다.
        */
        function mailAttachment($to, $from, $subject, $attachment)
        {
                // From : 헤더를 추가
                $headers = "FROM : $from\r\n";

                // MIME 버전 1.0을 지정
                $headers .= "MIME-Version: 1.0\r\n";

                // 첨부파일이 여러 개인 경우 특별한 처리가 필요하다.
                if(count($attachment) > 1)
                {
                        //첨부파일이 여러 개인 경우 특별한 처리가 필요하다.
                        $boundary .= uniqid("COREPHP");

                        $headers .= "Content-Type: multipart/mixed";
                        $headers .= "; boundary = $boundary\r\n\r\n";
                        $headers .= "This is a MIME encoded message. \r\n\r\n";
                        $headers .= "--$boundary";

                        foreach($attachment as $a)
                        {
                                $headers .= "\r\n";
                                $headers .= makeAttachment($a);
                                $headers .= "--$boundary";
                        }
                        $headers .= "--\r\n";
                }
                else
                {
                        $headers .= makeAttachment($attachment[0]);
                }
                // 메시지를 보낸다.
                mail($to, $subject, "", $headers);
        }
        // 메시지 본문과 형식을 지정
       $bodyText = "한글 is best text.";

       $bodyText = iconv('utf-8', 'euc-kr', $bodyText);   // 문자셋 설정하여 보내면 한글이 본문 내용이 안깨집니다.

       $attach[] = array("content"=>"$bodyText","type"=>"text/plain");  // 마지막을 text/html 로 바꾸면 본문에 html 적용 가능

 

        // 첨부목록에 스크립트를 추가
        //******************************************
        //         mail 인자값        *************
        //*****************************************     
        $fileName = "/tmp/sales.xls";
        $mailTo = "받을놈 메일주소";
        $mailFrom = "보낸놈 메일주소";
        $mailTitle = "메일제목 ";

        $mailTitle = "=?UTF-8?B?".base64_encode($mailTitle)."?=";  // 문자셋 설정하여 보내면 한글이 안깨집니다. (깨진 코드 아님)

        $fp = fopen($fileName, "r");
        $attach[] = array("name"=>basename($fileName),
                        "content"=>fread($fp, filesize($fileName)),
                        "type"=>"application/octet-stream");
        fclose($fp);

        // send message maru
        mailAttachment($mailTo,$mailFrom,$mailTitle,$attach)
?>


[출처] http://blog.naver.com/marufloor/33446917

반응형

댓글()