lang/php

CodeIgniter Email SMTP 451 Error

C/H 2015. 1. 30. 08:30

PHP

CodeIgniter


SMPT 451 오류는 인터넷 메일 메시지의 모든 라인과 라인 피드(LF) 및 캐리지 리턴 (CR)을 준수하지 않고 메일을 보내려 할때 발생하는 오류 코드로 규칙을 준수하지 않을 경우 822bis 섹션 2.3의 위반으로 메일 서버에 의해 거부 된다.

$config['mailtype'] = 'html';  
$config['charset']='utf-8';
$config['crlf'] = "\r\n";
$config['newline']="\r\n";
$config['wordwrap'] = TRUE;

switch( 'smtp' )
{
	case 'gmail':
		$config['protocol']='smtp';  
		$config['smtp_host']='ssl://smtp.googlemail.com';  
		$config['smtp_port']='465';
		$config['smtp_timeout']='30';  
		$config['smtp_user']='userid@gmail.com';  
		$config['smtp_pass']='password';
		break;
	case 'nate':
		$config['protocol']='smtp';  
		$config['smtp_host']='ssl://smtp.mail.nate.com';  
		$config['smtp_port']='465';  
		$config['smtp_timeout']='30';  
		$config['smtp_user']='userid@empal.com';  
		$config['smtp_pass']='password';
		break;
	case 'naver':
		// 네이버 > 메일 > 환경설정 > POP3/SMTP 사용설정 필요
		$config['protocol']='smtp';  
		$config['smtp_host']='ssl://smtp.naver.com';  
		$config['smtp_port']='465';  
		$config['smtp_timeout']='30';  
		$config['smtp_user']='userid@naver.com';  
		$config['smtp_pass']='password';
		break;
	case 'yahoo':
		$config['protocol']='smtp';  
		$config['smtp_host']='ssl://smtp.mail.yahoo.com';  
		$config['smtp_port']='465';  
		$config['smtp_timeout']='30';  
		$config['smtp_user']='userid@yahoo.com';  
		$config['smtp_pass']='password';
		break;
	case 'smtp':
		$config['protocol']='smtp';
		$config['smtp_host']='mail.domain.com';
		$config['smtp_port']='25';
		$config['smtp_timeout']='100';
		$config['smtp_user']='';
		$config['smtp_pass']='';
		break;
	case 'sendmail':	/* follow default */
	default:
		$config['protocol'] = 'sendmail';
		$config['mailpath'] = '/usr/sbin/sendmail';
		break;
}

만약 위 방법으로도 451 에러가 발생한다면 코드이그나이터 Email Lib를 확장해서 문제를 해결

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * 
 * @author stepone.kr@gmail.com
 *
 * SMTP 451 Error 해결
 * http://stratosprovatopoulos.com/web-development/php/smtp-451-error-codeigniter/
 */
class MY_Email extends CI_Email {
	
	protected function _prep_q_encoding($str, $from = FALSE)
	{
		$str = str_replace(array("\r", "\n"), array('', ''), $str);

		// Line length must not exceed 76 characters, so we adjust for
		// a space, 7 extra characters =??Q??=, and the charset that we will add to each line
		$limit = 75 - 7 - strlen($this->charset);

		// these special characters must be converted too
		$convert = array('_', '=', '?');

		if ($from === TRUE)
		{
			$convert[] = ',';
			$convert[] = ';';
		}

		$output = '';
		$temp = '';

		for ($i = 0, $length = strlen($str); $i < $length; $i++)
		{
			// Grab the next character
			$char = substr($str, $i, 1);
			$ascii = ord($char);

			// convert ALL non-printable ASCII characters and our specials
			if ($ascii < 32 OR $ascii > 126 OR in_array($char, $convert))
			{
				$char = '='.dechex($ascii);
			}

			// handle regular spaces a bit more compactly than =20
			if ($ascii == 32)
			{
				$char = '_';
			}

			// If we're at the character limit, add the line to the output,
			// reset our temp variable, and keep on chuggin'
			if ((strlen($temp) + strlen($char)) >= $limit)
			{
				$output .= $temp."\n";
				$temp = '';
			}

			// Add the character to our temporary line
			$temp .= $char;
		}

		$str = $output.$temp;

		// wrap each line with the shebang, charset, and transfer encoding
		// the preceding space on successive lines is required for header "folding"
		$str = trim(preg_replace('/^(.*)$/m', ' =?'.$this->charset.'?Q?$1?=', $str));

		return str_replace(array("\n"), array("\r\n"), $str);
	}
}


반응형

'lang > php' 카테고리의 다른 글

window xampp 속도문제 - 가속엔진이 없을 경우  (0) 2015.05.29
PHP han2eng  (0) 2015.03.05
CodeIgniter Rest Server Format jsonp,cvs Error  (0) 2014.12.12
CodeIgniter Straight Model  (0) 2014.12.09
PHP 비기너 동영상 튜토리얼  (0) 2014.10.29