cruse_mail.php 는 폼메일 스크립트의 클래스 버전이며, 사용에 도움되기 위한 기본 설명서입니다.
(폼메일 구 버전에 대한 사용 설명서를 보시려면 send_Mail.php 를 클릭하십시오.)

    주요 특징

  • 필드 무제한 삽입 가능.
  • 서버가 허용하는 범위 내에서 파일 첨부 가능.
  • 유동 필드 필수 항목(또는 검증) 가능.
  • 이미지, 이메일, URL 자동 추출 기능.
  • 한번에 여러 주소로 전송 가능.
 

Cruse-Mail 에서 필요한 library 는 다음과 같습니다.

  1. cruse_mail.php
    폼메일 전송을 담당합니다.
  2. input_filter.php
    POST 나 GET 으로 전송된 요소를 검증(또는 필터링)합니다.
  3. uploader.php
    파일 업로드를 담당합니다. 이메일에 파일을 첨부할 수 있습니다.
  4. mime_types.php
    파일 Mime-Type 을 출력합니다.

설치 순서는 다음과 같습니다.

기본적으로 crazy 스크립트는 library 에 속한 파일 외에는 수정이 자유롭습니다.
물론 필요에 의해서 수정은 되나 차후 업그레이드가 필요한 때에는 library 파일만을 업데이트하기 때문에 가급적 수정을 하지 않거나 수정한 부분이 있다면 따로 표시해 주시기 바랍니다.

다운로드 받은 파일을 서버로 업로드하면 설치는 완료되며, 샘플 페이지는 기본 UTF-8 로 지정되어 있습니다.


환경 설정

공통 상수

  • HABONYPHP_DIRNAME
    						
    Cruse-Mail 이 설치된 경로. 끝에 반드시 / 를 입력해 주세요.
    
    기본값: ./

사용 가능한 상수

  • PHP_MAIL_CHARSET
    						
    언어 설정. 기본값: UTF-8
  • PHP_MAIL_IMAGE_EXTS
    						
    이미지 파일 확장자를 설정합니다.
    첨부 파일을 이미지 파일만 받을 때 허용하는 확장자를 설정합니다.
    
    기본값: .jpg .gif .png .bmp

사용 가능한 목록.

