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과 비슷하네요.

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

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

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

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

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

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

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

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

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

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

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

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

Comments are closed.

Recent Posts

  • UTM을 이용한 윈도우 사용 때 마우스 스크롤 방향 설정
  • Outlook.com 키보드 단축키 해제하기
  • [Mac] Teams 이미지 등의 캐시 삭제 방법
  • 맥(Mac) 키보드 단축키를 이용한 화면분할 배치 Rectangle
  • Microsoft Edge 브라우저 검색엔진 구글로 변경
  • 맥 Word 에서 최근 문서 표시되지 않게 하기
  • VS Code PHP 개발환경 세팅
  • VS Code에 ESLint와 Prettier 적용하기
  • iterm2 설정 백업
  • iTerm2 프로파일별 단축키 설정

Recent Comments

  • YS on Windows 10 iCloud 사진 저장 폴더 변경
  • 편리 on Docker를 이용한 Centos7 + httpd + php 5.4 개발환경 구축
  • Stas on Docker를 이용한 Centos7 + httpd + php 5.4 개발환경 구축
  • 편리 on [PHP] HTTP와 PHP를 이용한 html5 video 스트리밍 구현
  • Kim on [PHP] HTTP와 PHP를 이용한 html5 video 스트리밍 구현
  • 편리 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 고맙습니다 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 편리 on PHPMailer를 이용한 이메일 발송
  • 초보자 on PHPMailer를 이용한 이메일 발송
  • 편리 on PHPMailer를 이용한 이메일 발송

Meta

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