테스트 사이트 - 개발 중인 베타 버전입니다

그누보드5 메일알림 관련 질문합니다 호스팅 마다 되는곳 있고 안되는곳있네요.. 채택완료

crimy2000 8년 전 조회 2,529

기존에 주문알림 , 상담신청 알림 , 문의 알림, 관리자에 받을 이메일 각각 지정해놓으면

https://sir.kr/data/editor/1708/a92cd000596c922cf341b01c8b0cf131_1502363418_4618.PNG">

카페 24 또는 가비아 한국 호스팅 쪽에다가 그누보드 셋팅 하면  메일이 오는데

해외 호스팅어쪽 셋팅 했을시 메일이 오지가 않습니다.

한국 호스팅쪽은 다음 지메일 네이트 네이버 다 잘 들어오는데 호스팅어만 그렇습니다.

PHP 버전 5.1 그누보드 5.0.38 PHP 메일러 2.0.4 입니다 .  호스팅어는 php5.2~7.1 지원 ,

아래 사양 첨부와 / 메일 소스 코드 첨부합니다.

데이터베이스 서버

서버: Localhost via UNIX socket
서버 타입: MariaDB 서버 버전: 10.1.25-MariaDB - MariaDB Server 제품 버전: 10

Apache 데이터베이스 클라이언트 버전: libmysql - mysqlnd 5.0.12-dev - 20150407 - $Id: b5c5906d452ec590732a93b051f3827e02749b83 $ PHP 확장: mysqli문서 curl문서 mbstring문서 PHP 버전: 7.0.21

phpMyAdmin

버전 정보: 4.7.1, 최신 안정 버전: 4.7.3

[code]

http://www.codeworxtech.com">www.codeworxtech.com)  | |      Info: http://phpmailer.sourceforge.net">http://phpmailer.sourceforge.net                               | |   Support: http://sourceforge.net/projects/phpmailer/">http://sourceforge.net/projects/phpmailer/                     | | ------------------------------------------------------------------------- | |    Author: Andy Prevost (project admininistrator)                         | |    Author: Brent R. Matzelle (original founder)                           | | Copyright (c) 2004-2007, Andy Prevost. All Rights Reserved.               | | Copyright (c) 2001-2003, Brent R. Matzelle                                | | ------------------------------------------------------------------------- | |   License: Distributed under the Lesser General Public License (LGPL)     | |            http://www.gnu.org/copyleft/lesser.html">http://www.gnu.org/copyleft/lesser.html                        | | This program is distributed in the hope that it will be useful - WITHOUT  | | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or     | | FITNESS FOR A PARTICULAR PURPOSE.                                         | | ------------------------------------------------------------------------- | | We offer a number of paid services (http://www.codeworxtech.com">www.codeworxtech.com):                | | - Web Hosting on highly optimized fast and secure servers                 | | - Technology Consulting                                                   | | - Oursourcing (highly qualified programmers and graphic designers)        | '---------------------------------------------------------------------------'

/**  * PHPMailer - PHP email transport class  * @package PHPMailer  * @author Andy Prevost  * @copyright 2004 - 2009 Andy Prevost  */

class PHPMailer {

  /////////////////////////////////////////////////   // PROPERTIES, PUBLIC   /////////////////////////////////////////////////

  /**    * Email priority (1 = High, 3 = Normal, 5 = low).    * @var int    */   var $Priority          = 3;

  /**    * Sets the CharSet of the message.    * @var string    */   //var $CharSet           = 'iso-8859-1';   var $CharSet           = 'utf-8';

  /**    * Sets the Content-type of the message.    * @var string    */   var $ContentType        = 'text/plain';

  /**    * Sets the Encoding of the message. Options for this are "8bit",    * "7bit", "binary", "base64", and "quoted-printable".    * @var string    */   var $Encoding          = '8bit';

  /**    * Holds the most recent mailer error message.    * @var string    */   var $ErrorInfo         = '';

  /**    * Sets the From email address for the message.    * @var string    */   var $From              = 'root@localhost';

  /**    * Sets the From name of the message.    * @var string    */   var $FromName          = 'Root User';

  /**    * Sets the Sender email (Return-Path) of the message.  If not empty,    * will be sent via -f to sendmail or as 'MAIL FROM' in smtp mode.    * @var string    */   var $Sender            = '';

  /**    * Sets the Subject of the message.    * @var string    */   var $Subject           = '';

