테스트 사이트 - 개발 중인 베타 버전입니다

폼메일 전송 안됨 채택완료

우왕우왕 3년 전 조회 1,988

test_form.html

</p>

<p><!DOCTYPE html ></p>

<p><html></p>

<p><head></p>

<p>    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /></p>

<p>    <meta http-equiv="Content-Script-Type" content="text/javascript" /></p>

<p>    <meta http-equiv="Cache-Control" content="No-Cache" /></p>

<p>    <meta http-equiv="Pragma" content="No-Cache" /></p>

<p>    <title>메일쓰기</title></p>

<p>    <script src="//code.jquery.com/jquery.min.js"></script></p>

<p>    <script src="//cdn.ckeditor.com/4.4.7/full/ckeditor.js"></script></p>

<p>    <script type="text/javascript"></p>

<p>        $(document).ready(function(){</p>

<p>            if(parent.resize_layer) parent.resize_layer($('#cBody').height());</p>

<p>            CKEDITOR.config.width = 770;</p>

<p>            CKEDITOR.config.height = 440;</p>

<p>            CKEDITOR.config.removePlugins = 'elementspath,resize';</p>

<p>            CKEDITOR.config.toolbar = [</p>

<p>                { name: 'styles', items: [ 'Styles', 'Font', 'FontSize' ] },</p>

<p>                { name: 'colors', items: [ 'TextColor', 'BGColor' ] },</p>

<p>                { name: 'tools', items: [ 'Maximize', 'ShowBlocks' ] },</p>

<p>                { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ], items: [ 'Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'RemoveFormat' ] },</p>

<p>                { name: 'insert', items: [ 'Image', 'Table', 'HorizontalRule', 'SpecialChar' ] }</p>

<p>            ];</p>

<p>            CKEDITOR.config.removeButtons = 'Source,Save,NewPage,Print,Templates,Find,Replace,SelectAll,Scayt,HiddenField,Outdent,Indent,Blockquote,CreateDiv,BidiLtr,BidiRtl,Language,Anchor,Flash,Smiley,PageBreak,Iframe,Format,Subscript,Superscript,About';</p>

<p>            var editObj = CKEDITOR.replace( 'message', { filebrowserUploadUrl: 'upload.php', contentsCss:'p{margin:0;}' } );</p>

<p>            editObj.on('key', function(evt){</p>

<p>                var cLen = editObj.getData().length;</p>

<p>                if(cLen > 65000) {</p>

<p>                    alert('65000자를 넘을 수 없습니다.');</p>

<p>                    editObj.execCommand('undo');</p>

<p>                }</p>

<p>                else {</p>

<p>                    editObj.fire('saveSnapshot');</p>

<p>                }</p>

<p>            });</p>

<p>        });</p>

<p>        function mail_check(v, n) {</p>

<p>            var regEmail = /\w{2,}[@][\w\-]{2,}([.]([\w\-]{2,})){1,3}$/;</p>

<p>            var tmps = new Array();</p>

<p>            if(v.indexOf(',') > -1) {</p>

<p>                tmps = v.split(',');</p>

<p>            }</p>

<p>            else if(v.indexOf(';') > -1) {</p>

<p>                tmps = v.split(';');</p>

<p>            }</p>

<p>            else {</p>

<p>                tmps.push(v);</p>

<p>            }</p>

<p>            for(var i=0; i<tmps.length; i++) {</p>

<p>                if(tmps[i].indexOf('<') > -1 && tmps[i].indexOf('>') > -1) {</p>

<p>                    tmps[i] = tmps[i].substring(tmps[i].indexOf('<')+1, tmps[i].indexOf('>'));</p>

<p>                }</p>

<p>                if(!regEmail.test(tmps[i])) {</p>

<p>                    return false;</p>

<p>                }</p>

<p>            }</p>

<p>            if(n == 1 && tmps.length != 1) {</p>

<p>                return false;</p>

<p>            }</p>

<p>            return true;</p>

<p>        }</p>

<p>        function mail_proc(f) {</p>

<p>            if(!f.femail.value) {</p>

<p>                alert('보내는이 메일 주소를 입력하세요.');</p>

<p>                f.femail.focus();</p>

<p>                return false;</p>

<p>            }</p>

<p>            if(!mail_check(f.femail.value, 1)) {</p>

<p>                alert('이메일 주소가 유효하지 않습니다.');</p>

<p>                f.femail.focus();</p>

<p>                return false;</p>

<p>            }</p>

<p>            if(!f.temail.value) {</p>

<p>                alert('받는이 메일 주소를 입력하세요.');</p>

<p>                f.temail.focus();</p>

<p>                return false;</p>

<p>            }</p>

<p>            else {</p>

<p>                if(!mail_check(f.temail.value)) {</p>

<p>                    alert('메일 주소가 유효하지 않습니다.');</p>

<p>                    f.temail.focus();</p>

<p>                    return false;</p>

<p>                }</p>

<p>            }</p>

<p>            if(f.remail.value) {</p>

<p>                if(!mail_check(f.remail.value)) {</p>

<p>                    alert('메일 주소가 유효하지 않습니다.');</p>

<p>                    f.remail.focus();</p>

<p>                    return false;</p>

<p>                }</p>

<p>            }</p>

<p>            if(f.hemail.value) {</p>

<p>                if(!mail_check(f.hemail.value)) {</p>

<p>                    alert('메일 주소가 유효하지 않습니다.');</p>

<p>                    f.hemail.focus();</p>

<p>                    return false;</p>

<p>                }</p>

<p>            }</p>

<p>            if(!f.subject.value) {</p>

<p>                alert('제목을 입력하세요.');</p>

<p>                f.subject.focus();</p>

<p>                return false;</p>

<p>            }</p>

<p>            var editObj = CKEDITOR.instances.message;</p>

<p>            if(editObj.getData().length == 0) {</p>

<p>                alert('메일 내용을 입력하세요.');</p>

<p>                editObj.focus();</p>

<p>                return false;</p>

<p>            }</p>

<p>            f.target = 'frame_mail_proc';</p>

<p>            f.submit();</p>

<p>            return false;</p>

<p>        }</p>

<p>    </script></p>

<p></head></p>

<p><body id="cBody"></p>

<p>    <div id="cLayer" style="width:100%;height:auto;padding-left:20px;padding-top:20px;padding-bottom:5px;font-size:10pt;font-family:돋움;" align="left"></p>

<p>        <div id="mailLayer" style="width:100%;height:auto;" align="center"></p>

<p>            <div style="width:770px;padding-bottom:10px;font-size:12pt;font-weight:bold;" align="left"></p>

<p>                폼메일 쓰기</p>

<p>            </div></p>

<p>            <table></p>

<p>                <form name="mailForm" method="post" enctype="multipart/form-data" action="test_mail.php" onsubmit="return mail_proc(this);"></p>

<p>                <tr></p>

<p>                    <td width="110" align="left">보내는이</td></p>

<p>                    <td align="left"><input type="text" name="femail" style="width:658px;" value="<?=$femail?>" /></td></p>

<p>                </tr></p>

<p>                <tr></p>

<p>                    <td width="110" align="left">받는이</td></p>

<p>                    <td align="left"><input type="text" name="temail" style="width:658px;" value="test@naver.com" /></td></p>

<p>                </tr></p>

<p>                <tr></p>

<p>                    <td width="110" align="left">참조</td></p>

<p>                    <td align="left"><input type="text" name="remail" style="width:658px;" /></td></p>

<p>                </tr></p>

<p>                <tr></p>

<p>                    <td width="110" align="left">숨은참조</td></p>

<p>                    <td align="left"><input type="text" name="hemail" style="width:658px;" /></td></p>

<p>                </tr></p>

<p>                <tr></p>

<p>                    <td width="110" align="left">제목</td></p>

<p>                    <td align="left"><input type="text" name="subject" style="width:658px;" /></td></p>

<p>                </tr></p>

<p>                <tr></p>

<p>                    <td width="110" align="left">파일첨부</td></p>

<p>                    <td align="left"><input type="file" name="attach" /></td></p>

<p>                </tr></p>

<p>                <tr></p>

<p>                    <td colspan="2" height="2"></td></p>

<p>                </tr></p>

<p>                <tr></p>

<p>                    <td colspan="2" align="left"></p>

<p>                        <textarea name="message"><?=$message?></textarea></p>

<p>                    </td></p>

<p>                </tr></p>

<p>                <tr></p>

<p>                    <td colspan="2" height="15"></td></p>

<p>                </tr></p>

<p>                <tr></p>

<p>                    <td colspan="2" align="center"></p>

<p>                        <input type="submit" value="메일발송" onclick="return mail_proc(this.form);" /></p>

<p>                    </td></p>

<p>                </tr></p>

<p>                </form></p>

<p>            </table></p>

<p>            <div style="display:none;"></p>

<p>                <iframe src="" name="frame_mail_proc" id="frame_mail_proc" frameborder=0 margin=0 allowTransparency=false width="100%" height="100%"></iframe></p>

<p>            </div></p>

<p>        </div></p>

<p>    </div></p>

<p></body></p>

<p></html></p>

<p>

 

test_mail.php

</p>

<p><?php</p>

<p>    $MAXLIMIT = 5242880; // 5MByte limit</p>

<p>    if($_FILES['attach']['size'] > $MAXLIMIT) {</p>

<p>        $ment = "파일 사이즈가 ".($MAXLIMIT/1024/1024)."MByte를 초과하였습니다.\\n";</p>

<p>        $ment .= ($MAXLIMIT/1024/1024)."MByte 이하의 파일만 첨부가능합니다.";</p>

<p>        echo "<script>alert('".$ment."');</script>";</p>

<p>        return;</p>

<p>    }</p>

<p>    if($_FILES['attach']) {</p>

<p>        $attach = $_FILES['attach'];</p>

<p>        $name = preg_replace("/\.(php|phtm|htm|cgi|pl|exe|jsp|asp|inc)/i", "$0-x", $attach['name']);</p>

<p>        $name = substr(md5(uniqid($_SERVER['REQUEST_TIME'])),0,8).'_'.str_replace('%', '', urlencode($name));</p>

<p>        $ATTACH_DIR = "./attach/mail/";</p>

<p>        $dest_file  = $ATTACH_DIR.$name;</p>

<p>        $url = $ATTACH_DIR.$name;</p>

<p>        if(!is_dir($ATTACH_DIR)) {</p>

<p>            if(@mkdir($ATTACH_DIR, 0777, true)) {</p>

<p>                if(is_dir($ATTACH_DIR)) {</p>

<p>                    @chmod($ATTACH_DIR, 0777);</p>

<p>                }</p>

<p>            }</p>

<p>        }</p>

<p>        if(move_uploaded_file($attach['tmp_name'], $dest_file)) {</p>

<p>            $attach_url = $url;</p>

<p>            $attach_name = $attach['name'];</p>

<p>            $attach_size = $attach['size'];</p>

<p>            $attach_type = $attach['type'];</p>

<p>        }</p>

<p>    }</p>

<p>    </p>

<p>    $femail = $_POST['femail'];</p>

<p>    $temail = $_POST['temail'];</p>

<p>    $remail = $_POST['remail'];</p>

<p>    $hemail = $_POST['hemail'];</p>

<p>    $subject = $_POST['subject'];</p>

<p>    $message = $_POST['message'];</p>

<p>    </p>

<p>    $boundary = "----" . uniqid("part"); // 구분자</p>

<p>    </p>

<p>    // --- 헤더 --- //</p>

<p>    $headers = "Return-Path: ".str_replace("\\", "", $femail)."\r\n";</p>

<p>    $headers .= "From: ".str_replace("\\", "", $femail)."\r\n";</p>

<p>    if($remail) {</p>

<p>        $headers .= "Cc: ".str_replace("\\", "", $remail)."\r\n";</p>

<p>    }</p>

<p>    if($hemail) {</p>

<p>        $headers .= "Bcc: ".str_replace("\\", "", $hemail)."\r\n";</p>

<p>    }</p>

<p>    </p>

<p>    if($attach_url && $attach_name) { // --- 첨부파일 --- //</p>

<p>        $filename=$attach_name;</p>

<p>        $fp = fopen($attach_url,"r");</p>

<p>        $file = fread($fp,$attach_size);</p>

<p>        fclose($fp);</p>

<p>        if ($attach_type == ""){</p>

<p>            $attach_type = "application/octet-stream";</p>

<p>        }</p>

<p>        // --- 헤더 --- //</p>

<p>        $headers .= "MIME-Version: 1.0\r\n";</p>

<p>        $headers .= "Content-Type: Multipart/mixed; boundary=\"$boundary\"";</p>

<p>        // --- 본문 --- // </p>

<p>        $mailbody = "This is a multi-part message in MIME format.\r\n\r\n";</p>

<p>        $mailbody .= "--$boundary\r\n";</p>

<p>        $mailbody .= "Content-Type: text/html; charset=utf-8\r\n";</p>

<p>        $mailbody .= "Content-Transfer-Encoding: base64\r\n\r\n";</p>

<p>        $mailbody .= chunk_split(base64_encode(str_replace("\\", "", $message))) . "\r\n";</p>

<p>        // --- 첨부 --- // </p>

<p>        $mailbody .= "--$boundary\r\n"; </p>

<p>        $mailbody .= "Content-Type: ".$attach_type."; name=\"".$filename."\"\r\n";</p>

<p>        $mailbody .= "Content-Transfer-Encoding: base64\r\n";</p>

<p>        $mailbody .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";</p>

<p>        $mailbody .= base64_encode($file)."\r\n\r\n";</p>

<p>        $mailbody .= "--$boundary--";</p>

<p>    }</p>

<p>    else {</p>

<p>        // --- 헤더 --- // </p>

<p>        $headers .= "MIME-Version: 1.0\r\n"; </p>

<p>        $headers .= "Content-Type: Multipart/alternative; boundary = \"$boundary\"";</p>

<p>        // --- 본문 --- //</p>

<p>        $mailbody = "--$boundary\r\n"; </p>

<p>        $mailbody .= "Content-Type: text/html; charset=utf-8\r\n";</p>

<p>        $mailbody .= "Content-Transfer-Encoding: base64\r\n\r\n";</p>

<p>        $mailbody .= chunk_split(base64_encode(str_replace("\\", "", $message))) . "\r\n";</p>

<p>        $mailbody .= "--$boundary--\r\n\r\n"; </p>

<p>    }</p>

<p>    </p>

<p>    $ret = mail($temail, $subject, $mailbody, $headers);</p>

<p>    if(!$ret) {</p>

<p>        $msg = "메일 발송을 실패하였습니다.";</p>

<p>    }</p>

<p>    else {</p>

<p>        $msg = "메일을 발송하였습니다.";</p>

<p>    }</p>

<p>?></p>

<p><!DOCTYPE html ></p>

<p><html></p>

<p><head></p>

<p>    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /></p>

<p>    <meta http-equiv="Content-Script-Type" content="text/javascript" /></p>

<p>    <meta http-equiv="Cache-Control" content="No-Cache" /></p>

<p>    <meta http-equiv="Pragma" content="No-Cache" /></p>

<p>    <script>alert('<?=$msg?>');</script>";</p>

<p></head></p>

<p></html></p>

<p>

 

https://itrooms.tistory.com/m/183

위 페이지를 참고하여 폼메일을 작성하여 몇년간 정상적으로 사용중이었습니다.

그런데 갑자기 어떤 메일도 전송되지 않는데 문제를 모르겠습니다ㅠㅠ

타 도메인에서 같은 폼메일 전송시 잘작동되고 있습니다ㅠㅠ

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
s
sinbi Expert
3년 전

타도메인에선 잘 되는데, 특정도메인만 안 되는 거면...

서버 apm 버전 특히 php 버전 차이 때문이지 않을까요.

 

잘 되는 서버 apm 버전

안 되는 서버 apm 버전

각각 어떻게 되는지?

로그인 후 평가할 수 있습니다

답변에 대한 댓글 4개

우왕우왕
3년 전
php 버전 확인해봤는데 이렇게 나옵니다!!

잘되는 서버 PHP Version 7.0.0p1
안되는 서버 PHP Version 5.5.17p1

php 버전을 업그레이드하면 될까요?
s
sinbi
3년 전
아마도 PHP 버전 때문이거나, 해당 도메인을 메일 수신사이트에서 막았거나 둘 중 하나일 듯 합니다.

테스트해보니 아주 잘 작동하네요. (PHP 7.2.X 환경)
https://test.homzzang.com/test_form.html

PS.
아래 코드 입력값 필터링이 필요해 보입니다.
그누보드 회원가입 소스 부분 참고해 보세요.

$femail = $_POST['femail'];
$temail = $_POST['temail'];
$remail = $_POST['remail'];
$hemail = $_POST['hemail'];
$subject = $_POST['subject'];
$message = $_POST['message'];
우왕우왕
3년 전
감사합니다.
네이버로 메일을 받고있는데 네이버에서는 스팸 차단되어있지 않습니다ㅠㅠ
스팸메일함으로도 수신되지 않고있어요...

ps로 달아주신 입력값 필터링은 왜 수정이 필요한 부분인지도 알려주실수있을까요...?
s
sinbi
3년 전
외부에서 공격코드를 넣을 소지가 있어서라고 알고 있습니다.
수신 사이트가 막는지 확인할 방법은 없는 걸로 압니다.
네이버 포털 같은 경우 잘 알려주지도 않아요.

다만, 테스트해보니 잘 보내지는 걸로 봐선 (도메인/아이피) 문제일 가능성이 커 보이네요.
즉, 누가 저 폼을 이용해 악성 메일을 보낸 경우, 포털은 해당 발송지를 차단하거든요.

ps. 테스트 코드 링크는 삭제하였습니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인