1. config.php 파일
define('G5_PHPMAILER_PATH', G5_LIB_PATH.'/PHPMailer');
define('G5_SMTP', 'smtp.gmail.com');
define('G5_SMTP_PORT', '587');
define('G5_SMTP_SECURE', 'TLS');
define('G5_SMTP_USER', '2단계 설정한 구글계정');
define('G5_SMTP_PW', '2단계 앱비밀번호 입력');
2. lib 폴더 하위에 PHPMailer 설치
https://github.com/PHPMailer/PHPMailer/releases 접속하여 압축파일 다운
3. lib/mailer.lib.php 수정
<?php
if (!defined('_GNUBOARD_')) exit;
require(/home/admin/plugin/PHPMailer/src/Exception.php): failed to open stream: No such file or directory in /home/admin/lib/mailer.lib.php on line 5, referer: https://kmac360.com/adm/sendmail_test.php
// PHPMailer 클래스 파일 포함
require G5_PHPMAILER_PATH.'/src/Exception.php';
require G5_PHPMAILER_PATH.'/src/PHPMailer.php';
require G5_PHPMAILER_PATH.'/src/SMTP.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;
// 메일 보내기 (파일 여러개 첨부 가능)
// type : text=0, html=1, text+html=2
function mailer($fname, $fmail, $to, $subject, $content, $type=0, $file="", $cc="", $bcc="")
{
global $config;
global $g5;
// 메일발송 사용을 하지 않는다면
if (!$config['cf_email_use']) return;
if ($type != 1)
$content = nl2br($content);
$result = run_replace('mailer', $fname, $fmail, $to, $subject, $content, $type, $file, $cc, $bcc);
if (is_array($result) && isset($result['return'])) {
return $result['return'];
}
$mail_send_result = false;
$mail_error_msg = '';
try {
// PHPMailer 객체 생성
$mail = new PHPMailer(true);
// SMTP 설정이 있으면 SMTP로 메일 발송
if (defined('G5_SMTP') && G5_SMTP) {
// 디버깅 설정 (서버에서 문제 발생시 활성화)
$mail->SMTPDebug = 2; // 0=비활성화, 1=클라이언트, 2=클라이언트/서버
$mail->Debugoutput = 'html';
// SMTP 사용 설정
$mail->isSMTP();
$mail->Host = G5_SMTP;
// SMTP 포트 설정
if (defined('G5_SMTP_PORT') && G5_SMTP_PORT)
$mail->Port = G5_SMTP_PORT;
// SMTP 인증 설정
$mail->SMTPAuth = true;
// SMTP 보안 연결 설정 (ssl 또는 tls)
if (defined('G5_SMTP_SECURE') && G5_SMTP_SECURE)
$mail->SMTPSecure = G5_SMTP_SECURE;
// SMTP 계정 정보 설정
if (defined('G5_SMTP_USER') && defined('G5_SMTP_PW')) {
$mail->Username = G5_SMTP_USER;
$mail->Password = G5_SMTP_PW;
}
// Gmail 특별 설정 (필요한 경우)
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
}
// 기본 메일 설정
$mail->CharSet = 'UTF-8';
$mail->setFrom($fmail, $fname);
$mail->addAddress($to);
$mail->Subject = $subject;
// 메일 내용 설정
if ($type == 1) {
$mail->isHTML(true);
$mail->Body = $content;
$mail->AltBody = strip_tags($content);
} else {
$mail->isHTML(true); // HTML 형식으로 발송
$mail->Body = $content;
$mail->AltBody = strip_tags($content);
}
// 참조, 숨은참조 추가
if ($cc)
$mail->addCC($cc);
if ($bcc)
$mail->addBCC($bcc);
// 첨부 파일 추가
if ($file != "") {
foreach ($file as $f) {
$mail->addAttachment($f['path'], $f['name']);
}
}
// 추가 옵션 적용
$mail = run_replace('mail_options', $mail, $fname, $fmail, $to, $subject, $content, $type, $file, $cc, $bcc);
// 메일 발송
$mail_send_result = $mail->send();
// 오류 확인
if (!$mail_send_result) {
$mail_error_msg = $mail->ErrorInfo;
error_log("Mailer Error: " . $mail_error_msg);
}
} catch (Exception $e) {
$mail_error_msg = $e->getMessage();
error_log("Mailer Exception: " . $mail_error_msg);
}
// 이벤트 실행
run_event('mail_send_result', $mail_send_result, $mail, $to, $cc, $bcc);
// 관리자인 경우 오류 메시지 표시
if (!$mail_send_result && G5_IS_ADMIN) {
echo '<div style="color:red;margin-bottom:15px;">메일 발송 실패: ' . $mail_error_msg . '</div>';
}
return $mail_send_result;
}
// 파일을 첨부함
function attach_file($filename, $tmp_name)
{
// 서버에 업로드 되는 파일은 확장자를 주지 않는다. (보안 취약점)
$dest_file = G5_DATA_PATH.'/tmp/'.str_replace('/', '_', $tmp_name);
move_uploaded_file($tmp_name, $dest_file);
$tmpfile = array("name" => $filename, "path" => $dest_file);
return $tmpfile;
}
?>
끝.
'공부 > Gnuboard' 카테고리의 다른 글
[그누보드] theme, bbs 등 경로 변경하기 (0) | 2023.03.20 |
---|---|
[그누보드] 게시판 파일첨부 필수로 체크하기 (0) | 2022.12.18 |
그누보드 여분필드 추가 및 SQL 컨트롤 시 오류 (0) | 2022.12.01 |
[그누보드] Input 간략한 date-picker (0) | 2022.12.01 |
[그누보드] 유튜브 동영상 게시판 등 썸네일 추출하기 (0) | 2022.12.01 |