  /**    * Sets the Body of the message.  This can be either an HTML or text body.    * If HTML then run IsHTML(true).    * @var string    */   var $Body              = '';

  /**    * Sets the text-only body of the message.  This automatically sets the    * email to multipart/alternative.  This body can be read by mail    * clients that do not have HTML email capability such as mutt. Clients    * that can read HTML will view the normal Body.    * @var string    */   var $AltBody           = '';

  /**    * Sets word wrapping on the body of the message to a given number of    * characters.    * @var int    */   var $WordWrap          = 0;

  /**    * Method to send mail: ("mail", "sendmail", or "smtp").    * @var string    */   var $Mailer            = 'mail';

  /**    * Sets the path of the sendmail program.    * @var string    */   var $Sendmail          = '/usr/sbin/sendmail';

  /**    * Path to PHPMailer plugins.  This is now only useful if the SMTP class    * is in a different directory than the PHP include path.    * @var string    */   var $PluginDir         = '';

  /**    * Holds PHPMailer version.    * @var string    */   var $Version           = "2.0.4";

  /**    * Sets the email address that a reading confirmation will be sent.    * @var string    */   var $ConfirmReadingTo  = '';

  /**    * Sets the hostname to use in Message-Id and Received headers    * and as default HELO string. If empty, the value returned    * by SERVER_NAME is used or 'localhost.localdomain'.    * @var string    */   var $Hostname          = '';

  /**    * Sets the message ID to be used in the Message-Id header.    * If empty, a unique id will be generated.    * @var string    */   var $MessageID         = '';

  /////////////////////////////////////////////////   // PROPERTIES FOR SMTP   /////////////////////////////////////////////////

  /**    * Sets the SMTP hosts.  All hosts must be separated by a    * semicolon.  You can also specify a different port    * for each host by using this format: [hostname:port]    * (e.g. "smtp1.example.com:25;smtp2.example.com").    * Hosts will be tried in order.    * @var string    */   var $Host        = 'localhost';

  /**    * Sets the default SMTP server port.    * @var int    */   var $Port        = 25;

  /**    * Sets the SMTP HELO of the message (Default is $Hostname).    * @var string    */   var $Helo        = '';

  /**    * Sets connection prefix.    * Options are "", "ssl" or "tls"    * @var string    */   var $SMTPSecure = "";

  /**    * Sets SMTP authentication. Utilizes the Username and Password variables.    * @var bool    */   var $SMTPAuth     = false;

  /**    * Sets SMTP username.    * @var string    */   var $Username     = '';

  /**    * Sets SMTP password.    * @var string    */   var $Password     = '';

  /**    * Sets the SMTP server timeout in seconds. This function will not    * work with the win32 version.    * @var int    */   var $Timeout      = 10;

  /**    * Sets SMTP class debugging on or off.    * @var bool    */   var $SMTPDebug    = false;

  /**    * Prevents the SMTP connection from being closed after each mail    * sending.  If this is set to true then to close the connection    * requires an explicit call to SmtpClose().    * @var bool    */   var $SMTPKeepAlive = false;

  /**    * Provides the ability to have the TO field process individual    * emails, instead of sending to entire TO addresses    * @var bool    */   var $SingleTo = false;

  /////////////////////////////////////////////////   // PROPERTIES, PRIVATE   /////////////////////////////////////////////////

  var $smtp            = NULL;   var $to              = array();   var $cc              = array();   var $bcc             = array();   var $ReplyTo         = array();   var $attachment      = array();   var $CustomHeader    = array();   var $message_type    = '';   var $boundary        = array();   var $language        = array();   var $error_count     = 0;   var $LE              = "\n";   var $sign_cert_file  = "";   var $sign_key_file   = "";   var $sign_key_pass   = "";

  /////////////////////////////////////////////////   // METHODS, VARIABLES   /////////////////////////////////////////////////

  /**    * Sets message type to HTML.    * @param bool $bool    * @return void    */   function IsHTML($bool) {     if($bool == true) {       $this->ContentType = 'text/html';     } else {       $this->ContentType = 'text/plain';     }   }

  /**    * Sets Mailer to send message using SMTP.    * @return void    */   function IsSMTP() {     $this->Mailer = 'smtp';   }

  /**    * Sets Mailer to send message using PHP mail() function.    * @return void    */   function IsMail() {     $this->Mailer = 'mail';   }

  /**    * Sets Mailer to send message using the $Sendmail program.    * @return void    */   function IsSendmail() {     $this->Mailer = 'sendmail';   }