Cruse-Mail 클래스에서 사용할 수 있는 메소드 목록을 설명합니다.

  • new cruse_mail( filter )

    Cruse-Mail 를 시작하기 전에 초기화 합니다.

    • filter 배열, 선택사항.
      필터(또는 검증)할 목록을 지정합니다. 자세한 필터 설정 방법은 input_filter.php를 참고하십시오.
    							
    $u = array(
    	'이름' => array(
    		true,
    		'strlen' => array('min' => 4, 'max' => 15),
    		'strip_tags'
    	),
    	'이메일' => array(
    		true,
    		'email'
    	),
    	'내용' => array(
    		true
    	)
    );
    
    $m = new cruse_mail($u);
  • set_cruse( settings )

    Cruse-Mail 를 시작하기 전에 설정을 구성합니다.

    • settings: 배열,
      • content: 전송되는 이메일의 header, body, footer, 그리고 CHARSET 를 설정합니다.
        • header: 기본 값: <table border='0' width='70%' cellpadding='0' cellspacing='0' style='border:none;border-collapse:collapse;font-size:12px' align='center'><tbody><tr><td><h2>E-Mail Content</h2><tr><td>
        • body: 기본 값: </td></tr><tr><td valign='top' style='width: 30%%; height: 24px; border: 1px solid rgb(204, 204, 204);'> %s</td><td valign='top' style='width: 70%%; height: 24px; border: 1px solid rgb(204, 204, 204);'> %s
        • footer: 기본 값: </tbody></table>
        • charset: 기본 값: UTF-8
      • link: 입력받은 폼 요소 중 이미지 URL, 일반 URL, 이메일 URL 를 입력받으면 자동으로 변환할 링크를 설정합니다.
        • img: 기본 값: <img src='%s'>
        • a: 기본 값: <a href='%s'>%s</a>>
        • email: 기본 값: <a href='mailto:%s'>%s</a>
      • staff: 이메일 제목, 받는 사람, 보내는 사람의 이메일 추출 등을 설정합니다.
        • subject: 이메일 제목을 설정합니다. 기본 값: PHP-Mail TEST!!
        • to: 받는 사람 이메일을 설정합니다. 기본 값: your@example.com
        • from: 보내는 사람의 이메일을 추출합니다. true or false. 기본 값: true
      • removal: 전송된 POST 에서 불필요한 필드를 제거합니다. 제거할 필드가 여러 개이면 배열로 지정합니다.
    							
    $m = new cruse_mail();
    $m->set_cruse(
    	array(
    		'content' => array(
    			'header' => '<h2>E-Mail Content</h2>',
    			'body' => '%s : %s<br />',
    			'footer' => '© 2015 Habonyphp.com',
    			'charser' => 'EUC-KR'
    		),
    		'link' => array(
    			'img' => "<img src='%s' width='350' >",
    			'a' => "<a href='%s' target='_blank'>%s</a>>",
    			'email' => "<a href='mailto:%s'>%s</a>"
    		),
    		'staff' => array(
    			'to' => 'habony@example.com',
    			'subject' => '안녕하세요. 하보니입니다.',
    			'from' => true
    		),
    		'removal' => array( 'pass', 'id', 'username')
    	)
    );
  • set_charset( charset )

    charset 을 설정합니다. 기본 값: UTF-8

    							
    $m = new cruse_mail();
    $m->set_charset( 'EUC-KR' );
  • set_content( header, body, footer )

    전송되는 이메일의 header, body, footer 을 설정합니다.

    • header 인수: 기본 값: <table border='0' width='70%' cellpadding='0' cellspacing='0' style='border:none;border-collapse:collapse;font-size:12px' align='center'><tbody><tr><td><h2>E-Mail Content</h2><tr><td>
    • body 인수: 기본 값: </td></tr><tr><td valign='top' style='width: 30%%; height: 24px; border: 1px solid rgb(204, 204, 204);'> %s</td><td valign='top' style='width: 70%%; height: 24px; border: 1px solid rgb(204, 204, 204);'> %s

    							
    $header = '<h2>E-Mail Content</h2>';
    $body = '%s : %s<br />';
    $footer = '© 2015 Habonyphp.com';
    
    
    $m = new cruse_mail();
    $m->set_content( $header, $body, $footer );
  • set_link( img, a, email )

    입력받은 폼 요소 중 이미지 URL, 일반 URL, 이메일 URL 를 입력받으면 자동으로 변환할 링크를 설정합니다.

    • img 인수: 이미지 URL 태그를 설정합니다. 기본 값: <img src='%s'>
    • a 인수: 일반 URL 태그를 설정합니다. 기본 값: <a href='%s'>%s</a>>
    • email 인수: 이메일 태그를 설정합니다. 기본 값: <a href='mailto:%s'>%s</a>

    							
    $img = "<img src='%s' width='350' >";
    $a = "<a href='%s' target='_blank'>%s</a>>";
    $email = "<a href='mailto:%s'>%s</a>";
    
    $m = new cruse_mail();
    $m->set_link( $img, $a, $email );
  • set_staff( subject, to, from )

    이메일 제목, 받는 사람, 보내는 사람의 이메일 추출 등을 설정합니다.

    • subject 인수: 이메일 제목을 설정합니다. 기본 값: PHP-Mail TEST!!
    • to 인수: 받는 사람 이메일을 설정합니다. 기본 값: your@example.com
      여러 명 지정할 경우 콤마(,)로 여러 개 설정합니다.
      ex.) 'habony@example.com,staff@example.com,support@example.com
    • from 인수: 보내는 사람의 이메일을 추출할지 결정합니다. true or false. 기본 값: true

    							
    ex.1)
    $subject = '제품에 대한 문의가 접수되었습니다.';
    $to = 'habony@example.com';
    
    
    $m = new cruse_mail();
    $m->set_staff( $subject, $to );
    
    
    ex.2)
    $subject = '제품에 대한 문의가 접수되었습니다.';
    $to = 'habony@example.com,staff@example.com,support@example.com,user@example.com,sample@example.com';
    
    
    $m = new cruse_mail();
    $m->set_staff( $subject, $to );
  • set_removal( removal )

    전송된 POST 에서 불필요한 필드를 제거할 목록을 설정합니다.

    • removal 인수: 문자열(또는 배열) 목록.

    							
    ex.1)
    $m = new cruse_mail();
    $m->set_removal(
    	'pass'
    };
    
    ex.2)
    $m = new cruse_mail();
    $m->set_removal(
    	array( 'pass', 'email', 'card' )
    };
  • cruse_error()

    필드 검증(또는 필터), 파일 업로드시 발생되는 오류가 있으면 저장될 배열 목록입니다.

    							
    $m = new cruse_mail();
    $m->send_mail();
    $e = $m->cruse_error();
    if(!empty($e))
    {
    	print_r($e);
    }
    else
    {
    	echo "오류 없이 메일이 전송되었습니다.";
    }
  • cruse_input()

    사용자가 입력 폼에 입력한 내용이 있으면 저장될 배열 목록입니다.

    							
    $m = new cruse_mail();
    $m->send_mail();
    $e = $m->cruse_error();
    if(!empty($e))
    {
    	print_r($m->cruse_input());
    }
    else
    {
    	echo "오류 없이 메일이 전송되었습니다.";
    }
  • send_mail()

    이메일을 전송합니다.

    							
    $m = new cruse_mail();
    $m->set_cruse(
    	array(
    		'staff' => array('to' => 'habon@example.com', 'subject'=>'안녕하세요. 하보니입니다.')
    	)
    );
    $m->send_mail();
    
    
    $e = $m->cruse_error();
    if(!empty($e))
    {
    	print_r($e);
    }
    else
    {
    	echo "오류 없이 메일이 전송되었습니다.";
    }

