Nmail ASP 서비스 종료 안내(EOS)
PHP에서 소켓을 이용한 메일 보내기(소스)
귀사의 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 $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'>글 쓴 이</font></TD>
<TD>$from_name ($from)</TD>
</TR>
<TR>
<TD align='right' BGCOLOR='#008000'><font color='white'>제 목</font></TD>
<TD><b>$title</b></TD>
</TR>
<TR>
<TD align='right' VALIGN='TOP' BGCOLOR='#008000'><font color='white'>내 용</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 | 심*민 | 2002.07.16 |
---|---|---|---|
다음 글 | 아웃룩에서 받을 수 없는 상태입니다. 6 | 김*범 | 2002.07.16 |