everyday com-eat
작성일
2022. 6. 22. 14:58
작성자
갱수터
728x90

참고 블로그

https://github.com/PHPMailer/PHPMailer

https://doolyit.tistory.com/134

https://stickode.tistory.com/76

https://jjong-factory.tistory.com/36

 

 

Gmail 및 Google 보안 설정

IMAP 사용으로 변경

 

 

계정 관리 > 보안 > 보안 수준이 낮은 앱의 액세스

 

https://myaccount.google.com/security

 

Google 계정

보안 계정을 안전하게 보호하기 위해 보안 설정을 검토 및 조정하고 권장사항을 받아보려면 계정에 로그인하세요.

myaccount.google.com

 

 

Composer 설치

(window에서 혼자 실습하는 거라 설치가 필요했음) 

https://getcomposer.org/download/?_x_tr_sl=auto&_x_tr_tl=ko&_x_tr_hl=ko 

 

Composer

Download Composer Latest: v2.3.7 To quickly install Composer in the current directory, run the following script in your terminal. To automate the installation, use the guide on installing Composer programmatically. php -r "copy('https://getcomposer.org/ins

getcomposer.org

 

 

setup파일 설치 후

cmd 관리자 권한으로 실행

(vscode 터미널에선 오류남)

cd (composer 설치할 디렉터리 경로)
composer require phpmailer/phpmailer

 

 

PHP.ini 파일 수정

중간에 계속 extension missing: openssl라는 오류가 났는데

검색하면 다들 ini파일의 extension=php_openssl.dll의 주석을 풀으라고 해서 검색해보면 openssl밖에 없었음..

그래서 그냥 openssl 아래에 extension=php_openssl.dll 한줄 추가하기

 

 

 

파일구조

📁sendmail
 └ 📁Composer(composer 설치 폴더)
  └ 📁 vendor (phpmailer 설치 폴더)

   └ 📄 autoload.php (require할 파일)
 └ 📄config.php (gmail 메일,비밀번호 설정 파일)
 └ 📄sendMail.php (메일 전송 화면)
 └ 📄sendMailProc.php (메일 전송프로시저)

 

 

화면

<!DOCTYPE html>
<html>
    <head>
        <title>메일 전송</title>
        <script language="javascript" type="text/javascript">
            document.addEventListener("DOMContentLoaded", function(){
                var checkTrim = function(id){
                    var target = document.getElementById(id);
                    if(target.value == "" || target.value == null){
                        target.setAttribute('placeholder','입력해주세요.');
                        target.focus();
                        return false;
                    }
                }

                var checkEmail = function(id){
                    var pattern = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
                    var target = document.getElementById(id);

                    if(target.value.match(pattern) == null){
                        target.value = "";
                        target.setAttribute('placeholder','올바른 이메일 주소를 입력해주세요.');
                        target.focus();
                        return false;
                    }
                }

                var sendBtn = document.getElementById('sendBtn');
                sendBtn.onclick = function(){

                    if(checkEmail('sendEmail')==false)return;
                    if(checkEmail('receiveEmail')==false)return;
                    if(checkTrim('mailtitle')==false)return;
                    if(checkTrim('mailcontent')==false)return;
                    
                    if(confirm('메일을 전송하시겠습니까?')){
                        var mailFrm = document.getElementById('mailFrm');
                        mailFrm.action = "sendMailProc.php";
                        mailFrm.submit();                        
                    }
                }
            });
        </script>
    </head>
    <body>
        <div id="sendmail-div">
            <form id="mailFrm" method="post">
                <h3 class="div-title">메일 전송</h3>
                <div class="form-group">
                    <label class="input-label" for="sendEmail">보내는 사람</label>
                    <div class="input-div">
                        <input type="email" name="sendEmail" id="sendEmail" value="sgjin@vina.co.kr">
                    </div>
                </div>
                <div class="form-group">
                    <label class="input-label" for="receiveEmail">받는 사람</label>
                    <div class="input-div">
                        <input type="email" name="receiveEmail" id="receiveEmail">
                    </div>
                </div>
                <div class="form-group">
                    <label class="input-label" for="mailtitle">제목</label>
                    <div class="input-div">
                        <input type="text" name="mailtitle" id="mailtitle">
                    </div>
                </div> 

                <textarea id="mailcontent" name="mailcontent" rows="100" cols="100" wrap="hard"></textarea>
                <input type="button" id="sendBtn" value="전송">
            </form>
        </div>
    </body>
</html>

 

 

 

전송 프로시저

<?php
    include_once('config.php');
    include_once('../dbconfig.php');

    $sendEmail  = $_POST["sendEmail"];
    $receiveEmail = $_POST["receiveEmail"];
    $mailtitle = $_POST["mailtitle"];
    $mailcontent = $_POST["mailcontent"];

    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\SMTP;
    use PHPMailer\PHPMailer\Exception;

    require 'Composer/vendor/autoload.php';

    try{
        $mail = new PHPMailer();
        $mail->CharSet = 'UTF-8';
        $mail -> SMTPDebug = 2; 
        $mail->IsSMTP();
        $mail->SMTPAuth = true;
        $mail->SMTPSecure = "tls";
        $mail->Host = "smtp.gmail.com";
        $mail->Port = 587;
        $mail->SMTPAuth = true;
        $mail->Username = $s_email;     //서버이메일
        $mail->Password = $s_pwd;       //서버이메일비밀번호
        $mail->SetFrom($sendEmail);     //보내는 메일
        $mail->AddAddress($receiveEmail);//받는메일
        $mail->Subject = $mailtitle;    //메일제목
        $mail->Body = $mailcontent;     //메일내용
        $mail->IsHTML (true);
		
        //지메일 CA인증 없으면 오류난다고 추가 해야한다고 하는데 없어도 전송되긴 함
        $mail -> SMTPOptions = array(
            "ssl" => array(
                "verify_peer" => false
                , "verify_peer_name" => false
                , "allow_self_signed" => true
            )
        );

        if (!$mail->send()) {
            echo "<script>alert('Error: ".$mail->ErrorInfo."');window.location.href='sendMail.php';</script>";
        } else {
            

            echo "<script>alert('메일을 전송했습니다!');window.location.href='sendMail.php';</script>";
        }

    }catch(Exception $e) {
        echo "<script>alert('Error: $mail->ErrorInfo');window.location.href='sendMail.php';</script>";
    }

?>

 

 

 

 

결과

받은편지함(지메일 ./ 네이버)

보낸편지함

 

'{ "Hello World!" }; > PHP' 카테고리의 다른 글

(php) 파일업로드 및 파일 다운로드  (0) 2022.06.16
php/ 식단 사이트 구조 잡기  (0) 2022.05.26
(php) 함수, 내장 함수  (0) 2022.05.25
(php) 기초  (0) 2022.05.24
(php) 이클립스 개발 환경 구축하기  (0) 2022.05.23