Cruse-Mail 활용 예제

Example #1

참조와 숨은 참조를 선택적으로 사용할 수 있고 콤마(,)로 여러 개 지정할 수 있습니다.

  • CC : 참조
    							
    ex.1)
    <input type="text" name="cc" value="you@example.com" >
    
    ex.2)
    <input type="text" name="cc" value="you@example.com,to@example.com...." >
  • BCC : 숨은 참조
    							
    ex.1)
    <input type="text" name="bcc" value="you@example.com" >
    
    ex.2)
    <input type="text" name="bcc" value="you@example.com,to@example.com...." >

						
<?php
require_once(dirname(__FILE__) . '/input_filter.php');
require_once(dirname(__FILE__) . '/uploader.php');
require_once(dirname(__FILE__) . '/cruse_mail.php');

if($_SERVER['REQUEST_METHOD'] === "POST")
{
	$u = array(
		'이름' => array(
			true,
			'strlen' => array('min' => 4, 'max' => 15),
			'strip_tags'
		),
		'이메일' => array(
			true,
			'email'
		),
		'내용' => array(
			true
		)
	);

	$m = new cruse_mail($u);
	$m->set_cruse(
		array(
			'staff' => array('to' => 'habony@example.com', 'subject'=>'안녕하세요. 하보니입니다.')
		)
	);

	$e = $m->cruse_error();
	if(empty($e))
	{
		$m->send_mail();
	}
	else
	{
		// 입력 폼 목록
		print_r($m->cruse_input());
		// 에러 목록
		print_r($e);
	}
}
?>

<form enctype="multipart/form-data" action="" method="POST">
	이름: <input type="text" name="이름" value="" /><br />
	이메일: <input type="text" name="이메일" value="" /><br />
	참조: <input type="text" name="cc" value="you@example.com,to@example.com" /><br />
	숨은 참조: <input type="text" name="bcc" value="you@example.com,to@example.com" /><br />
	내용: <input type="text" name="내용" value="" /><br />
	<input type="submit" value="전송" />
