이글(본문글) 을 메일보내기 입니다.(베타버전) > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

이글(본문글) 을 메일보내기 입니다.(베타버전) 정보

이글(본문글) 을 메일보내기 입니다.(베타버전)

본문

관련 링크 : http://sir.co.kr/bbs/board.php?bo_table=g4_qa&wr_id=55278

참고사항 :
현재 보고있는 글을 메일 보내기 이며 제 계정에서 테스트할 여건이 안되어
테스트를 못해봤으므로 문제점이 있을 가능성이 있으므로 사용 과정에서
오류를 점검 하신후 피드백과  최적화를 부탁 드립니다.

그리고 설명을 참조 하면 게시판 환경 설정에서 제어가 가능 하므로 참고 바랍니다.

사용방법 :
게시판 스킨의 view.skin.php 의 적당한 위치에 아래의 코드를 추가한후

<?// if ($board['bo_5']=='on') { //링크출력 게시판별로 사용할지?>
<?// if ($member[mb_level] > $board[bo_6]) { //링크출력 레벨제한?>
<br><a href="javascript:win_comment('<?=$board_skin_path?>/mail.skin.php?bo_table=<?=$bo_table?>&wr_id=<?=$wr_id?>');">이글을 메일보내기</a>
<? //}} ?>


아래의 코드를 전부 긁어서 mail.skin.php 이라는 이름으로 만든후
사용중인 게시판 스킨 안으로 업로드 합니다.


<?
$g4_path = "../../..";
include_once("$g4_path/common.php");

if (!$config[cf_email_use])
    alert_close("환경설정에서 \'메일발송 사용\'에 체크하셔야 메일을 발송할 수 있습니다.\\n\\n관리자에게 문의하시기 바랍니다.");

if (!$is_member && $config[cf_formmail_is_member]) 
    alert_close("회원만 이용하실 수 있습니다.");

if ($is_member && !$member[mb_open] && $is_admin != "super")
    alert_close("자신의 정보를 공개하지 않으면 다른분에게 메일을 보낼 수 없습니다.\\n\\n정보공개 설정은 회원정보수정에서 하실 수 있습니다.");

$sendmail_count = (int)get_session('ss_sendmail_count') + 1;
if ($sendmail_count > 3)
    alert_close('한번 접속후 일정수의 메일만 발송할 수 있습니다.\n\n계속해서 메일을 보내시려면 다시 로그인 또는 접속하여 주십시오.');

$g4[title] =$group[gr_subject] ." > ". $board[bo_subject]. " > 메일보내기";
include_once("$g4[path]/head.sub.php");

if (!isset($type))
    $type = 0;

$type_checked[0] = $type_checked[1] = $type_checked[2] = "";
$type_checked[$type] = "checked";

$member_skin_path = "$g4[path]/skin/member/$config[cf_member_skin]";

// 글이 없을 경우 해당 게시판 목록으로 이동
if (!$write[wr_id]) {
$msg = "글이 존재하지 않습니다.\\n\\n글이 삭제되었거나 이동된 경우입니다.";
if ($cwin)
alert_close($msg);
else
alert_close($msg);
}

if (!$is_member && $config[cf_formmail_is_member]) {
    alert_close("회원만 이용하실 수 있습니다.");
}

/*
//이글을 메일 보내기 회원 레벨권한을 게시판설정 여분필드 6 의 값으로 대조 함
if ($member[mb_level] < $board[bo_6]) {
if ($member[mb_id])
alert_close("권한이 없습니다.");
else
alert_close("권한이 없습니다.");
}
*/
  // 자신의 글이거나 관리자라면 통과
    if (($write[mb_id] && $write[mb_id] == $member[mb_id]) || $is_admin)
        ;
    else
    {
        // 비밀글이라면
        if (strstr($write[wr_option], "secret"))
        {
            // 회원이 비밀글을 올리고 관리자가 답변글을 올렸을 경우
            // 회원이 관리자가 올린 답변글을 바로 볼 수 없던 오류를 수정
            $is_owner = false;
            if ($write[wr_reply] && $member[mb_id])
            {
                $sql = " select mb_id from $write_table
                          where wr_num = '$write[wr_num]'
                            and wr_reply = ''
                            and wr_is_comment = '0' ";
                $row = sql_fetch($sql);
                if ($row[mb_id] == $member[mb_id])
                    $is_owner = true;
            }

            $ss_name = "ss_secret_{$bo_table}_$write[wr_num]";
           
            if (!$is_owner)
            {
                if (!get_session($ss_name))
                  alert_close("권한이 없습니다.");
            }

            set_session($ss_name, TRUE);
        }
    }
