개발자의 끄적끄적

[php] 그누보드 메일 발송하기 [펌] 본문

개발/php

[php] 그누보드 메일 발송하기 [펌]

효벨 2020. 9. 8. 01:00
728x90
반응형

[php] 그누보드 메일 발송하기 [펌]

그누보드를 사용한 홈페이지 운영 중 회원이 비밀번호를 분실하여 가입한 이메일로 임시 비밀 번호를 전송하는 기능을 사용하였으나 메일이 발송하지 않는 문제가 발생하였습니다.

그누보드의 메일 발송하는 법은 https://blogger.pe.kr/549을 우선 참고해주세요.(검색하면 비슷한 내용의 게시물이 많습니다)

그누보드 5의 이메일 기능 사용하기

게시판을 모아둔 웹사이트를 구축할 때 많이 사용되는 무료게시판 중에 그누보드(GNUBOARD)라는 게시판 솔루션이 있습니다. 저도 애용하는 게시판 소스 중 하나인데요. 이 그누보드는 메일발송 기능까지 포함고 있..

blogger.pe.kr

lib폴더의 mailer.lib.php 파일을 수정하면 된다는 내용인데 위 내용을 반복해서 적으려는 것이 아니라 제가 말하고 싶은 부분은 작업하면서 - 엄청 삽질을 하면서 얻은 노하우를 공유하고자 합니다.

1. 메일 서버가 없어도 작동한다.

메일을 전송하려면 메일 서버가 필요한데 호스팅한 곳의 이메일 계정을 사용하고 있지 않아, 처음에는 호스팅하는 곳의 메일 서버를 사용해야 하는 줄 알고 이메일을 추가하려 하였습니다. 그러나 그럴 필요가 없습니다. 호스팅 하는 곳의 이메일을 사용할 수 도 있겠지만 다음, 네이버, 구글을 이용하면 호스팅하는 곳의 메일 서버를 굳이 사용할 필요가 없었습니다. 해당 php코드는 다음, 네이버, 구글을 사용하면 메일 서버가 없이 localhost에서도 작동하였습니다. 처음에는 작동이 안돼서 로컬에서는 테스트가 불가능한 것인가, 로컬에 메일 서버를 설치해야 하나 하고 잘못 생각했었습니다.

2. 테스트 방법 및 디버깅 사용하기

그누보드 관리자 페이지에 들어가면 환경설정 > 메일 테스트 화면이 있습니다.(localhost/adm/sendmail_test.php)

저는 임의의 회원가입을 한 후, 데이터베이스를 로컬에 동기화시킨 후, 로컬에서 로그인 > 아이디 비밀번호 찾기 버튼을 눌러 테스트를 진행하였습니다. 그러면 localhost/bbs/password_lost.php 경로로 접속이 됩니다.

메일 주소를 입력하면 localhost/bbs/password_lost2.php의 화면으로 이동하여 그 안에서 localhost/lib/mailer.lib.php 파일을 처리합니다.

디버깅을 사용하려면 mailer.lib.php의 수정하는 부분에 $mail->SMTPDebug = 2; 를 추가해 줍니다.

if (defined('G5_SMTP') && G5_SMTP) {
  $mail->SMTPDebug = 2;
  ...

그리고 localhost/bbs/password_lost2.php의 alert를 주석처리해 줍니다.

// alert_close($email.' 메일로 회원아이디와 비밀번호를 인증할 수 있는 메일이 발송 되었습니다.\\n\\n메일을 확인하여 주십시오.');

그러면 에러 발생이나 성공 시 로그가 출력됩니다. 로그를 메모장에 옮겨 CLIENT -> SERVER: .... SERVER -> CLIENT: ... 등의 한줄로 출력된 메시지를 가독성 있게 줄을 나눠 확인해 봅니다. 그러면 왜 전송이 실패했는지 찾을 수 있습니다. 이 디버깅 코드를 모르니 원인도 모른 체 엄청 삽질을 했었습니다.

3. SMTP사용 계정과 메일 발송자의 이메일 주소가 같아야 한다.

다음, 네이버, 구글 등의 SMTP를 사용하는데 발송자의 이메일을 다르게 설정했더니 발송이 안되었습니다. 즉 $mail->Username에서 사용된 계정 이름이 $mail->From에 동일하게 사용되어야 했습니다.

가령 다음 메일을 사용하는데 user@daum.net의 계정의 SMTP를 사용해서 보낸다면 $mail->Username = "user"가 되어야 하고 $mail->From = "user@daum.net"의 값이 되어야 합니다. 발송자가 "some@naver.com"이 되면 안 됩니다. 이부분도 디버깅 없이 SMTP계정과 발송자의 메일 주소를 다르게 하려다가 원인도 모른 체 엄청 삽질을 하게 되었습니다.

그리고 기본적이고 당연한 얘기인데 다음, 네이버, 구글을 사용한다면 해당 계정의 설정 화면에서 POP/SMTP사용을 "사용함"으로 설정해야 됩니다. 기본적으로는 "사용 안함"으로 설정되어 있습니다. 그리고 그 설정 화면을 보시면 포트번호와 호스트명 등이 설명되어 있으니 필요한 부분을 카피하여 입력하면 됩니다.

 

 

출처 : m.blog.naver.com/PostView.nhn?blogId=chrisphotography&logNo=221580737981

반응형
Comments