메일을 보내는 방법에는 메일보내는 서버(웹서버가 구동하고 있는 서버)에 SMTP서버 통해 보내는 방법과 외부 메일서버의 SMTP 서버를 이용하여(relay 방식) 보내는 방법이 있다.
이번에 내가 한 방법은 Relay 방식이다. 여기서 소개할 소스는 Relay든지 아니든지 상관은 없는 소스이다.
메일 소스를 작성하기 이전에 사전에 해야 할 작업들이 있다.
먼저, Relay할 메일 시스템에서 웹서버IP에 대한 접근허용 설정을 해야한다. 구글이나 네이버 등은 따로 메일로 요청해야 하는 것으로 알고 있다. 나 같은 경우는 회사메일에 설정을 해서 사용하였다.
다음으로 Relay를 위한 php 설정으로 php.ini 의 'SMTP' 값을 수정해줘야 한다. 기본적으로 localhost로 설정되어 있을 것이다.
이것을 외부 SMTP서버의 IP로 변경해 주고 아파치를 재시작해야 한다.
php.ini의 위치를 잘 모른다면, phpinfo() 함수를 통해 웹에서 경로를 확인할 수 있다.
<?php
phpinfo();
?>
php 소스코드는 아래와 같다.
<html>
<head>
<?php
// 메일발송 시작
$nameFrom = "발신자";
$mailFrom = "발신주소";
$nameTo = "수신자";
$mailTo = "수신주소";
$cc = "참조";
$bcc = "숨은참조";
$subject = "제목";
$content = "메일내용";
$charset = "UTF-8";
$nameFrom = "=?$charset?B?".base64_encode($nameFrom)."?=";
$nameTo = "=?$charset?B?".base64_encode($nameTo)."?=";
$subject = "=?$charset?B?".base64_encode($subject)."?=";
$header = "Content-Type: text/html; charset=utf-8\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Return-Path: <". $mailFrom .">\r\n";
$header .= "From: ". $nameFrom ." <". $mailFrom .">\r\n";
$header .= "Reply-To: <". $mailFrom .">\r\n";
if ($cc) $header .= "Cc: ". $cc ."\r\n";
if ($bcc) $header .= "Bcc: ". $bcc ."\r\n";
$result = mail($mailTo, $subject, $content, $header, $mailFrom);
if(!$result) {
?>
<script>
alert('메일전송실패!!! \n 다시 작성하세요');
</script>
<?php
} else {
?>
<script>
alert('메일전송성공!!!');
</script>
<?php
}
?>
</head>
<body></body>
</html>
소스를 보면, "=?UTF-8?B?".base64_encode($subject)."?=" 이런 구문이 있다.
제목과 이름에만 이 코드를 넣어 주는데, 이렇게 하면 메일 수신시 한글이 깨지지 않는다.(메일내용 부분에는 이 코드를 넣으면 안된다. 오히려 깨진다.)
이유는 메일 전송시 전송되는 단위바이트가 다르다. 메일의 경우 7바이트 ASCII 코드로 전송하기 때문에 8바이트 이상되는 한글의 경우, 이런 문제가 발생한다.
깨짐처리 루틴에 대해 더 자세히 알고 싶으시다면, 아래 링크로 가보시길...
http://keepingstar.tistory.com/22
'개 발코딩' 카테고리의 다른 글
[jsp] EL(Expression Language)로 Attribute 값이 출력되지 않을 때 (0) | 2017.01.11 |
---|---|
intellij에서 junit 사용하기 (0) | 2017.01.04 |
[html] IE 호환성보기 설정 무시하기 (1) | 2016.06.13 |
[jquery] delay 없이 서서히 움직이는 가로 롤링 배너 (20) | 2016.06.07 |
[java] close() 와 disconnect()의 차이 (0) | 2016.04.21 |