폼메일 전송 안됨 채택완료
우왕우왕
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 포인트
sinbi
Expert
3년 전
타도메인에선 잘 되는데, 특정도메인만 안 되는 거면...
서버 apm 버전 특히 php 버전 차이 때문이지 않을까요.
잘 되는 서버 apm 버전
안 되는 서버 apm 버전
각각 어떻게 되는지?
로그인 후 평가할 수 있습니다
답변에 대한 댓글 4개
�
우왕우왕
3년 전
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'];
테스트해보니 아주 잘 작동하네요. (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로 달아주신 입력값 필터링은 왜 수정이 필요한 부분인지도 알려주실수있을까요...?
네이버로 메일을 받고있는데 네이버에서는 스팸 차단되어있지 않습니다ㅠㅠ
스팸메일함으로도 수신되지 않고있어요...
ps로 달아주신 입력값 필터링은 왜 수정이 필요한 부분인지도 알려주실수있을까요...?
s
sinbi
3년 전
외부에서 공격코드를 넣을 소지가 있어서라고 알고 있습니다.
수신 사이트가 막는지 확인할 방법은 없는 걸로 압니다.
네이버 포털 같은 경우 잘 알려주지도 않아요.
다만, 테스트해보니 잘 보내지는 걸로 봐선 (도메인/아이피) 문제일 가능성이 커 보이네요.
즉, 누가 저 폼을 이용해 악성 메일을 보낸 경우, 포털은 해당 발송지를 차단하거든요.
ps. 테스트 코드 링크는 삭제하였습니다.
수신 사이트가 막는지 확인할 방법은 없는 걸로 압니다.
네이버 포털 같은 경우 잘 알려주지도 않아요.
다만, 테스트해보니 잘 보내지는 걸로 봐선 (도메인/아이피) 문제일 가능성이 커 보이네요.
즉, 누가 저 폼을 이용해 악성 메일을 보낸 경우, 포털은 해당 발송지를 차단하거든요.
ps. 테스트 코드 링크는 삭제하였습니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
잘되는 서버 PHP Version 7.0.0p1
안되는 서버 PHP Version 5.5.17p1
php 버전을 업그레이드하면 될까요?