//내용보기 권한검사
if ($member[mb_level] < $board[bo_read_level]) {
if ($member[mb_id])
alert_close("권한이 없습니다.");
else
alert_close("권한이 없습니다.");
}

include_once("$g4[path]/head.sub.php");

$view = get_view($write, $board, $member_skin_path);
$titles = get_text($view[wr_subject]);
$contents =  get_text($view[wr_content]);

//게시판설정  여분필드7에 on 값이 있으면 수정불가
if ($board['bo_7'] =='on') {
$readonlys = " readonly";
} else {
$readonlys = "";
}
?>

<table width="790" height="50" border="0" cellpadding="0" cellspacing="0">
    <tr>
        <td align="center" valign="middle" bgcolor="#EBEBEB"><table width="590" height="40" border="0" cellspacing="0" cellpadding="0">
                <tr>
                    <td width="25" align="center" bgcolor="#FFFFFF" ></td>
                    <td width="35" align="left" bgcolor="#FFFFFF" ><img src="<?=$member_skin_path?>/img/icon_01.gif" width="5" height="5"></td>
                    <td width="680" bgcolor="#FFFFFF" ><font color="#666666"><b><?=$g4[title]?></b></font></td>
                </tr>
            </table></td>
    </tr>
</table>

<? if ($mode =='') { ?>
<form name="formmails" method="post" enctype="multipart/form-data">
<input type="hidden" name="bo_table" value="<?=$bo_table?>">
<input type="hidden" name="wr_id" value="<?=$wr_id?>">
<input type="hidden" name="mode" value="on">
<table width="790" height="50" border="0" cellpadding="0" cellspacing="0">

                <tr>
                    <td width="120" height="37" align="center"><b>받는이</b></td>
                    <td width="10" valign="bottom"><img src="<?=$member_skin_path?>/img/l.gif" width="1" height="8"></td>
                    <td width="590"><input type=text style='width:40%;' name='emails' required email itemname='E-mail'>
<br><br>받을분의 이메일 주소를 정확하게 입력 합니다.</td>
                </tr>

    <tr>
        <td width="120" height="30"></td>
        <td width="10" align="center"></td>
        <td width="590" align="left"><INPUT TYPE='submit' VALUE='다음단계로'>
</td>

    </tr>
</table>

</form>

<? } ?>
<?
 if ($mode =='on') {
 if (!$emails) {
  alert("메일 주소가 없습니다.");
 }
  $emailsm = base64_encode($emails);
?>
<table width="790" border="0" cellspacing="0" cellpadding="0">
<form name="fformmail" method="post" action="javascript:fformmail_submit(document.fformmail);" enctype="multipart/form-data">
<input type="hidden" name="to" value="<?=$emailsm?>">
<input type="hidden" name="attach" value="2">
<tr>
    <td height="330" align="center" valign="top"><table width="540" border="0" cellspacing="0" cellpadding="0">
        <tr>
            <td height="20"></td>
        </tr>
        <tr>
            <td height="2" bgcolor="#808080"></td>
        </tr>
        <tr>
            <td width="740" height="2" align="center" valign="top" bgcolor="#FFFFFF">
                <table width="740" border="0" cellspacing="0" cellpadding="0">
               
                <? if ($is_member) { // 회원이면 ?>
                <input type='hidden' name='fnick'  value='<?=$member[mb_nick]?>'>
                <input type='hidden' name='fmail'  value='<?=$member[mb_email]?>'>
                <? } else { ?>
                <tr>
                    <td width="120" height="27" align="center"><b>이 름</b></td>
                    <td width="10" valign="bottom"><img src="<?=$member_skin_path?>/img/l.gif" width="1" height="8"></td>
                    <td width="590"><input type=text style='width:90%;' name='fnick' required minlength=2 itemname='이름'></td>
                </tr>
                <tr>
                    <td width="120" height="27" align="center"><b>E-mail</b></td>
                    <td width="10" valign="bottom"><img src="<?=$member_skin_path?>/img/l.gif" width="1" height="8"></td>
                    <td width="590"><input type=text style='width:40%;' name='fmail' required email itemname='E-mail'> 보내는 분의 이메일 주소를 입력 하세요.</td>
                </tr>
                <? } ?>

                <tr>
                    <td width="120" height="27" align="center"><b>제 목</b></td>
                    <td width="10" valign="bottom"><img src="<?=$member_skin_path?>/img/l.gif" width="1" height="8"></td>
                    <td width="590"><input type=text style='width:90%;' name='subject' required itemname='제목' value="<?=$titles?>"<?=$readonlys?>></td>
                </tr>


                <tr>
                    <td height="1" colspan="3" bgcolor="#E9E9E9"></td>
                </tr>
                <tr>
                    <td width="120" height="28" align="center"><b>선택</b></td>
                    <td width="10" valign="bottom"><img src="<?=$member_skin_path?>/img/l.gif" width="1" height="8"></td>
                    <td width="590"><input type='radio' name='type' value='0' checked> TEXT <input type='radio' name='type' value='1' > HTML <input type='radio' name='type' value='2' > TEXT+HTML</td>
                </tr>
                <tr>
                    <td height="1" colspan="3" bgcolor="#E9E9E9"></td>
                </tr>
                <tr>
                    <td width="120" height="150" align="center"><b>내용</b></td>
                    <td width="10" valign="bottom"><img src="<?=$member_skin_path?>/img/l.gif" width="1" height="8"></td>
                    <td width="590"><textarea name="content" style='width:90%;' rows='20' required itemname='내용'<?=$readonlys?>><?=$contents?></textarea></td>
                </tr>
                <tr>
                    <td height="1" colspan="3" bgcolor="#E9E9E9"></td>
                </tr>
                <tr>
                    <td width="120" height="27" align="center">첨부파일 #1</td>
                    <td width="10" valign="bottom"><img src="<?=$member_skin_path?>/img/l.gif" width="1" height="8"></td>
                    <td width="590"><input type=file style='width:90%;' name='file1'></td>
                </tr>
                <tr>
                    <td height="1" colspan="3" bgcolor="#E9E9E9"></td>
                </tr>
                <tr>
                    <td width="120" height="27" align="center">첨부파일 #2</td>
                    <td width="10" valign="bottom"><img src="<?=$member_skin_path?>/img/l.gif" width="1" height="8"></td>
                    <td width="590"><input type=file style='width:90%;' name='file2'></td>
                </tr>
                <tr>
                    <td height="1" colspan="3" bgcolor="#E9E9E9"></td>
                </tr>
                </table></td>
        </tr>
        </table></td>
</tr>
<tr>
    <td height="2" align="center" valign="top" bgcolor="#D5D5D5"></td>
</tr>
<tr>
    <td height="2" align="center" valign="top" bgcolor="#E6E6E6"></td>
</tr>
<tr>
    <td height="40" align="center" valign="bottom"><input id=btn_submit type=image src="<?=$member_skin_path?>/img/btn_mail_send.gif" border=0>&nbsp;&nbsp;<a href="javascript:window.close();"><img src="<?=$member_skin_path?>/img/btn_close.gif" width="48" height="20" border="0"></a></td>
</tr>
</form>
</table>

<script language="JavaScript">
with (document.fformmail) {
    if (typeof fname != "undefined")
        fname.focus();
    else if (typeof subject != "undefined")
        subject.focus();
}

function fformmail_submit(f)
{
    if (f.file1.value || f.file2.value) {
        // 4.00.11
        if (!confirm("첨부파일의 용량이 큰경우 전송시간이 오래 걸립니다.\n\n메일보내기가 완료되기 전에 창을 닫거나 새로고침 하지 마십시오."))
            return;
    }

    document.getElementById('btn_submit').disabled = true;

    f.action = "<?=$g4[bbs_path]?>/formmail_send.php";
    f.submit();
}
</script>
<? } ?>
<?
include_once("$g4[path]/tail.sub.php");
?>
추천
1
  • 복사