</form>

Example #2

폼메일에 Captcha 연동하기

						
<?php
require_once(dirname(__FILE__) . '/captcha.php');
require_once(dirname(__FILE__) . '/input_filter.php');
require_once(dirname(__FILE__) . '/uploader.php');
require_once(dirname(__FILE__) . '/cruse_mail.php');

if($_SERVER['REQUEST_METHOD'] === "POST")
{
	$u = array(
		'이름' => array(
			true,
			'strlen' => array('min' => 4, 'max' => 15),
			'strip_tags'
		),
		'이메일' => array(
			true,
			'email'
		),
		'내용' => array(
			true
		)
	);

	$m = new cruse_mail($u);
	$m->set_cruse(
		array(
			'staff' => array('to' => 'habony@example.com', 'subject'=>'안녕하세요. 하보니입니다.'),
			// Captcha 폼 요소는 제거합니다.
			'removal' => array( PHP_CAPTCHA_SESSION_INPUT_NAME )
		)
	);

	$e = $m->cruse_error();

	if(PHP_CAPTCHA_INPUT_Confirmation() === false)
	{
		$e[] = "입력한 인증 코드가 정확하지 않습니다.";
	}

	if(empty($e))
	{
		$m->send_mail();
	}
	else
	{
		// 입력 폼 목록
		print_r($m->cruse_input());
		// 에러 목록
		print_r($e);
	}
}
?>

<form enctype="multipart/form-data" action="" method="POST">
	이름: <input type="text" name="이름" value="" /><br />
	이메일: <input type="text" name="이메일" value="" /><br />
	내용: <input type="text" name="내용" value="" /><br />

	<h3>Security Code</h3>
	<img src="getimage.php" /><br />
	<input type="text" name="<?php echo PHP_CAPTCHA_SESSION_INPUT_NAME; ?>" size="10" />
	<?php echo $field['captcha']; ?><br />

	<input type="submit" value="전송" />
</form>

Example #3

체크 박스를 활용해 폼메일 구성하기

						
<?php
require_once(dirname(__FILE__) . '/input_filter.php');
require_once(dirname(__FILE__) . '/uploader.php');
require_once(dirname(__FILE__) . '/cruse_mail.php');

if($_SERVER['REQUEST_METHOD'] === "POST")
{
	$u = array(
		'이름' => array(
			true,
			'strlen' => array('min' => 4, 'max' => 15),
			'strip_tags'
		),
		'이메일' => array(
			true,
			'combin' => '@',
			'email'
		),
		'내용' => array(
			true
		),
		'취미' => array(
			true,
			'min' => 2
		)
	);

	$m = new cruse_mail($u);
	$m->set_cruse(
		array(
			'staff' => array('to' => 'habony@example.com', 'subject'=>'안녕하세요. 하보니입니다.')
		)
	);

	$e = $m->cruse_error();
	if(empty($e))
	{
		$m->send_mail();
	}
	else
	{
		// 입력 폼 목록
		print_r($m->cruse_input());
		// 에러 목록
		print_r($e);
	}
}
?>

<form enctype="multipart/form-data" action="" method="POST">
	이름: <input type="text" name="이름" value="" /><br />
	이메일: <input type="text" name="이메일[]" value="" />@<input type="text" name="이메일[]" value="gmail.com" /><br />
	내용: <input type="text" name="내용" value="" /><br /><br />

	취미: <input type="checkbox" name="취미[]" value="스포츠"> 스포츠
	<input type="checkbox" name="취미[]" value="영화보기"> 영화보기
	<input type="checkbox" name="취미[]" value="독서"> 독서
	<input type="checkbox" name="취미[]" value="여행하기"> 여행하기

	<input type="submit" value="전송" />
</form>

Example #4

폼메일 전송 실패시 입력한 폼요소 값 유지 하기

						
<?php
require_once(dirname(__FILE__) . '/input_filter.php');
require_once(dirname(__FILE__) . '/uploader.php');
require_once(dirname(__FILE__) . '/cruse_mail.php');

