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

  • PHP 코드 중간에서 include_path 설정 변경하기
  • 아이폰 키보드 오타 줄이기
  • iPhone 음악 음질 향상 방법
  • Windows 11 업데이트 수동으로 설치하기
  • AWS CLI를 이용하여 S3 파일의 Content-Type 변경
  • 맥 Automator를 이용한 여러 개 App 동시실행
  • 인터넷 접속이 제한된 환경에서 brew 를 이용한 패키지 업데이트
  • Notepad++ NppFTP 플러그인 수동 설치
  • Gitlab CI 에서 Merge Request Approve 여부 체크
  • hidutil 을 이용한 맥키보드 한/영 변경키 변경

Recent Comments

  • 편리 on Notepad++ NppFTP 플러그인 수동 설치
  • paul-j on Notepad++ NppFTP 플러그인 수동 설치
  • 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를 이용한 이메일 발송

Meta

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