댓글 13개

추신 : 비밀글 , 권한 등은 대부분 적용이 되어 있으며 원본을 건드리지 않고 스킨
자체로만 해결 하다보니 이메일 주소의 엔코드/디코드 때문에 이메일 주소를 먼저
입력 받은후 엔코딩 처리후에 실제 보내기 페이지로 이동이 됩니다.
허접이라 이렇게 밖엔 못하므로 고수분들의 손길이 필요 합니다. ㅠ.ㅠ
실제 적용해보니 메일을 보내는 본문 내용에는 스킨에서 $wr_content 내용만 노출됩니다.

스킨에서 여분필드나 각종 스크립트 등을 사용했을 때는 아무것도 노출되지 않는데요.

혹시 view.skin.php에서 출력되는 페이지 전체를 하나의 함수로 지정하여 php의 mail()함수로 보낼 수는 없을까요?

저도 여러모로 연구 중인데 아직 초보라 잘안되는네요.
$view = get_view() <- 이평션을 사용하여 해당글의 값을 이미 모두불러 왔으므로

$titles = get_text($view[wr_subject]);
$contents =  get_text($view[wr_content]);

위의 코드를 참조하여 불러올 필드를 추가하여 가공한후 뿌려주면 됩니다.
>>스킨에서 여분필드나 각종 스크립트 등을 사용했을 때는 아무것도 노출되지 않는데요.