if($_SERVER['REQUEST_METHOD'] === "POST")
{
	$u = array(
		'이름' => array(
			true,
			'strlen' => array('min' => 4, 'max' => 15),
			'strip_tags'
		),
		'이메일' => array(
			true,
			'email'
		),
		'내용' => array(
			true
		)
	);

	$m = new cruse_mail($u);
	$m->set_cruse(
		array(
			'staff' => array('to' => 'habony@example.com', 'subject'=>'안녕하세요. 하보니입니다.')
		)
	);

	$e = $m->cruse_error();
	if(empty($e))
	{
		$m->send_mail();
	}
	else
	{
		// 입력 폼 목록
		$input = $m->cruse_input();

		// 에러 목록
		print_r($e);
	}
}
?>

<form enctype="multipart/form-data" action="" method="POST">
	이름: <input type="text" name="이름" value="<?php echo $input['이름']; ?>" /><br />
	이메일: <input type="text" name="이메일" value="<?php echo $input['이메일']; ?>" /><br />
	내용: <input type="text" name="내용" value="<?php echo $input['내용']; ?>" /><br /><br />

	<input type="submit" value="전송" />
</form>

폼메일에 첨부 파일 기능 추가

Example #1

파일을 이메일에 첨부하여 메일을 보낼 수 있습니다.
필드의 이름에는 정해져 있지 않습니다.

						
<?php
require_once(dirname(__FILE__) . '/input_filter.php');
require_once(dirname(__FILE__) . '/uploader.php');
require_once(dirname(__FILE__) . '/cruse_mail.php');

if($_SERVER['REQUEST_METHOD'] === "POST")
{
	$u = array(
		'이름' => array(
			true,
			'strlen' => array('min' => 4, 'max' => 15),
			'strip_tags'
		),
		'이메일' => array(
			true,
			'email'
		),
		'내용' => array(
			true
		)
	);

	$m = new cruse_mail($u);
	$m->set_cruse(
		array(
			'staff' => array('to' => 'habony@example.com', 'subject'=>'안녕하세요. 하보니입니다.')
		)
	);

	// 폼메일에 파일을 첨부하기 위해 정의합니다.
	$m->upload_transfer();
	$e = $m->cruse_error();

	if(empty($e))
	{
		$m->send_mail();
	}
	else
	{
		// 입력 폼 목록
		print_r($m->cruse_input());
		// 에러 목록
		print_r($e);
	}
}
?>

<form enctype="multipart/form-data" action="" method="POST">
	이름: <input type="text" name="이름" value="" /><br />
	이메일: <input type="text" name="이메일" value="" /><br />
	내용: <input type="text" name="내용" value="" /><br />
	비고 <input type="text" name="비고" value="" /><br />
	이미지 <input name="imagefile" type="file" /><br /> 
	<input name="userfile[]" type="file" /><br /> 
	<input name="userfile[]" type="file" /><br /> 
	<input type="submit" value="파일 전송" />
</form>

Example #2

3개의 업로드 파일 중 하나만 이미지 파일만 허용하도록 설정하여 이메일을 보낼 수 있습니다.
필드의 이름에는 정해져 있지 않습니다.

  • 이미지 파일만 허용할 경우
    							
    $m->set_upload(
    	array(
    		'ctype' => 'gif bmp jpg png'
    	)
    );
  • 3개의 필드 중 1개는 이미지만 허용하고, 1개는 동영상 파일만 허용합니다.
    마지막으로 하나는 제한없이 설정한 예입니다.
    							
    $m->set_upload(
    	array(
    		'ctype' => array(
    			'imagefile' => 'gif bmp jpg png',
    			'mediafile' => 'avi mpg mov'
    		)
    	)
    );

						
<?php
require_once(dirname(__FILE__) . '/input_filter.php');
require_once(dirname(__FILE__) . '/uploader.php');
require_once(dirname(__FILE__) . '/cruse_mail.php');