  /**    * Sets Mailer to send message using the qmail MTA.    * @return void    */   function IsQmail() {     $this->Sendmail = '/var/qmail/bin/sendmail';     $this->Mailer = 'sendmail';   }

  /////////////////////////////////////////////////   // METHODS, RECIPIENTS   /////////////////////////////////////////////////

  /**    * Adds a "To" address.    * @param string $address    * @param string $name    * @return void    */   function AddAddress($address, $name = '') {     $cur = count($this->to);     $this->to[$cur][0] = trim($address);     $this->to[$cur][1] = $name;   }

  /**    * Adds a "Cc" address. Note: this function works    * with the SMTP mailer on win32, not with the "mail"    * mailer.    * @param string $address    * @param string $name    * @return void    */   function AddCC($address, $name = '') {     $cur = count($this->cc);     $this->cc[$cur][0] = trim($address);     $this->cc[$cur][1] = $name;   }

  /**    * Adds a "Bcc" address. Note: this function works    * with the SMTP mailer on win32, not with the "mail"    * mailer.    * @param string $address    * @param string $name    * @return void    */   function AddBCC($address, $name = '') {     $cur = count($this->bcc);     $this->bcc[$cur][0] = trim($address);     $this->bcc[$cur][1] = $name;   }

  /**    * Adds a "Reply-To" address.    * @param string $address    * @param string $name    * @return void    */   function AddReplyTo($address, $name = '') {     $cur = count($this->ReplyTo);     $this->ReplyTo[$cur][0] = trim($address);     $this->ReplyTo[$cur][1] = $name;   }

  /////////////////////////////////////////////////   // METHODS, MAIL SENDING   /////////////////////////////////////////////////

