개발/php

PHPMailer 이용하여 Google,Naver 메일 보내기

JangHC 2022. 1. 3. 01:04

PHP 8.1 , Apache 2.4를 사용한다.

 

Exception.php
0.00MB
OAuth.php
0.00MB
PHPMailer.php
0.17MB
POP3.php
0.01MB
SMTP.php
0.05MB

 

php.ini에

extension=openssl

extension=curl 

 

주석을 풀어준다.

 

 

mail_sender.php 를 만들고 include를 위 파일 경로로 본인에 맞게 셋팅한다.

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

include($_SERVER['DOCUMENT_ROOT']."/inc/Exception.php");
include($_SERVER['DOCUMENT_ROOT']."/inc/PHPMailer.php");
include($_SERVER['DOCUMENT_ROOT']."/inc/SMTP.php");

function send_email_naver ($user_email, $user_name, $subject, $content) {
    $USER		='xxxx@naver.com'; //보내는 사람 이메일
    $PASSWORD = 'xxxx'; //비밀번호
    $SEND_EMAIL = 'master@mydomain.io';
    
    $mail = new PHPMailer(true);
    
    //Enable SMTP debugging.
    $mail->SMTPDebug = 3; // debug 표시 레벨
    //Set PHPMailer to use SMTP.
    $mail->isSMTP();
    //Set SMTP host name
    $mail->Host = "smtp.naver.com";
    $mail->SMTPSecure = "tls";
    //Set TCP port to connect to
    $mail->Port = 587;
    
    //Set this to true if SMTP host requires authentication to send email
    $mail->SMTPAuth = true;
    //Provide username and password
    $mail->Username = $USER;
    $mail->Password = $PASSWORD;
    $mail->SMTPKeepAlive = true;
    $mail->CharSet = "utf-8"; //이거 설정해야 한글 안깨짐
    //If SMTP requires TLS encryption then set it
    
    $mail->setFrom($USER,"밋유저스");
    // 이름은 적용이 되는데 메일 적용이 안되는데 네이버에서 막아놓음. 네이버는 아예 다른 메일이면 send가 실패함
    // 네이버에 별칭 추가 해야함. google이랑 마찬가지.
    $mail->addAddress($user_email, $user_name); //받는 사람    
    $mail->isHTML(true);
    
    $rand_num = sprintf("%06d",rand(000000,999999));
    
    $mail->Subject = $subject;
    $mail->Body = $content1.(string)$rand_num;
    $mail->AltBody = "";
    
    try {
        $mail->send();
    } catch (Exception $e) {
        $rand_num = -1;
    }
    return $rand_num;
}

function send_email_google ($user_email, $user_name, $subject, $content) {
    $USER		='xxx@gmail.com'; //보내는 사람 이메일
    $PASSWORD = 'xxxx'; //비밀번호
    $SEND_EMAIL = 'master@mydomain.io';
    
    $mail = new PHPMailer(true);
    
    //Enable SMTP debugging.
    $mail->SMTPDebug = 3; // debug 표시 레벨
    //Set PHPMailer to use SMTP.
    $mail->isSMTP();
    //Set SMTP host name
    $mail->Host = "smtp.gmail.com";
    $mail->SMTPSecure = "ssl";
    //Set TCP port to connect to
    $mail->Port = 465;
    
    //Set this to true if SMTP host requires authentication to send email
    $mail->SMTPAuth = true;
    //Provide username and password
    $mail->Username = $USER;
    $mail->Password = $PASSWORD;
    $mail->SMTPKeepAlive = true;
    $mail->CharSet = "utf-8"; //이거 설정해야 한글 안깨짐h
    //If SMTP requires TLS encryption then set it
    
    $mail->setFrom($SEND_EMAIL,"밋유저스"); 
    // 이름은 적용이 되는데 메일 적용이 안된다 구글에서 막아놓음. (보내지긴 하는데 user mail로 수정됨)
    // 보내는 사람 메일을 바꾸려면 User메일의 별칭 메일에 send mail을 추가해야 함. (master@mydomain.io가 실제 메일을 받을 수 있어야함)
    $mail->addAddress($user_email, $user_name); //받는 사람
    $mail->isHTML(true);
    
    $rand_num = sprintf("%06d",rand(000000,999999));
    
    $mail->Subject = $subject;
    $mail->Body = $content.(string)$rand_num;
    $mail->AltBody = "";
    
    try {
        $mail->send();
    } catch (Exception $e) {
        $rand_num = -1;
    }
    return $rand_num;
}

?>

 

 

메일은 6자리 인증번호를 생성하여 메일을 보내는 역할을 한다.

 

구글이나 네이버 smtp 셋팅을 해야하는데, 그 과정은 검색해보면 많이 나와있다.

smtp 셋팅하고, 보안 풀고 이것저것~~

 

setFrom에 sender mail (보내는 사람 메일)이 변경되지 않는데, 별칭 추가를 해야한다.

그럼 결국 보내는 사람 도메인이 있어야 하는데... 나는 그냥 발신전용(없는메일)로 하려고 했는데 낭패다ㅠ.ㅠ

 

다른방법을 찾아봐야겠다.

 

'개발 > php' 카테고리의 다른 글

PHP hashtag 정규식 한글 영어 숫자 혼용 글자수 제한  (0) 2022.01.31