multiSendMail- PHP 를 이용한 심플한 메일 발송 라이브러리
multiSendMail- PHP 를 이용한 심플한 메일 발송 라이브러리
REDINFO
약 1년전 2022-08-21 03:18:29

 

multiSendMail  

 

본 라이브러리는 PHP로 제작되었으며 SMTP 방식을 기준으로 메일 발송을 도와주는 프로그램으로 설정에 따라 MAIL() 함수도 함께 지원됩니다. 

 

초기에  smtpSendMail 라이브러리로 시작하였으나 해당 라이브러리가 오래되다 보니 버전을 업데이트 하여도  간혈적인 문제와 기존 소스를 유지하는 조건하에 개발하다보니 많은 어려움이 있어 기능을 추가하여 새로운  메일 발송 프로그램으로 개발하였습니다. 

 

다만 다른 곳에서 제공되는 PHP 메일발송 프로그램처럼 수 많은 환경을 전부 체크할 수 없어 최소한의 환경을 기준으로 커스텀하여 사용하기위한 목적으로 만들어진 프로그램이다 보니 부족한 부분이 많습니다. 

 

만약 전문적인 PHP 라이브러리를 원하신다면 하단의 게시된 PHPMailer 라이브러리를 사용해 주시기 바랍니다. 

 

라이브러리 다운로드
multiSendMail.zip

 

multiSendMail 특징 

  • multiSendmail은 지원되는 기능이 적은 대신 심플하게 프로그램되어 커스텀 하기 용이 합니다.
  • SMTP 인증 방식으로 메일 발송시 PHP 기본 메일 함수로 발송했을때보다 수신률이 높지만 속도로 본다면 생각보다 빠르지는 않습니다. 
  • 이러한 SMTP 인증 방식의 속도를 보안하고자 비동기 소켓통신 기능을 추가하여, 발송 수신 여부와 상관없이 발송처리를 할 수 있습니다. 
  • PHP 기본 메일함수도 지원되어 SMTP와 동일한 방식으로 사용이 가능합니다.
  • 다른 라이브러리에 비해 쉽게 접근하고 쉽게 사용할 수 있는 큰 장점이 있습니다. 
  • 개발언어는 PHP 7이상에서 개발되어 안정적으로 사용이 가능합니다. 
  • 받는이 , 참조, 숨은참조는 멀티 지원이 가능하여 쉽게 설정하여 보낼 수 있습니다. 
  • 파일첨부 또한 멀티가 지원됩니다. 

 

 

저작권

해당 프로그램의 라이선스는 REDINFO 그룹 에 있으나  파일의 소스코드 상단에 제작자 정보가 포함된 주석을 삭제 하지 않는 조건으로 수정 및 재배포가 가능합니다. 

 

개발자가 만든 소스코드의 경우 실제로 제작자 표기가 없을 경우 수고를 들여 만든 개발자의 자료가 무의미해지기 마련입니다. 이처럼 개발 소스는 퍼가고 사용하면 그만이겠지만 많은 시간을 투자하여 만든 개발자를 배려한다면 제작자 정보가 포함된 주석은 남겨두었으면 하는 바램입니다. 

 

 

 

사용예제

본 라이브러리를 다운로드하고 실행하는 방법은 아래와 같습니다. 

 

SMTP 를 이용한 예제 (DAUM 설정시)

<?php
	use multiSendMail\multiSendMail;
	require "/경로/multiSendMail.php";

	/* multiSendMail 라이브러리 초기화 */
	$msm = new multiSendMail();

	/* 기본설정 */
	$msm->setConfig('module','smtp');   // 모듈을 지정합니다. smtp 또는 phpmail
	$msm->setConfig('smtp.host','smtp.daum.net');   // 호스트를 지정합니다.
	$msm->setConfig('smtp.username','계정아이디');  // 계정 아이디를 지정합니다.
	$msm->setConfig('smtp.password','계정비밀번호'); // 계정 비밀번호를 지정합니다. (2단계 계정보호가 있을 경우 별도 설정 필요)
	$msm->setConfig('smtp.port',465); // 다음의 기본 SMTP 포트는 465

	/* 옵션 */
	$msm->setOption('from','보낸사람@이메일','보내는이이름');  // 보내는이 이메일과 이름을 설정합니다.
	$msm->setOption('to','받는사람@이메일','받는이이름'); // 받는이 이메일과 이름을 설정합니다.
	$msm->setOption('cc','참조@이메일','참조이름'); // 참조 이메일과 이름을 설정합니다.
	$msm->setOption('bcc','숨은참조@이메일','숨은참조이름'); // 숨은참조 이메일과 이름을 설정합니다.
	$msm->setOption('subject','제목'); // 제목을 설정합니다.
	$msm->setOption('body','내용'); // 내용을 설정합니다.

	/* 첨부파일 */
	$msm->setAttach('/enfile.zip','enfile.zip'); // 첨부파일을 설정합니다. (경로, 파일명, 파일컨텐츠타입[생략가능])

	/* 메일발송 */
	$result = $msm->sendmail();

	/* 결과출력 */
	if( $result !== true){
		echo '전송 실패!';
	}
	else{
		echo '전송 성공!';
	}

 