  /**    * Creates message and assigns Mailer. If the message is    * not sent successfully then it returns false.  Use the ErrorInfo    * variable to view description of the error.    * @return bool    */   function Send() {     $header = '';     $body = '';     $result = true;

    if((count($this->to) + count($this->cc) + count($this->bcc)) < 1) {       $this->SetError($this->Lang('provide_address'));       return false;     }

    /* Set whether the message is multipart/alternative */     if(!empty($this->AltBody)) {       $this->ContentType = 'multipart/alternative';     }

    $this->error_count = 0; // reset errors     $this->SetMessageType();     $header .= $this->CreateHeader();     $body = $this->CreateBody();

    if($body == '') {       return false;     }

    /* Choose the mailer */     switch($this->Mailer) {       case 'sendmail':         $result = $this->SendmailSend($header, $body);         break;       case 'smtp':         $result = $this->SmtpSend($header, $body);         break;       case 'mail':         $result = $this->MailSend($header, $body);         break;       default:         $result = $this->MailSend($header, $body);         break;         //$this->SetError($this->Mailer . $this->Lang('mailer_not_supported'));         //$result = false;         //break;     }

    return $result;   }

  /**    * Sends mail using the $Sendmail program.    * @access private    * @return bool    */   function SendmailSend($header, $body) {     if ($this->Sender != '') {       $sendmail = sprintf("%s -oi -f %s -t", escapeshellcmd($this->Sendmail), escapeshellarg($this->Sender));     } else {       $sendmail = sprintf("%s -oi -t", escapeshellcmd($this->Sendmail));     }

    if(!@$mail = popen($sendmail, 'w')) {       $this->SetError($this->Lang('execute') . $this->Sendmail);       return false;     }

    fputs($mail, $header);     fputs($mail, $body);

    $result = pclose($mail);     if (version_compare(phpversion(), '4.2.3') == -1) {       $result = $result >> 8 & 0xFF;     }     if($result != 0) {       $this->SetError($this->Lang('execute') . $this->Sendmail);       return false;     }     return true;   }

  /**    * Sends mail using the PHP mail() function.    * @access private    * @return bool    */   function MailSend($header, $body) {

    $to = '';     for($i = 0; $i < count($this->to); $i++) {       if($i != 0) { $to .= ', '; }       $to .= $this->AddrFormat($this->to[$i]);     }

    //$toArr = split(',', $to);     $toArr = explode(',', $to);

    $params = sprintf("-oi -f %s", $this->Sender);     if ($this->Sender != '' && strlen(ini_get('safe_mode')) < 1) {       $old_from = ini_get('sendmail_from');       ini_set('sendmail_from', $this->Sender);       if ($this->SingleTo === true && count($toArr) > 1) {         foreach ($toArr as $key => $val) {           $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);         }       } else {         $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);       }     } else {       if ($this->SingleTo === true && count($toArr) > 1) {         foreach ($toArr as $key => $val) {           $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);         }       } else {         $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header);       }     }

    if (isset($old_from)) {       ini_set('sendmail_from', $old_from);     }

    if(!$rt) {       $this->SetError($this->Lang('instantiate'));       return false;     }

    return true;   }

  /**    * Sends mail via SMTP using PhpSMTP (Author:    * Chris Ryan).  Returns bool.  Returns false if there is a    * bad MAIL FROM, RCPT, or DATA input.    * @access private    * @return bool    */   function SmtpSend($header, $body) {     include_once($this->PluginDir . 'class.smtp.php');     $error = '';     $bad_rcpt = array();

    if(!$this->SmtpConnect()) {       return false;     }

    $smtp_from = ($this->Sender == '') ? $this->From : $this->Sender;     if(!$this->smtp->Mail($smtp_from)) {       $error = $this->Lang('from_failed') . $smtp_from;       $this->SetError($error);       $this->smtp->Reset();       return false;     }

    /* Attempt to send attach all recipients */     for($i = 0; $i < count($this->to); $i++) {       if(!$this->smtp->Recipient($this->to[$i][0])) {         $bad_rcpt[] = $this->to[$i][0];       }     }     for($i = 0; $i < count($this->cc); $i++) {       if(!$this->smtp->Recipient($this->cc[$i][0])) {         $bad_rcpt[] = $this->cc[$i][0];       }     }     for($i = 0; $i < count($this->bcc); $i++) {       if(!$this->smtp->Recipient($this->bcc[$i][0])) {         $bad_rcpt[] = $this->bcc[$i][0];       }     }

    if(count($bad_rcpt) > 0) { // Create error message       for($i = 0; $i < count($bad_rcpt); $i++) {         if($i != 0) {           $error .= ', ';         }         $error .= $bad_rcpt[$i];       }       $error = $this->Lang('recipients_failed') . $error;       $this->SetError($error);       $this->smtp->Reset();       return false;     }

    if(!$this->smtp->Data($header . $body)) {       $this->SetError($this->Lang('data_not_accepted'));       $this->smtp->Reset();       return false;     }     if($this->SMTPKeepAlive == true) {       $this->smtp->Reset();     } else {       $this->SmtpClose();     }

    return true;   }

  /**    * Initiates a connection to an SMTP server.  Returns false if the    * operation failed.    * @access private    * @return bool    */   function SmtpConnect() {     if($this->smtp == NULL) {       $this->smtp = new SMTP();     }

    $this->smtp->do_debug = $this->SMTPDebug;     $hosts = explode(';', $this->Host);     $index = 0;     $connection = ($this->smtp->Connected());

    /* Retry while there is no connection */     while($index < count($hosts) && $connection == false) {       $hostinfo = array();       if(preg_match('/^(.+):([0-9]+)$/i', $hosts[$index], $hostinfo)) {         $host = $hostinfo[1];         $port = $hostinfo[2];       } else {         $host = $hosts[$index];         $port = $this->Port;       }

      if($this->smtp->Connect(((!empty($this->SMTPSecure))?$this->SMTPSecure.'://':'').$host, $port, $this->Timeout)) {         if ($this->Helo != '') {           $this->smtp->Hello($this->Helo);         } else {           $this->smtp->Hello($this->ServerHostname());         }

        $connection = true;         if($this->SMTPAuth) {           if(!$this->smtp->Authenticate($this->Username, $this->Password)) {             $this->SetError($this->Lang('authenticate'));             $this->smtp->Reset();             $connection = false;           }         }       }       $index++;     }     if(!$connection) {       $this->SetError($this->Lang('connect_host'));     }

    return $connection;   }

  /**    * Closes the active SMTP session if one exists.    * @return void    */   function SmtpClose() {     if($this->smtp != NULL) {       if($this->smtp->Connected()) {         $this->smtp->Quit();         $this->smtp->Close();       }     }   }

  /**    * Sets the language for all class error messages.  Returns false    * if it cannot load the language file.  The default language type    * is English.    * @param string $lang_type Type of language (e.g. Portuguese: "br")    * @param string $lang_path Path to the language file directory    * @access public    * @return bool    */   function SetLanguage($lang_type, $lang_path = 'language/') {     if(file_exists($lang_path.'phpmailer.lang-'.$lang_type.'.php')) {       include($lang_path.'phpmailer.lang-'.$lang_type.'.php');     } elseif (file_exists($lang_path.'phpmailer.lang-en.php')) {       include($lang_path.'phpmailer.lang-en.php');     } else {       $PHPMAILER_LANG = array();       $PHPMAILER_LANG["provide_address"]      = 'You must provide at least one ' .       $PHPMAILER_LANG["mailer_not_supported"] = ' mailer is not supported.';       $PHPMAILER_LANG["execute"]              = 'Could not execute: ';       $PHPMAILER_LANG["instantiate"]          = 'Could not instantiate mail function.';       $PHPMAILER_LANG["authenticate"]         = 'SMTP Error: Could not authenticate.';       $PHPMAILER_LANG["from_failed"]          = 'The following From address failed: ';       $PHPMAILER_LANG["recipients_failed"]    = 'SMTP Error: The following ' .       $PHPMAILER_LANG["data_not_accepted"]    = 'SMTP Error: Data not accepted.';       $PHPMAILER_LANG["connect_host"]         = 'SMTP Error: Could not connect to SMTP host.';       $PHPMAILER_LANG["file_access"]          = 'Could not access file: ';       $PHPMAILER_LANG["file_open"]            = 'File Error: Could not open file: ';       $PHPMAILER_LANG["encoding"]             = 'Unknown encoding: ';       $PHPMAILER_LANG["signing"]              = 'Signing Error: ';     }     $this->language = $PHPMAILER_LANG;

    return true;   }

  /////////////////////////////////////////////////   // METHODS, MESSAGE CREATION   /////////////////////////////////////////////////

  /**    * Creates recipient headers.    * @access private    * @return string    */   function AddrAppend($type, $addr) {     $addr_str = $type . ': ';     $addr_str .= $this->AddrFormat($addr[0]);     if(count($addr) > 1) {       for($i = 1; $i < count($addr); $i++) {         $addr_str .= ', ' . $this->AddrFormat($addr[$i]);       }     }     $addr_str .= $this->LE;

    return $addr_str;   }

  /**    * Formats an address correctly.    * @access private    * @return string    */   function AddrFormat($addr) {     if(empty($addr[1])) {       $formatted = $this->SecureHeader($addr[0]);     } else {       $formatted = $this->EncodeHeader($this->SecureHeader($addr[1]), 'phrase') . " <" . $this->SecureHeader($addr[0]) . ">";     }

    return $formatted;   }

  /**    * Wraps message for use with mailers that do not    * automatically perform wrapping and for quoted-printable.    * Original written by philippe.    * @access private    * @return string    */   function WrapText($message, $length, $qp_mode = false) {     $soft_break = ($qp_mode) ? sprintf(" =%s", $this->LE) : $this->LE;     // If utf-8 encoding is used, we will need to make sure we don't     // split multibyte characters when we wrap     $is_utf8 = (strtolower($this->CharSet) == "utf-8");

    $message = $this->FixEOL($message);     if (substr($message, -1) == $this->LE) {       $message = substr($message, 0, -1);     }

    $line = explode($this->LE, $message);     $message = '';     for ($i=0 ;$i < count($line); $i++) {       $line_part = explode(' ', $line[$i]);       $buf = '';       for ($e = 0; $e $length)) {           $space_left = $length - strlen($buf) - 1;           if ($e != 0) {             if ($space_left > 20) {               $len = $space_left;               if ($is_utf8) {                 $len = $this->UTF8CharBoundary($word, $len);               } elseif (substr($word, $len - 1, 1) == "=") {                 $len--;               } elseif (substr($word, $len - 2, 1) == "=") {                 $len -= 2;               }               $part = substr($word, 0, $len);               $word = substr($word, $len);               $buf .= ' ' . $part;               $message .= $buf . sprintf("=%s", $this->LE);             } else {               $message .= $buf . $soft_break;             }             $buf = '';           }           while (strlen($word) > 0) {             $len = $length;             if ($is_utf8) {               $len = $this->UTF8CharBoundary($word, $len);             } elseif (substr($word, $len - 1, 1) == "=") {               $len--;             } elseif (substr($word, $len - 2, 1) == "=") {               $len -= 2;             }             $part = substr($word, 0, $len);             $word = substr($word, $len);

            if (strlen($word) > 0) {               $message .= $part . sprintf("=%s", $this->LE);             } else {               $buf = $part;             }           }         } else {           $buf_o = $buf;           $buf .= ($e == 0) ? $word : (' ' . $word);

          if (strlen($buf) > $length and $buf_o != '') {             $message .= $buf_o . $soft_break;             $buf = $word;           }         }       }       $message .= $buf . $this->LE;     }

    return $message;   }

  /**    * Finds last character boundary prior to maxLength in a utf-8    * quoted (printable) encoded string.    * Original written by Colin Brown.    * @access private    * @param string $encodedText utf-8 QP text    * @param int    $maxLength   find last character boundary prior to this length    * @return int    */   function UTF8CharBoundary($encodedText, $maxLength) {     $foundSplitPos = false;     $lookBack = 3;     while (!$foundSplitPos) {       $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack);       $encodedCharPos = strpos($lastChunk, "=");       if ($encodedCharPos !== false) {         // Found start of encoded character byte within $lookBack block.         // Check the encoded byte value (the 2 chars after the '=')         $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2);         $dec = hexdec($hex);         if ($dec < 128) { // Single byte character.           // If the encoded char was found at pos 0, it will fit           // otherwise reduce maxLength to start of the encoded char           $maxLength = ($encodedCharPos == 0) ? $maxLength :           $maxLength - ($lookBack - $encodedCharPos);           $foundSplitPos = true;         } elseif ($dec >= 192) { // First byte of a multi byte character           // Reduce maxLength to split at start of character           $maxLength = $maxLength - ($lookBack - $encodedCharPos);           $foundSplitPos = true;         } elseif ($dec < 192) { // Middle byte of a multi byte character, look further back           $lookBack += 3;         }       } else {         // No encoded character found         $foundSplitPos = true;       }     }     return $maxLength;   }

  /**    * Set the body wrapping.    * @access private    * @return void    */   function SetWordWrap() {     if($this->WordWrap < 1) {       return;     }

    switch($this->message_type) {       case 'alt':         /* fall through */       case 'alt_attachments':         $this->AltBody = $this->WrapText($this->AltBody, $this->WordWrap);         break;       default:         $this->Body = $this->WrapText($this->Body, $this->WordWrap);         break;     }   }

  /**    * Assembles message header.    * @access private    * @return string    */   function CreateHeader() {     $result = '';

    /* Set the boundaries */     $uniq_id = md5(uniqid(time()));     $this->boundary[1] = 'b1_' . $uniq_id;     $this->boundary[2] = 'b2_' . $uniq_id;

    $result .= $this->HeaderLine('Date', $this->RFCDate());     if($this->Sender == '') {       $result .= $this->HeaderLine('Return-Path', trim($this->From));     } else {       $result .= $this->HeaderLine('Return-Path', trim($this->Sender));     }

    /* To be created automatically by mail() */     if($this->Mailer != 'mail') {       if(count($this->to) > 0) {         $result .= $this->AddrAppend('To', $this->to);       } elseif (count($this->cc) == 0) {         $result .= $this->HeaderLine('To', 'undisclosed-recipients:;');       }     }

    $from = array();     $from[0][0] = trim($this->From);     $from[0][1] = $this->FromName;     $result .= $this->AddrAppend('From', $from);

    /* sendmail and mail() extract Cc from the header before sending */     if((($this->Mailer == 'sendmail') || ($this->Mailer == 'mail')) && (count($this->cc) > 0)) {       $result .= $this->AddrAppend('Cc', $this->cc);     }

    /* sendmail and mail() extract Bcc from the header before sending */     if((($this->Mailer == 'sendmail') || ($this->Mailer == 'mail')) && (count($this->bcc) > 0)) {       $result .= $this->AddrAppend('Bcc', $this->bcc);     }

    if(count($this->ReplyTo) > 0) {       $result .= $this->AddrAppend('Reply-To', $this->ReplyTo);     }

    /* mail() sets the subject itself */     if($this->Mailer != 'mail') {       $result .= $this->HeaderLine('Subject', $this->EncodeHeader($this->SecureHeader($this->Subject)));     }

    if($this->MessageID != '') {       $result .= $this->HeaderLine('Message-ID',$this->MessageID);     } else {       $result .= sprintf("Message-ID: <%s@%s>%s", $uniq_id, $this->ServerHostname(), $this->LE);     }     $result .= $this->HeaderLine('X-Priority', $this->Priority);     $result .= $this->HeaderLine('X-Mailer', 'PHPMailer (phpmailer.sourceforge.net) [version ' . $this->Version . ']');

    if($this->ConfirmReadingTo != '') {       $result .= $this->HeaderLine('Disposition-Notification-To', '<' . trim($this->ConfirmReadingTo) . '>');     }

    // Add custom headers     for($index = 0; $index < count($this->CustomHeader); $index++) {       $result .= $this->HeaderLine(trim($this->CustomHeader[$index][0]), $this->EncodeHeader(trim($this->CustomHeader[$index][1])));     }     if (!$this->sign_key_file) {       $result .= $this->HeaderLine('MIME-Version', '1.0');       $result .= $this->GetMailMIME();     }

    return $result;   }

  /**    * Returns the message MIME.    * @access private    * @return string    */   function GetMailMIME() {     $result = '';     switch($this->message_type) {       case 'plain':         $result .= $this->HeaderLine('Content-Transfer-Encoding', $this->Encoding);         $result .= sprintf("Content-Type: %s; charset=\"%s\"", $this->ContentType, $this->CharSet);         break;       case 'attachments':         /* fall through */       case 'alt_attachments':         if($this->InlineImageExists()){           $result .= sprintf("Content-Type: %s;%s\ttype=\"text/html\";%s\tboundary=\"%s\"%s", 'multipart/related', $this->LE, $this->LE, $this->boundary[1], $this->LE);         } else {           $result .= $this->HeaderLine('Content-Type', 'multipart/mixed;');           $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"');         }         break;       case 'alt':         $result .= $this->HeaderLine('Content-Type', 'multipart/alternative;');         $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"');         break;     }

    if($this->Mailer != 'mail') {       $result .= $this->LE.$this->LE;     }

    return $result;   }

  /**    * Assembles the message body.  Returns an empty string on failure.    * @access private    * @return string    */   function CreateBody() {     $result = '';     if ($this->sign_key_file) {       $result .= $this->GetMailMIME();     }

    $this->SetWordWrap();

    switch($this->message_type) {       case 'alt':         $result .= $this->GetBoundary($this->boundary[1], '', 'text/plain', '');         $result .= $this->EncodeString($this->AltBody, $this->Encoding);         $result .= $this->LE.$this->LE;         $result .= $this->GetBoundary($this->boundary[1], '', 'text/html', '');         $result .= $this->EncodeString($this->Body, $this->Encoding);         $result .= $this->LE.$this->LE;         $result .= $this->EndBoundary($this->boundary[1]);         break;       case 'plain':         $result .= $this->EncodeString($this->Body, $this->Encoding);         break;       case 'attachments':         $result .= $this->GetBoundary($this->boundary[1], '', '', '');         $result .= $this->EncodeString($this->Body, $this->Encoding);         $result .= $this->LE;         $result .= $this->AttachAll();         break;       case 'alt_attachments':         $result .= sprintf("--%s%s", $this->boundary[1], $this->LE);         $result .= sprintf("Content-Type: %s;%s" . "\tboundary=\"%s\"%s", 'multipart/alternative', $this->LE, $this->boundary[2], $this->LE.$this->LE);         $result .= $this->GetBoundary($this->boundary[2], '', 'text/plain', '') . $this->LE; // Create text body         $result .= $this->EncodeString($this->AltBody, $this->Encoding);         $result .= $this->LE.$this->LE;         $result .= $this->GetBoundary($this->boundary[2], '', 'text/html', '') . $this->LE; // Create the HTML body         $result .= $this->EncodeString($this->Body, $this->Encoding);         $result .= $this->LE.$this->LE;         $result .= $this->EndBoundary($this->boundary[2]);         $result .= $this->AttachAll();         break;     }

    if($this->IsError()) {       $result = '';     } else if ($this->sign_key_file) {       $file = tempnam("", "mail");       $fp = fopen($file, "w");       fwrite($fp, $result);       fclose($fp);       $signed = tempnam("", "signed");

      if (@openssl_pkcs7_sign($file, $signed, "file://".$this->sign_cert_file, array("file://".$this->sign_key_file, $this->sign_key_pass), null)) {         $fp = fopen($signed, "r");         $result = fread($fp, filesize($this->sign_key_file));         $result = '';         while(!feof($fp)){           $result = $result . fread($fp, 1024);         }         fclose($fp);       } else {         $this->SetError($this->Lang("signing").openssl_error_string());         $result = '';       }

      unlink($file);       unlink($signed);     }

    return $result;   }

  /**    * Returns the start of a message boundary.    * @access private    */   function GetBoundary($boundary, $charSet, $contentType, $encoding) {     $result = '';     if($charSet == '') {       $charSet = $this->CharSet;     }     if($contentType == '') {       $contentType = $this->ContentType;     }     if($encoding == '') {       $encoding = $this->Encoding;     }     $result .= $this->TextLine('--' . $boundary);     $result .= sprintf("Content-Type: %s; charset = \"%s\"", $contentType, $charSet);     $result .= $this->LE;     $result .= $this->HeaderLine('Content-Transfer-Encoding', $encoding);     $result .= $this->LE;

    return $result;   }

  /**    * Returns the end of a message boundary.    * @access private    */   function EndBoundary($boundary) {     return $this->LE . '--' . $boundary . '--' . $this->LE;   }

  /**    * Sets the message type.    * @access private    * @return void    */   function SetMessageType() {     if(count($this->attachment) < 1 && strlen($this->AltBody) < 1) {       $this->message_type = 'plain';     } else {       if(count($this->attachment) > 0) {         $this->message_type = 'attachments';       }       if(strlen($this->AltBody) > 0 && count($this->attachment) < 1) {         $this->message_type = 'alt';       }       if(strlen($this->AltBody) > 0 && count($this->attachment) > 0) {         $this->message_type = 'alt_attachments';       }     }   }

  /* Returns a formatted header line.    * @access private    * @return string    */   function HeaderLine($name, $value) {     return $name . ': ' . $value . $this->LE;   }

  /**    * Returns a formatted mail line.    * @access private    * @return string    */   function TextLine($value) {     return $value . $this->LE;   }

  /////////////////////////////////////////////////   // CLASS METHODS, ATTACHMENTS   /////////////////////////////////////////////////

  /**    * Adds an attachment from a path on the filesystem.    * Returns false if the file could not be found    * or accessed.    * @param string $path Path to the attachment.    * @param string $name Overrides the attachment name.    * @param string $encoding File encoding (see $Encoding).    * @param string $type File extension (MIME) type.    * @return bool    */   function AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream') {     if(!@is_file($path)) {       $this->SetError($this->Lang('file_access') . $path);       return false;     }

    $filename = basename($path);     if($name == '') {       $name = $filename;     }

    $cur = count($this->attachment);     $this->attachment[$cur][0] = $path;     $this->attachment[$cur][1] = $filename;     $this->attachment[$cur][2] = $name;     $this->attachment[$cur][3] = $encoding;     $this->attachment[$cur][4] = $type;     $this->attachment[$cur][5] = false; // isStringAttachment     $this->attachment[$cur][6] = 'attachment';     $this->attachment[$cur][7] = 0;

    return true;   }

  /**    * Attaches all fs, string, and binary attachments to the message.    * Returns an empty string on failure.    * @access private    * @return string    */   function AttachAll() {     /* Return text of body */     $mime = array();

    /* Add all attachments */     for($i = 0; $i < count($this->attachment); $i++) {       /* Check for string attachment */       $bString = $this->attachment[$i][5];       if ($bString) {         $string = $this->attachment[$i][0];       } else {         $path = $this->attachment[$i][0];       }

      $filename    = $this->attachment[$i][1];       $name        = $this->attachment[$i][2];       $encoding    = $this->attachment[$i][3];       $type        = $this->attachment[$i][4];       $disposition = $this->attachment[$i][6];       $cid         = $this->attachment[$i][7];

      $mime[] = sprintf("--%s%s", $this->boundary[1], $this->LE);       $mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $this->EncodeHeader($this->SecureHeader($name)), $this->LE);       $mime[] = sprintf("Content-Transfer-Encoding: %s%s", $encoding, $this->LE);

      if($disposition == 'inline') {         $mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE);       }

      $mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $this->EncodeHeader($this->SecureHeader($name)), $this->LE.$this->LE);

      /* Encode as string attachment */       if($bString) {         $mime[] = $this->EncodeString($string, $encoding);         if($this->IsError()) {           return '';         }         $mime[] = $this-&

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
잉끼s
8년 전

화이트도메인 등록하시고 

mx 레코드 설정해주세요.

카페24나 가비아는 소유하고 있는 IP의 화이트도메인 관리를 잘하고 있어서 굳이 신경쓸 필요가 없더라고요. 다른 업체들은 안 써봐서 모르겠습니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인