Skip to content

CHICPRO

  • Life Log
  • Cycling Log
  • Photo Log
    • Portrait
    • Landscape
    • Flower
    • Etc
  • Coding Log
  • Information

PHPMailer를 이용한 이메일 발송

2020-08-25 by 편리

PHP 개발을 진행하다보면 문의폼 등에서 메일 발송 기능을 사용해야할 때가 있다. 사용 중인 서버에 메일발송 환경이 구축되어 있다면 PHP 자체 mail() 함수 등을 사용해도 되지만 대부분의 웹호스팅 환경에서는 메일 발송이 정상적으로 되지 않는 경우가 많아 외부의 메일 서버를 사용해야 한다. 이럴 때 사용할 수 있는 것이 PHPMailer 이다. PHPMailer를 이용해 간단하게 메일 발송 기능을 구현할 수 있다.

먼저 메일 발송서버 등의 설정을 위한 config.php 파일이다.

<?php
// PHPMailer SMTP
define('CM_SMTP_HOST',   'smtp.server.com');
define('CM_SMTP_PORT',   '587');
define('CM_SMTP_AUTH',   true);
define('CM_SMTP_USER',   'user@server.com');
define('CM_SMTP_PASS',   'password');
define('CM_SMTP_SECURE', 'tls');
define('CM_SMTP_DEBUG',  false);

// Mail Sender
define('CM_SENDER_NAME',  '');
define('CM_SENDER_EMAIL', '');

다음으로 메일 발송을 위한 sendMail 함수 코드이다.

<?php
function sendMail($fname, $fmail, $to, $subject, $content, $type = 0, $reply = '', $file = '', $cc = '', $bcc = '')
{
    if ($type != 1)
        $content = nl2br($content);

    $mail = new MAILER(true);

    if ($sender = CM_SENDER_EMAIL) {
        $mail->setFrom($sender, CM_SENDER_NAME);
    } else {
        $mail->setFrom($fmail, $fname);
    }

    $mail->ClearReplyTos();

    if (!$reply)
        $mail->addReplyTo($fmail, $fname);

    if ($reply) {
        if (!is_array($reply)) {
            $mail->addReplyTo($reply);
        } else {
            foreach ($reply as $k => $v) {
                $mail->addReplyTo($k, $v);
            }
        }
    }

    $mail->Subject = $subject;
    $mail->AltBody = '';
    $mail->msgHTML($content);

    if (!is_array($to)) {
        $mail->addAddress($to);
    } else {
        foreach ($to as $k => $v) {
            $mail->addAddress($k, $v);
        }
    }

    if ($cc) {
        if (!is_array($cc)) {
            $mail->addCC($cc);
        } else {
            foreach ($cc as $k => $v) {
                $mail->addCC($k, $v);
            }
        }
    }

    if ($bcc) {
        if (!is_array($bcc)) {
            $mail->addBCC($bcc);
        } else {
            foreach ($bcc as $k => $v) {
                $mail->addBCC($k, $v);
            }
        }
    }

    if ($file != '') {
        foreach ($file as $f) {
            $mail->addAttachment($f['path'], $f['name']);
        }
    }

    try {
        $mail->send();
        //echo "Message has been sent successfully";
        $result = 'Message has been sent successfully';
    } catch (Exception $e) {
        //echo "Mailer Error: " . $mail->ErrorInfo;
        $result = 'Mailer Error: ' . $mail->ErrorInfo;
    }

    return $result;
}

실제 메일 발송을 위한 send.php 파일의 코드이다.

<?php
require __DIR__.'/lib/MAILER.php';
require __DIR__.'/lib/functions.php';
require __DIR__.'/config.php';

// sendMail($fname, $fmail, $to, $subject, $content, $type = 0, $reply = '', $file = '', $cc = '', $bcc = '');

$fname = 'PHPMailer';
$fmail = 'user@example.com';

$to = 'user2@example.com';

$subject = '메일 테스트입니다.';
$content = '메일 내용입니다.<br>테스트 이메일입니다.';

$result = sendMail($fname, $fmail, $to, $subject, $content, 1);

echo $result;

전체 코드는 github 에서 확인 및 다운로드 할 수 있다.

Post navigation

Previous Post:

워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기

Next Post:

videojs를 이용한 유튜브 영상 플레이리스트 반복재생

6 Commments

  1. 우성짱 says:
    2020-08-25 at 19:01

    와 워드프레스 SMTP mail과 비슷하네요.

    구글 지메일과 연동해서 쓰면 좋을 것 같네요.

    그누보드에 연동할 수 있을까요?

    Reply
    1. 편리 says:
      2020-08-25 at 19:06

      그누보드에는 이미 적영돼 있을 겁니다. mailer() 함수였던 것 같은데요.. 확인해 보세요.

      Reply
  2. 초보자 says:
    2020-12-21 at 11:01

    안녕하세요 진행도중 오류가 나타나 질문드리러 왔습니다.
    $mail = new MAILER(true);
    위 부분에서 MAILER이 MAILER cannot be resolved to a type란 오류로 나오는데
    PHPMailer을 찾지 못하여 생기는 오류인가요 ?

    Reply
    1. 편리 says:
      2020-12-21 at 11:21

      안녕하세요.
      위 포스트의 내용은 전체 코드를 포함하고 있지 않습니다. 포스트 하단에 있는 githu repo 를 방문하시면 전체 코드를 확인하실 수 있습니다. MAILER class 를 작성하지 않아서 발생하는 오류로 확인됩니다.

      Reply
      1. 초보자 says:
        2020-12-21 at 11:50

        위 오류는 해결하여 Test를 진행했을때
        Could not instantiate mail function.이란 에러가 나오는데
        config값은 저한테 맞춰서 수정해야하나요 ?

        Reply
        1. 편리 says:
          2020-12-21 at 13:24

          mail() 함수를 사용할 수 없는 환경인 듯 합니다. config.php 파일의 설정을 환경에 맞게 수정하신 후 사용하셔야 할 것 같습니다.

          Reply

Leave a Reply to 우성짱 Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Recent Posts

  • php 배열 연산에서 + 와 array_merge 의 차이
  • pcntl_fork 를 이용한 다중 프로세스 실행
  • 아이폰 단축어를 이용하여 주중 공휴일엔 알람 울리지 않게 하기
  • 구글 캘린더 전체일정 재동기화
  • OpenLiteSpeed 웹서버에 HTTP 인증 적용
  • OpenLiteSpeed 웹어드민 도메인 연결
  • WireGuard를 이용한 VPN 환경 구축
  • Ubuntu 22.04 서버에 OpenLiteSpeed 웹서버 세팅
  • 맥 vim 세팅
  • 우분투 시스템 터미널쉘 zsh 로 변경

Recent Comments

  • 편리 on 업무관리용 그누보드 게시판 스킨
  • 임종섭 on 업무관리용 그누보드 게시판 스킨
  • 캐논 5D 펌웨어 | Dslr 펌웨어 업그레이드 방법 82 개의 베스트 답변 on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • Top 5 캐논 5D 펌웨어 Top 89 Best Answers on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • 편리 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 임팀장 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 편리 on Notepad++ NppFTP 플러그인 수동 설치
  • paul-j on Notepad++ NppFTP 플러그인 수동 설치
  • YS on Windows 10 iCloud 사진 저장 폴더 변경
  • 편리 on Docker를 이용한 Centos7 + httpd + php 5.4 개발환경 구축

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org
© 2025 CHICPRO | Built using WordPress and SuperbThemes