Skip to content

NCUBE.NET

  • 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 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

  • Windows 10 메모장의 재미난 기능
  • Windows 10 iCloud 사진 저장 폴더 변경
  • VS Code에서 git 히스토리 표시 오류
  • Windows 10 iTunes 백업 폴더 변경
  • Apache 서버에서 htaccess 파일 여러 개 지정하기
  • CentOS 7에서 Apache SELinux 설정
  • PSR 코딩을위해 VS Code 에 php-cs-fixer 적용
  • Instagram Basic Display API 연동
  • phpMyAdmin에서 root 로그인이 불가능한 경우 해결법
  • Ubuntu20.04 에서 PHP8 업그레이드

Recent Comments

  • 편리 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를 이용한 이메일 발송
  • 초보자 on PHPMailer를 이용한 이메일 발송
  • 편리 on 워드프레스 굿스플로 알림톡 플러그인 개발
  • 남민기 on 워드프레스 굿스플로 알림톡 플러그인 개발

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org
© 2021 NCUBE.NET | Built using WordPress and SuperbThemes