이해가 되실지 모르겠지만 이메일 보내기의 폼전송 내용 값에서 디자인과 데이타를 넣는 방법을 간략하게 설명 하므로 참고 하시기 바랍니다.


소스에서 보다시피 이건 웹 페이지가 아니라 데이터를 전송하기 위한 폼태그 입니다.

현재는 글내용만 textarea 에 담아서 출력 합니다. $contents =  get_text($view[wr_content]); 아래부분이죠.?

<textarea name="content" style='width:90%;' rows='20' required itemname='내용'<?=$readonlys?>><?=$contents?></textarea>

그러므로 원하는 필드값을 전부 출력하기 위해선 아래의 코드처럼 추가할 값을 가져오도록 가공한후

$view = get_view($write, $board, $member_skin_path);
$titles = get_text($view[wr_subject]);
$contents =  get_text($view[wr_content]);

다음과 같이 textarea 에 출력시킬 코드를 디자인과 함께 출력할 데이타용 코드를 넣어서 가공해야 합니다.


$contentssub ="
<table cellpadding=20 cellspacing=0 width=620 border=0>
    <tr>
        <td>     

출력할 필드값을 가공한후 이곳에 나열한다.

(이글에 있는 모든 필드의 데이타를 불러 올수 있습니다.)

        </td>
    </tr>
    <tr>
        <td> 

여기가 게시판에서 작성한 내용입니다.(html을 적용한 태그를 포함 하여 전부 출력됨)
   
$contents <- 실제 게시판의 내용임             
     
        </td>
    </tr>
</table>";

위처럼 디자인과 출력할 데이타를 뿌려준후 실제 내용이 들어갈 코드는 아래처럼 합니다.

<textarea name="content" style='width:90%;' rows='20' required itemname='내용'<?=$readonlys?>><?=$contentssub?></textarea>


이렇게 하면 추가한 디자인과 출력하고하는 필드값들을 전부 메일로 보낼수 있습니다.
예전버전 토큰이 적용되기전 버전이라서 그렇습니다.

상단에 아래코드를 추가하고
// 불법접근을 막도록 토큰생성
$token = md5(uniqid(rand(), true));
set_session("ss_token", $token);

토큰에러는 보내는부분의 폼태그에 <input type="hidden" name="token"  value="<?=$token?>"> 를 추가해 주세요
© SIRSOFT
현재 페이지 제일 처음으로