PHP 기본 메일을 이용하여 보낼 시 

<?php 
	use multiSendMail\multiSendMail;
	require "/경로/multiSendMail.php";

	/* multiSendMail 라이브러리 초기화 */
	$msm = new multiSendMail();

	/* 기본설정 */
	$msm->setConfig('module','phpmail');  // 모듈을 지정합니다. smtp 또는 phpmail

	/* 옵션 */
	$msm->setOption('from','보낸사람@이메일','보내는이이름');  // 보내는이 이메일과 이름을 설정합니다.
	$msm->setOption('to','받는사람@이메일','받는이이름'); // 받는이 이메일과 이름을 설정합니다.
	$msm->setOption('cc','참조@이메일','참조이름'); // 참조 이메일과 이름을 설정합니다.
	$msm->setOption('bcc','숨은참조@이메일','숨은참조이름'); // 숨은참조 이메일과 이름을 설정합니다.
	$msm->setOption('subject','제목'); // 제목을 설정합니다.
	$msm->setOption('body','내용'); // 내용을 설정합니다.

	/* 첨부파일 */
	$msm->setAttach('/enfile.zip','enfile.zip'); // 첨부파일을 설정합니다. (경로, 파일명, 파일컨텐츠타입[생략가능]) 

	/* 메일발송 */
	$result = $msm->sendmail();

	/* 결과출력 */
	if( $result !== true){
		echo '전송 실패!';
	}
	else{
		echo '전송 성공!';
	}

 

메일발송에 실패할 경우 자세한 내용을 출력해서 보고 싶다면 아래의 옵션을 사용해 보세요  

$msm->setConfig('debug',1); // 1로 설정시 중간에 오류가 발생할 경우 디버깅내용을 확인 가능합니다.
$msm->setConfig('msg',1);  // 1로 설정 시 전송과정 내용을 시간대별로 볼 수 있습니다.

 

혹시 한번에 여러명에게 발송이 필요하시나요? 그렇다면 아래와 같이 설정을 계속 추가만 해주면 됩니다. (참조, 숨은참조 발송도 동일합니다.)

$msm->setOption('to','받는사람@이메일','받는이이름'); // 받는이 이메일과 이름을 설정합니다.
$msm->setOption('to','받는사람2@이메일','받는이이름2'); // 받는이 이메일과 이름을 설정합니다.
$msm->setOption('to','받는사람3@이메일','받는이이름3'); // 받는이 이메일과 이름을 설정합니다.

 

첨부파일도 멀티방식이 지원되어 아래와 같이 설정을 계속 추가만 해주면 됩니다. 

$msm->setAttach('/enfile.zip','enfile.zip'); // 첨부파일을 설정합니다. (경로, 파일명, 파일컨텐츠타입[생략가능]) 
$msm->setAttach('/enfile.zip2','enfile.zip2'); // 첨부파일을 설정합니다. (경로, 파일명, 파일컨텐츠타입[생략가능]) 
$msm->setAttach('/enfile.zip3','enfile.zip3'); // 첨부파일을 설정합니다. (경로, 파일명, 파일컨텐츠타입[생략가능]) 

 

첨부파일을 전송하려 할때 한글파일명을 찾을 수 없다고 뜨시나요? 그렇다면 아래와 같이 설정해 보세요 

// 한글파일보정 : 서버 언어엣이 UTF-8이고 파일이 한글이라면
$msm->setAttach(@iconv("UTF-8","EUC-KR",'/파일경로/한글파일.txt'),'한글파일.txt');

 

SMTP 전송시 속도가 많이 저하되어 불편해 질 수 있습니다. 이를 위해 보안된 기능이 비동기 소켓통신 옵션이며 아래와 같이 사용이 가능합니다. (서버에 따라 작동이 안될 수 있으니 주의!)

