게시판을 모아둔 웹사이트를 구축할 때 많이 사용되는 무료게시판 중에 그누보드(GNUBOARD)라는 게시판 솔루션이 있습니다. 저도 애용하는 게시판 소스 중 하나인데요. 이 그누보드는 메일발송 기능까지 포함고 있습니다. 내부적으로는 PHPMailer라는 메일발송 라이브러리를 연동하여 제공하는 기능이죠.
그누보드의 이메일 사용 설정
이 그누보드의 메일발송기능은 다음과 같이 그누보드의 관리자 페이지에서 설정할 수 있습니다.
위 설정화면에서 처럼 회원가입한 사람이 있으면 등급설정을 위해 관리자에게 회원가입 신청이 있음을 알려주는 설정을 비롯해 글쓴이에게 댓글이 작성되었음을 알려주는 등 다양한 용도로 메일 발송기능을 사용할 수 있습니다.
하지만 위 화면에서 메일 발송 기능을 사용하도록 설정한다고 하여 바로 메일이 발송되는 것은 아닙니다.
그누보드의 소스파일 중 일부를 수정해주어야 합니다. 보다 쉽게하기 위해 환경설정을 통해 설정이 되도록 그누보드의 기능을 개선하면 좋겠지만 몇몇 이유로 인해 그렇게까지 기능을 제공하지는 않습니다. 때문에 IT를 전공하고 약간의 이메일서버의 개념과 동작원리를 이해해야만 수정할 수 있습니다.
그누보드의 SMTP(Mail Server) 설정
앞에서 설명한 그누보드의 메일 보내기 기능 사용 설정은 그누보드가 “어느 메일서버에 어떤 계정으로 접속하여 메일을 보낼지”를 알려주어야 제대로 동작합니다.
여기에서 사용되는 메일 서버는 다음이나 네이버 혹은 구글 등 SMTP 기능을 제공하는 다양한 메일서버를 사용할 수 있습니다. (SMTP에 대한 설명은 생략합니다.)
또한 SMTP 설정 시 SSL 설정과 Plain Text 방식 중 하나를 사용할 수 있는데 이 포스트에서는 다음이나 구글, 네이버 등에서 요구하는 SSL(암호화통신프로토콜)을 사용하는 메일 설정과 SSL을 요구하지 않는 Plain Text 방식을 사용할 때의 설정을 모두 설명합니다.
그누보드의 메일서버 주소와 계정 설정은 lib 디렉토리의 mailer.lib.php 파일에서 하게됩니다.
mailer.lib.php 파일에서 mailer() 함수를 찾아 다음과 같이 수정해줍니다. 그누보드라 하더라도 버전에 따라 약간씩 소스가 달라 위치가 다를 수 있습니다.
먼저 plain text 방식의 메일발송을 지원하지 않고 ssl을 요구하는 메일서버에서 설정방식입니다. 다음, 구글등이 해당됩니다. 포트번호도 다르다는 점에 주의해주세요.
function mailer($fname, $fmail, $to, $subject, $content, $type=0, $file=””, $cc=””, $bcc=””)
{
global $config;
global $g5;
// 메일발송 사용을 하지 않는다면turn;
if (!$config[‘cf_email_use’]) return;
if ($type != 1)
$content = nl2br($content);
$mail = new PHPMailer(); // defaults to using php “mail()”
if (defined(‘G5_SMTP’) && G5_SMTP) {
// Modified By taeho. 2015.12.31, 메일을 보낼 때 메일서버에 접속하기 위한 설정입니다.
$mail->IsSMTP();
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->SMTPSecure = “ssl”; // sets the prefix to the servier
$mail->Host = “smtp.daum.net”; // sets GMAIL as the SMTP server
$mail->Port = 465; // set the SMTP port for the GMAIL server
$mail->Username = “다음아이다@hanmail.net”; // MAIL username
$mail->Password = “비밀번호”; // MAIL password
// End. By taeho. 20151231
}
$mail->From = ‘noreturn@hanmail.net’; // 사용자에게 보여줄 보내는이 메일주소
$mail->FromName = ‘taeho BBS’; // 사용자에게 보여줄 보내는 사람의 이름 등
$mail->Subject = $subject;
$mail->AltBody = “”; // optional, comment out and test
$mail->MsgHTML($content);
$mail->AddAddress($to);
$mail->AddAddress($to);
if ($cc)
$mail->AddCC($cc);
if ($bcc)
$mail->AddBCC($bcc);
//print_r2($file); exit;
if ($file != “”) {
foreach ($file as $f) {
$mail->AddAttachment($f[‘path’], $f[‘name’]);
}
}
return $mail->Send();
}
다음은 plain text를 지원하는 표준 메일서버의 설정입니다.
function mailer($fname, $fmail, $to, $subject, $content, $type=0, $file=””, $cc=””, $bcc=””)
{
global $config;
global $g5;
// 메일발송 사용을 하지 않는다면
if (!$config[‘cf_email_use’]) return;
if ($type != 1)
$content = nl2br($content);
$mail = new PHPMailer(); // defaults to using php “mail()”
if (defined(‘G5_SMTP’) && G5_SMTP) {
$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host = ‘mail.company.kr’; // SMTP server
$mail->SMTPAuth = true;
$mail->Username = ‘taeho@company.kr’;
$mail->Password = ‘비밀번호’;
}
$mail->From = ‘noreturn@company.kr’;
$mail->FromName = ‘Library Server’;
$mail->Subject = $subject;
$mail->AltBody = “”; // optional, comment out and test
$mail->MsgHTML($content);
$mail->AddAddress($to);
if ($cc)
$mail->AddCC($cc);
if ($bcc)
$mail->AddBCC($bcc);
//print_r2($file); exit;
if ($file != “”) {
foreach ($file as $f) {
$mail->AddAttachment($f[‘path’], $f[‘name’]);
}
}
return $mail->Send();
}
표준 SMTP 메일서버의 경우 Port 번호를 명시하지 않아도 됩니다. 포트번호가 명시되지 않으면 표준 SMTP 포트번호인 25번이 자동으로 설정됩니다.
주의사항
프로그래밍을 할 때 절대 삼가해야할 점은 소스코드에 ID와 Password를 하드코딩하지 말아야 한다는 점입니다. 하지만 무료 소스이다보니 위의 사례들 처럼 비밀번호를 소스코드에 그대로 노출시키게 되는 경우가 있습니다. 만약 이 서버에 접속 권한이 있는 개발자나 운영자가 이 비밀번호를 유출시킨다면 큰 피해로 이어질 수 있기 때문에 매우 주의해야 합니다.
RedCastle과 같은 파일접근통제 솔루션을 이용해 개발자나 운영자가 telnet, ssh, ftp 등의 접속을 통해 이 소스파일을 읽지 못하도록 조치한다면 최소한의 보안은 가능하지만 그 이외의 경우… 이 파일에 대한 접근을 통제하기는 매우 어렵다는 점을 항상 유의해야 합니다.