if($_SERVER['REQUEST_METHOD'] === "POST")
{
	$u = array(
		'이름' => array(
			true,
			'strlen' => array('min' => 4, 'max' => 15),
			'strip_tags'
		),
		'이메일' => array(
			true,
			'email'
		),
		'내용' => array(
			true
		)
	);

	$m = new cruse_mail($u);
	$m->set_cruse(
		array(
			'staff' => array('to' => 'habony@example.com', 'subject'=>'안녕하세요. 하보니입니다.')
		)
	);

	// 폼메일에 이미지 파일만 허용하기 위해 설정합니다.
	$m->set_upload(
		array(
			'ctype' => array(
				'imagefile' => 'gif bmp jpg png'
			)
		)
	);

	// 폼메일에 파일을 첨부하기 위해 정의합니다.
	$m->upload_transfer();
	$e = $m->cruse_error();

	if(empty($e))
	{
		$m->send_mail();
	}
	else
	{
		// 입력 폼 목록
		print_r($m->cruse_input());
		// 에러 목록
		print_r($e);
	}
}
?>

<form enctype="multipart/form-data" action="" method="POST">
	이름: <input type="text" name="이름" value="" /><br />
	이메일: <input type="text" name="이메일" value="" /><br />
	내용: <input type="text" name="내용" value="" /><br />
	비고 <input type="text" name="비고" value="" /><br />
	이미지 <input name="imagefile" type="file" /><br /> 
	일반 파일 #1 <input name="userfile[]" type="file" /><br /> 
	일반 파일 #2 <input name="userfile[]" type="file" /><br /> 
	<input type="submit" value="파일 전송" />
</form>

Example #3

업로드 파일 매소드를 이용해 인증 설정 기능을 사용할 수 있습니다.
사용자 아이디와 비밀번호가 일치하면 파일(또는 메일)을 전송합니다.

						
<?php
require_once(dirname(__FILE__) . '/input_filter.php');
require_once(dirname(__FILE__) . '/uploader.php');
require_once(dirname(__FILE__) . '/cruse_mail.php');

if($_SERVER['REQUEST_METHOD'] === "POST")
{
	$u = array(
		'이름' => array(
			true,
			'strlen' => array('min' => 4, 'max' => 15),
			'strip_tags'
		),
		'이메일' => array(
			true,
			'email'
		),
		'내용' => array(
			true
		)
	);

	$m = new cruse_mail($u);
	$m->set_cruse(
		array(
			'staff' => array('to' => 'habony@example.com', 'subject'=>'안녕하세요. 하보니입니다.'),
			// 사용자 아이디, 비밀번호 폼 요소는 제거합니다.
			'removal' => array('user', 'pass')
		)
	);

	// 파일을 첨부하기 전에 인증을 설정합니다.
	$row = mysql_query('select user,pass table where u_id=101');
	$m->set_upload_auth($row['user'], $row['pass']);

	// 인증을 검증합니다.
	$upload_user_auth = array(
		'user' => $_POST['user'],
		'pass' => $_POST['pass']
	);
	$m->upload_transfer(null, $upload_user_auth);
	$e = $m->cruse_error();

	if(empty($e))
	{
		$m->send_mail();
	}
	else
	{
		// 입력 폼 목록
		print_r($m->cruse_input());
		// 에러 목록
		print_r($e);
	}
}
?>

<form enctype="multipart/form-data" action="" method="POST">
	아이디: <input type="text" name="user" value="" /><br />
	비밀번호: <input type="text" name="pass" value="" /><br /><br /><br />
	이름: <input type="text" name="이름" value="" /><br />
	이메일: <input type="text" name="이메일" value="" /><br />
	내용: <input type="text" name="내용" value="" /><br />
	비고 <input type="text" name="비고" value="" /><br />
	이미지 <input name="imagefile" type="file" /><br /> 
	일반 파일 #1 <input name="userfile[]" type="file" /><br /> 
	일반 파일 #2 <input name="userfile[]" type="file" /><br /> 
	<input type="submit" value="파일 전송" />
</form>