참고 블로그
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
Composer 설치
(window에서 혼자 실습하는 거라 설치가 필요했음)
https://getcomposer.org/download/?_x_tr_sl=auto&_x_tr_tl=ko&_x_tr_hl=ko
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 |