NEW Nmail PHP 3.4.0 업데이트 - 보안 강화(2단계 인증 등), 중요 메일, 대표 계정, 스팸 자동 업데이트
자세히 보기

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

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

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

김*휘 2002.07.16 02:54 조회 2514

귀사의 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