[PHP] PHPMailer 라이브러리를 이용해서 메일 발송하는 방법


Development note/PHP  2019. 10. 19. 09:00

안녕하세요. 명월입니다.


이 글은 PHP에서 PHPMailer 라이브러리를 이용해서 메일 발송하는 방법에 대한 글입니다.


예전에 Java와 C#언어에 대해서도 메일 보내는 방법에 대해 소개한 적이 있습니다.

링크 - [C#] System.Net.Mail을 이용하여 메일 보내기

링크 - [Java] Mail 발송


프로그램을 만들 때 자주 사용되는 라이브러리 중하나로 메일 발송이 있습니다. 회원 가입, 비밀 번호 찾기나 기타 공지 사항 알림이 있을 수 있고 포탈 시스템등에서는 각각 알림 메시지를 메일로 발송하는 경우도 있습니다.

PHP에서는 메일 발송하는 라이브러리 중 PHPMailer가 있습니다.

링크 - https://packagist.org/packages/phpmailer/phpmailer


먼저 라이브러리를 사용하기 위해서 composer.json에 추가합니다.

{
  "require": {
    "phpmailer/phpmailer": "~6.1"
  }
}

그리고 composer로 install를 합니다.

설치가 되었으면 index.php를 작성합니다.

<?php
  // composer로 다운로드된 라이브러리 참조하기
  require_once 'vendor/autoload.php';
  
  use PHPMailer\PHPMailer\PHPMailer;
  use PHPMailer\PHPMailer\SMTP;
  use PHPMailer\PHPMailer\Exception;
  
  // PHPMailer 선언
  $mail = new PHPMailer(true);
  // 디버그 모드(production 환경에서는 주석 처리한다.)
  $mail->SMTPDebug = SMTP::DEBUG_SERVER;
  // SMTP 서버 세팅
  $mail->isSMTP();
  try {
    // 구글 smtp 설정
    $mail->Host = "smtp.gmail.com";
    // SMTP 암호화 여부
    $mail->SMTPAuth = true;
    // SMTP 포트
    $mail->Port = 465;
    // SMTP 보안 프초트콜
    $mail->SMTPSecure = "ssl";
    // gmail 유저 아이디
    $mail->Username = "nowonbun@gmail.com";
    // gmail 패스워드
    $mail->Password ="***password**";
    // 인코딩 셋
    $mail->CharSet = 'utf-8'; 
    $mail->Encoding = "base64";
    
    // 보내는 사람
    $mail->setFrom('nowonbun@gmail.com', 'Tester');
    // 받는 사람
    $mail->AddAddress("nowonbun@gmail.com", "nowonbun"); 
    
    // 본문 html 타입 설정
    $mail->isHTML(true);
    // 제목
    $mail->Subject = 'Here is the subject';
    // 본문 (HTML 전용)
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    // 본문 (non-HTML 전용)
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
    $mail->Send();
    echo "Message has been sent";
  } catch (phpmailerException $e) {
    echo $e->errorMessage();
  } catch (Exception $e) {
    echo $e->getMessage();
  }

소스를 작성헀습니다.

그리고 Smtp 서버를 세팅하겠습니다. 저의 경우에는 GMail(구글 메일) 기준으로 작성되어 있으나 Naver나 Daum을 설정하시려면 검색창에 Naver smtp 설정이나 daum smtp 설정을 치시면 찾으실 수 있습니다.

구글 메일 참조 - https://support.google.com/a/answer/176600?hl=ko

네이버 메일 참조 - http://blog.naver.com/PostView.nhn?blogId=mutation4929

                                  https://mail.naver.com/option/imap

다음 메일 참조 - https://cs.daum.net/faq/43/9234.html#35953

Gmail의 smtp 주소는 smtp.gmail.com 입니다.

그리고 아이디에는 구글 아이디를 넣고 패스워드는 구글 메일 패스워드가 되겠습니다.


먼저 크롬에 접속해서 오른쪽 상단에 회원 정보로 갑니다.(로그인이 되지 않았으면 로그인을 먼저 합니다.)

구글 계정으로 가서 보안 탭의 보안 수준이 낮은 앱의 액세스 탭으로 갑니다.

보안 수준이 낮은 앱의 사용을 체크합니다. 이 체크를 안하면 외부에서 구글 메일을 사용하지 못하게 하는 것이기 때문에 사용하기로 바꿔도 아이디 패스워드 노출이 안 된다면 보안상의 큰 문제는 없습니다.

다시 소스로 돌아와서 apache를 기동하고 해당 페이지를 요청하겠습니다.

위에 출력된 로그 같은 데이터는 $mail->SMTPDebug = SMTP::DEBUG_SERVER;로 디버깅 모드를 해서 그렇습니다. 저 부분을 주석이나 삭제하면 나타나지 않습니다.

구글 메일함을 보내 메일이 제대로 수신이 되었습니다.


여기까지 PHP에서 PHPMailer 라이브러리를 이용해서 메일 발송하는 방법에 대한 설명이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.