$msm->setConfig('async.use',1); // 1로 설정시 비동기 소켓통신으로 전송 (기본 0: 미사용)
$msm->setConfig('async.url','목적지URL'); // 비동기 소켓통신으로 전송할 URL 설정 (목적지 URL에서는 프로그램 처리 필요)
$msm->setConfig('async.key','multiSendMail'); // (필수) 보안을 위한 키값 (기본: multiSendMail)
$msm->setConfig('async.encrypt','md5'); // (필수) 보안을 위한 키값 암호화시 사용될 암호화 방식 (기본: md5) 

 

비동기 소켓통신 설정이 완료되면 목적지URL 페이지에 대한 부분을 아래의 예제처럼 작성해주세요.

<?php
	use multiSendMail\multiSendMail;
	require "/경로/multiSendMail.php";

	ob_start();

	/* multiSendMail 라이브러리 초기화 */
	$msm = new multiSendMail();

	/* 비동기 소켓통신 목적지에서는 별도의 설정이 필요없음 */
	$rst = $msm->sendmail();

	/* 내용을 변수에 저장 */
	$debug = ob_get_clean();
	$debug = strip_tags(htmlspecialchars_decode($debug));

	/* 하단은 로그 파일저장이 필요할 경우 사용 */
	$logdir = '디렉토리경로'; // 로그가 저장될 디렉토리 경로
	if( is_dir($logdir) == false){ return false; }
	$logfile = $logdir .'/'.date('Ymd')."-multimail-async-log.txt";
	$logmsg = "======================================================\n"; 
	$logmsg .= date('Y-m-d H:i:s')."\n";
	$logmsg .= $debug;
	$logmsg .= "\n";
	error_log(addslashes($logmsg), 3, $logfile); // 파일로그

 

 

 

설정 & 옵션 상세 

설정 및 옵션 상세는 아래와 같습니다. 

 

기본설정 (config)

module

메일 발송 시 사용할 모듈을 설정 합니다.  설정 가능한 값은 아래의 3개를 참고해주세요.

  • smtp : 기본설정값이며 SMTP 방식으로 메일을 전송합니다.
  • phpmail : PHP 기본 메일 함수를 통해 전송됩니다. 
  • auto : SMTP 발송 시도 후 전송이 안될 시 PHP 기본 메일 함수를 통해 발송됩니다. (실험적 기능)
smtp.*

smtp 모듈 설정 시 필수로 설정이 필요한 항목입니다. 

  • smtp.host : SMTP 호스트를 설정합니다.  
  • smtp.port : SMTP 포트를 설정합니다. (기본 25번 포트)
  • smtp.username : SMTP 계정 아이디를 설정합니다. 
  • smtp.password : SMTP 계정 비밀번호를 설정합니다. (2단계 인증이 있을 경우 API용 비밀번호를 발급받으셔야합니다.)
  • smtp.socket_timout : 소켓 통신 시 타임아웃 값을 설정합니다. (기본 10초)
debug

디버깅 뷰에 대한 설정이 1 또는 0으로 설정 가능합니다. 

1로 설정 시 실행 페이지에서 실시간 에러 메시지를 볼 수 있습니다. 

msg

메일 발송 진행과정 메세지 뷰 입니다. 

1로 설정시 실행 페이지에서 실시간으로 메시지 뷰를 볼 수 있습니다.

chartset

사용할 언어셋 설정 (기본 UTF-8)

ctype

내용 컨텐츠 타입을 설정 

async.*

비동기 소켓 통신시 필요한 옵션을 설정 할 수 있는 항목입니다.

  • async.use : 비동기 소켓 통신 사용여부 입니다.  1로 설정 시 작동됩니다. 
  • async.url : 비동기 소켓 통신 목적지 URL 입니다. 
  • async.key : 비동기 소켓 통신에 사용될 보안 키값입니다. (필수) 
  • async.encrypt : 비동기 소켓 통신에서 보안 키값과 함께 적용 되는 암호화 방식입니다. (기본 MD5)

 

옵션 (option)

to

메일 발송 시 받는이에 대한 정보를 설정 가능합니다.  (멀티지원 가능)

예제) $msm->setOption('to','받는사람@이메일','받는이이름');

from

메일 발송 시 보내는이에 대한 정보를 설정 가능합니다.

예제) $msm->setOption('from','보낸사람@이메일','보내는이이름');

cc

메일 발송 시 참조에 대한 정보를 설정 가능합니다. (멀티지원 가능)

예제) $msm->setOption('cc','참조@이메일','참조이름');

