PHPMailer를 이용한 이메일 발송

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 에서 확인 및 다운로드 할 수 있다.

2 Replies to “PHPMailer를 이용한 이메일 발송”

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

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

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

Leave a 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.