회원가입 당시에 인증을 비활성화 상태로 초기화 시킨 다음에
로그인 할 시에 인증 상태를 확인하고 이메일 인증이 되어 있지 않으면 바로 이메일 인증 페이지로 넘어가게 했다.
PHP 에서 이메일을 전송할 때 PHPmailer 를 이용한다.
우선, 구글에 phpmailer 를 검색 후 깃허브 페이지로 들어간다.
여기서, 초록색 Code 버튼을 누르고 Zip 파일을 다운로드 받은 후 src 디렉토리에 들어가서 phpmailer.php, smtp.php 파일을 작업하고 있는 파일과 같은 위치에 넣는다. -> 다른 위치여도 상관 없는 듯하다. 경로 입력만 잘 해주면 되는듯? 필자는 그냥 같은 경로에 넣음.
자, 이제 외부 SMTP 서버를 이용해보자! 필자는 네이버 계정으로 진행했다.
네이버 로그인을 한 다음, 메일함으로 들어간다. 그리고 왼쪽 하단에 보면 환경 설정이 있다.
환경설정에 들어가서 POP3/IMAP 설정에 들어간다. (이때, POP3 는 메일을 받을 때 사용하고 SMTP 는 메일을 보낼 때 사용한다.)
이렇게 POP3/SMTP 사용을 사용함 으로 변경한다. 나머지 아래부분은 본인을 맘대로 하시면 된다.
그리고 네이버 홈으로 돌아가 본인 프사를 누르고 보안 설정에 들어간다.
그럼 아래 사진과 같은 내용이 있을것이다. 여기서 2단계 인증 관리로 들어간다.
그리고 애플리케이션 비밀번호 설정에 들어가서 우리는 PHP 를 이용하니까 직접입력 선택하고 PHP 라 입력 후에 생성하기 누른 다음에 비밀번호 확인에 뜬 암호를 복사해놓고 메모장에 붙여놓자. 메일 보내는 기능 구현할 때 필요한 것이다!
그리고 깃허브에 다시 돌아가서 examples 폴더로 가면 gamil.phps 파일이 있는데 이걸 복사 붙여넣기 한다.
이걸 이용해서 메일 보내는 기능을 구현할 것이다.
이때, 상단에 있는 use, require 구문을 삭제한다. namespace 사용과 관련된 내용인데 이걸 안 지우면 오류가 발생한다.
또한 phpmailer.php, smtp.php 의 각각 상단의 namespace 내용 한 줄을 삭제한다.
이제 정말 모든 준비를 마쳤다.
gmail.phps 를 복붙한 것을 수정하여 기능 구현을 완료해보자! 안에 무슨 내용이 들어가야할지는 함수명으로 다 알수있다.
상단에 include 해주는 거 잊지 말 것!
include "PHPMailer.php";
include "SMTP.php";
$mail->SMTPDebug = SMTP::DEBUG_SERVER; // 디버그 시 오류 발생했을 때 어디서 에러가 났는지 알려줌.
$mail->Host = 'stmp.naver.com'; // 우리는 stmp.naver.com 을 사용한다.
$mail->Port = 465; //환경설정에서 뜬 포트번호를 입력하면 된다.
$mail = new PHPMailer();
//Tell PHPMailer to use SMTP
$mail->isSMTP();
$mail->SMTPDebug = SMTP::DEBUG_OFF;
//Set the hostname of the mail server
$mail->Host = 'smtp.naver.com';
//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission
$mail->Port = 465;
//Set the encryption mechanism to use - STARTTLS or SMTPS
$mail->SMTPSecure = "ssl"; //그 환경설정에 ssl 사용하라고 써져있을 거임.
//Whether to use SMTP authentication
$mail->SMTPAuth = true;
//Username to use for SMTP authentication - use full email address for gmail
$mail->Username = 'id'; //그 환경설정에 나와있는 아이디로 해야합니다. 본인 이름 쓰면 안됨.
//Password to use for SMTP authentication
$mail->Password = '비밀번호 생성 시 복사해놨던 것';
//Password to use for SMTP authentication
$mail->CharSet = 'UTF-8'; //한글 안 깨지게!
//Set who the message is to be sent from
$mail->setFrom('test@naver.com', 'test'); //메일 받을 때 누가 보냈는지 표시하는 것
//Set an alternative reply-to address
$mail->addReplyTo('test@naver.com', 'test');
//Set who the message is to be sent to
$mail->addAddress($_SESSION["useremail"], $_SESSION["username"]); //내가 이메일 보낼 사람의
메일 주소와 이름, 저는 회원 인증에 썼기 때문에 저렇게 사용했습니다.
//Set the subject line
$mail->Subject = '메일 테스트입니다. ';
//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
$mail->msgHTML("메일 내용입니다.");
$mail->AltBody = '내용이 정상적으로 전송되지 않았습니다.'; //msgHTML 이 전송되지 않으면 대체할 문구임.
//Attach an image file
// $mail->addAttachment('a.jpg'); //이미지 같이 보낼거면 이거 사용함.
//send the message, check for errors
if (!$mail->send()) {
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo "메일이 정상적으로 전송되었습니다. 메일함을 확인해주세요.";
}
이렇게 해서 기능 구현 완료!
php에서 이메일 보내려면 phpmailer 를 이용하라는 정보는 많지만
정확히 제대로 사용하는 방법이 적혀있지 않아서 많이 헤맸는데
우연히 발견한 단비같은 영상으로 구현에 성공했다..
선생님.. 돈 많이 버세요.. 제발요..
[참고 영상]
'개인 공부' 카테고리의 다른 글
[WEB] 로그인 유지에 필요한 세션과 쿠키 (1) | 2022.10.04 |
---|