NEW Nmail PHP 3 업그레이드 할인
자세히 보기

Nmail ASP 서비스 종료 안내(EOS)

Nmail ASP (nWmail, Nmail Server) 제품은 유상 유지보수를 포함한 모든 서비스가 종료되었습니다.

PHP에서 소켓을 이용한 메일 보내기(소스)

김*휘 2002.07.16 02:54 조회 1550

귀사의 nMail 비영리 및 테스트용 키 사용자입니다.
귀사에 감사하는 마음으로 팁을 공유할까합니다.
이 소스는 hphpschool의 팁란에 있는 내용을 윈도우용으로 수정한 것 입니다.

운영환경 : win 2000 server, apache 1.3.26, php 4.1.2, mysql 3.23.49, nmail 3.2
======================================================================================


소켓을 사용하기 위해서는

1. php.ini의

;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;

extension_dir = ./
를 extensions가 존재하는 절대 경로로 수정
extension_dir = C:\Server\PHP\extensions

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;

;extension=php_sockets.dll
앞의 주석 제거
extension=php_sockets.dll

2. 아파치 재시작
======================================================================================


<?
//====================================================================================
// 경고창에 $msg의 내용을 띄우고, 이전 페이지로 돌아가는 함수
//====================================================================================
function alert_back($msg) {
echo("
<script language='javascript'>
<!--
alert(\"$msg\");
history.back();
//-->
</script>
");
}


//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// 이 부분은 각자 환경에 맞게 수정하세요.

// 새글, 답글에 따른 메일 종류 구분
$mail = array('new','reply');
if(!in_array($type,$mail)) {
alert_back('메일의 종류가 올바르지 않습니다. ');
exit;
}

// 종류에 따른 메일 제목 설정
if(!strcmp($type,'new')) {
$mail_subject = "[게시판 : " . $board . "]에 새로운 글이 등록되었습니다.";
} else {
$mail_subject = "[게시판 : " . $board . "]에 답변글이 등록되었습니다.";
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


// 송 수신자 설정
// 저는 세션 사용합니다. 환경에 맞게 수정하세요.
$from_name = $HTTP_SESSION_VARS[s_name];
$from = $HTTP_SESSION_VARS[s_mail];

$to_name = '관리자';
$to = '****@****';

// 글 쓰기 폼에서
// 제목<input type='text' name='title'>
// 본문<input type='textarea' name='comment'>일 경우
$title = stripslashes($title);
$comment = stripslashes($comment);
$comment = nl2br($comment);
$IP = getenv('REMOTE_ADDR');
$browser = getenv('HTTP_USER_AGENT');
$date = date("Y.m.d. H:i",$signdate);

$body = "
<HTML>
<HEAD>
<STYLE TYPE='TEXT/CSS'>
<!--
BODY, TD, TH { font-size : 10pt; line-height : 1.5; }
//-->
</STYLE>
</HEAD>

<BODY bgColor='#FFFFFF'>
<TABLE WIDTH='650' BORDER='1' CELLSPACING='0' CELLPADDING='5' ALIGN='CENTER' BGCOLOR='#EFFFEF' bordercolorlight='#000000' bordercolordark='#FFFFFF'>
<TR>
<TD WIDTH='90' align='right' BGCOLOR='#008000'><font color='white'>IP / 브라우저</font></TD>
<TD WIDTH='*'>$IP &nbsp;&nbsp;&nbsp;&nbsp; $browser</TD>
</TR>
<TR>
<TD align='right' BGCOLOR='#008000'><font color='white'>작성 시간</font></TD>
<TD>$date</TD>
</TR>
<TR>
<TD align='right' BGCOLOR='#008000'><font color='white'>글 &nbsp;쓴 &nbsp;이</font></TD>
<TD>$from_name ($from)</TD>
</TR>
<TR>
<TD align='right' BGCOLOR='#008000'><font color='white'>제 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;목</font></TD>
<TD><b>$title</b></TD>
</TR>
<TR>
<TD align='right' VALIGN='TOP' BGCOLOR='#008000'><font color='white'>내 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;용</font></TD>
<TD>$comment</TD>
</TR>
</TABLE>
</BODY>
</HTML>
";

// 소켓을 이용 25(SMTP)번 포트 접속
// int fsockopen ( [string udp://hostname, int port [, int errno [, string errstr [, double timeout]]]])
$MailServer = 'localhost';
$fp = fsockopen($MailServer, 25, &$errno, &$errstr, 30);
if(!$fp) {
alert_back("mail 연결에러: $errstr ($errno)");
exit;
}

// 보내는 사람 메일 등록
fputs($fp, "mail from: <$from>\r\n");
$retval[0] = fgets($fp, 128);

// 받는 사람 메일 등록
fputs($fp, "rcpt to: <$to>\r\n");
$retval[1] = fgets($fp, 128);

//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// 메일 내용 입력 시작
fputs($fp, "data\r\n");
fgets($fp, 128);

// 메일이 잘못 같은때 되돌아오는 메일 주소
fputs($fp, "Return-Path: <$from>\r\n");


fputs($fp, "From: $from_name <$from>\r\n");
fputs($fp, "To: $to_name <$to>\r\n");
//fputs($fp, "Cc: $encoded_mailccrn");
fputs($fp, "Subject: $mail_subject\r\n");

// X 로 시작하는 명령은 3rd party 명령어
fputs($fp, "X-Mailer: BR-net\r\n");
fputs($fp, "MIME-Version: 1.0\r\n");

fputs($fp, "Content-Type: text/html;\r\n");
// charset='euc-kr' 앞에 띄어쓰기가 없으면 에러 발생
fputs($fp, " charset='euc-kr'\r\n");
fputs($fp, "\r\n");
fputs($fp, $body);
fputs($fp, "\r\n");

// .는 data 명령의 끝을 의미
fputs($fp, "\r\n.\r\n");

// 메일 내용 입력 끝
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

$retval[2] = fgets($fp, 128);
fclose($fp);
?>

댓글 1
이전 글 웹메일이 무엇이 문제인지 모르겠네요! 1 심*민 2002.07.16
다음 글 아웃룩에서 받을 수 없는 상태입니다. 6 김*범 2002.07.16