bcc

메일 발송 시 보내는이에 대한 정보를 설정 가능합니다. (멀티지원 가능)

예제) $msm->setOption('bcc','숨은참조@이메일','숨은참조이름');

subject

메일 발송 시 보내는이에 대한 정보를 설정 가능합니다.

예제) $msm->setOption('subject','제목');

body

메일 발송 시 보내는이에 대한 정보를 설정 가능합니다.

예제) $msm->setOption('body','내용');

 

 

 

사용가능한 메서드 

아래와 같이 사용 가능한 메서드가 있습니다. 

 

setConfig

기본설정

예제) $msm->setConfig('설정키값','설정값');

setOption

옵션설정

예제) $msm->setOption('옵션키값','옵션1','옵션2');

setAttach

파일첨부  (멀티지원)  , return 값으로 해당 파일의 index 키값을 return 합니다. (추후 초기화 시 해당 키값 사용 가능)

예제) $msm->setAttach('/파일경로/파일명','파일명');

viewSet

기본설정/옵션/첨부파일 값을 모두 출력 합니다.

예제) $msm->viewSet();

clearSet

기본설정/옵션/첨부파일 값을 모두 초기화할 때 사용합니다.

예제) $msm->clearSet();

viewOption

설정된 옵션에 대해 출력합니다.

예제) $msm->viewOption(true); // 설정된 모든 옵션값을 볼 경우 true 

예제) $msm->viewOption('to');  // 특정 키 값만 볼 경우 

clearOption

설정된 옵션값을 초기화 합니다.

예제) $msm->clearOption(true); // 설정된 모든 옵션값을 초기화 할 경우 true

예제) $msm->clearOption('to');  // 특정 키 값만 초기화 시

viewConfig

기본설정값에 대해 출력합니다.

예제) $msm->viewConfig(true); // 모든 기본설정값을 볼 경우 true 

예제) $msm->viewConfig('smtp.username'); // 특정 키 값만 볼 경우

clearConfig

기본설정값을 초기화 합니다. (전체 초기화는 위험할 수 있습니다.)

예제) $msm->clearConfig(true); // 전체설정 초기화

예제) $msm->clearConfig('module'); // 특정 키 값만 초기화 시

viewAttach

설정된 첨부파일에 대해 출력합니다.

예제) $msm->viewAttach(true); // 모든 첨부파일 설정 값을 볼 경우 true 

예제) $msm->viewAttach('1'); // 특정 키 값만 볼 경우  (setAttach 메서드 실행 후 받은 키값)

clearAttach

설정된 첨부파일 정보를 초기화 합니다.

예제) $msm->clearAttach(true); // 설정된 모든 첨부파일 값을 초기화 할 경우 true (파일 삭제는 아님)

예제) $msm->clearAttach('2'); // 특정 키값에 대한 첨부파일만 삭제시 (setAttach 메서드 실행 후 받은 키값)

msg

메시지 뷰를 개별적으로 사용 가능합니다. 

예제) $msm->msg('메시지',__LINE__);  // 메시지 , 라인줄

debug

더비그뷰를 개별적으로 사용 가능합니다.

예제) $msm->debug('메시지',__LINE__,true);  // 메시지 , 라인줄, return 값

 

 

 

버전 & 이력

본 multiSendMail 라이브러리 버전은 1.0 입니다. 자세한 이력은 아래를 참고해 주세요 

 

  • 2022-08-10 라이브러리 개발 시작 
  • 2022-08-13 배타버전 개발 완료 및 디버깅 테스트
  • 2022-08-21 라이브러리 최초 버전(1.0) 배포 시작

 

 

 

서포트 & 기타

본 라이브러리를 통한 메일발송이 잘 안되시거나 오류 및 버그가 있을 경우 lcy@redinfo.co.kr 로 문의 주시면 최대한 빠른 시일 내 답변 드릴 수 있도록 하겠습니다.  

 

마지막으로 현존하는 PHP 메일 발송 프로그램중 가장  완벽하게 구현된 메일발송 프로그램은 PHPMailer 라이브러리로 아래 깃 을 참고해 주시기 바랍니다. 

 

 
GitHub - PHPMailer/PHPMailer: The classic email sending library for PHP
The classic email sending library for PHP. Contribute to PHPMailer/PHPMailer development by creating an account on GitHub.
github.com/PHPMailer/PHPMailer

 

 

이 포스트글이 도움이 되었나요?
18
카테고리 연관글

Comment

댓글작성

0(500) | 1(30)