웹솔루션개발 22년 노하우! 해피CGI의 모든것

[해피CGI][cgimall] blat - 윈도우용 메일러 본문

웹프로그램밍 자료실/C언어 자료

[해피CGI][cgimall] blat - 윈도우용 메일러

해피CGI윤실장 2016. 12. 7. 09:11

배포처 : http://www.webweaver.pe.kr
배포자 : KimJuWon (i@webweaver.pe.kr)
배포일 : 2001/02/20
버전정보 : blat 1.8.6 (compiled in EUC-KR)

Note. 설치와 사용에 관한 질문은 절대 받지 않습니다.
편의상 경어를 생략합니다.
##########################################################################

목차

■ blat 이란?
■ 특징/기능
■ 요구사항
■ 설치법
■ 사용법
■ CGI(Perl) 프로그램에서 사용법
■ 문제해결



■ blat 이란? :

blat 은 윈도우계열(윈도우NT, 2000, 윈98, 윈미) 코맨드라인에서 동작하는
메일러이다. blat을 사용하기 위해서는 반드시 tcp/ip와 smtp를 사용할 수 있는
환경이어야 한다.

배포자는 단지 이 ``설명서 제작``과 소스파일의 ``charset를 EUC-KR를 수정``하여,
컴파일 한것외에는 한것이 없으므로, 이 프로그램의 사용으로 인하여 발생하는
손실이나 문제에 대하여 전혀 책임지지 않는다.



■ 특징/기능 :

- 메일내용을 한글로 발송시 글씨가 깨져서 나오던 문제 해결
- cc, bcc, 파일첨부 등 모든 기능을 지원
- html형식의 메일보내기 완벽 지원



■ 요구사항 :

- tcp/ip, 즉 인터넷을 사용할 수 있는 환경이어야 한다.
- smtp(Simple Mail Transfer Protocol)을 사용할 수 있는 환경이어야 한다.

자신의 컴퓨터가 고정 ip를 사용하고 있고, 윈도우 NT 계열을 사용하고 있다면,
인터넷서비스관리자(MMC)와 도메인관리자에서 smtp를 설정할 수 있다.

윈도우 NT/2000을 사용하고 있으나, 유동 ip를 사용하거나, smtp서버가
설치되어 있지 않은 경우, 또는 윈98/ME를 사용하는 경우에는
자신의 isp의 smtp서버를 사용한다. 예를 들면, 자신이 코넷망을 사용하고 있다면
smtp 서버는 mail.kornet.net이 될것이다.

- 윈도우 계열의 운영체제에서만 동작한다.



■ 설치법 :

- c:lat 이란 디렉토리를 만들고, 압축을 푼다.
- 방금 만든 디렉토리에 blat.exe란 파일이 있어야 한다.
- gensok.dll파일을 윈도우의 system 또는 system32(NT/2000)에 복사한다.
만일, 최신의 gensok.dll파일이 이미 설치되어 있다면, 취소하라.
아마, 거의 대부분이 이부분은 생략해도 될 것이다.

- 도스창을 연다. blat 이 설치되 디렉토리로 이동.
- blat -install mail.abc.com xxx@abc.com
예를 들어 코넷을 사용한다면, blat -install mail.kornet.net xxx@kornet.net
이 될것이다.
만약 자신의 smtp서버를 가지고 있다면, 주소가 smtp.korea.co.kr이고, 메일계정이
webmaster@korea.co.kr이라고 한다면,
blat -install smtp.korea.co.kr webmaster@korea.co.kr이라고 하면 될것이다.

- 윈98/ME의 경우는 autoexec.bat 파일을 열고,
path=c:lat; 의 경로를 수정해 준다.

- 윈도우 NT/2000의 경우 내컴퓨터의 환경변수 path부분, 수정을 클릭하고
blat의 설치경로를 추가해 준다. 재부팅



■ 사용법 :

syntax:
Blat -t [option]

: 보낼 내용이 저장된 파일, 직접 콘솔입력 경우 -, 끝낼때는 ^Z
-t : 받는사람의 메일, 여러명에게 보낼 경우 comma 사용, quote 해주는 것이 좋음
-s : 중간에 공백문자가 있을 경우 반드시 quote (")해 줘야 한다.
-f : 보내는 사람의 메일
-cc : 참조, 여러명에게 보낼 경우 comma 사용, quote 해주는 것이 좋음
-bcc : 숨은 참조, 여러명에게 보낼 경우 comma 사용, quote 해주는 것이 좋음
-r : 읽음 확인
-h : 도움말
-server : smtp 기본서버를 바꿔서 보낼 경우
-port : smtp 포트, 기본은 25
-mime : MIME Quoted-Printable Content-Transfer-Encoding.
-enriched : Content-Type=text/enriched 의 메시지를 보낼 경우
-html : Content-Type=text/html, html형식의 메시지를 보낼 경우
-base64 : base64 (binary Mime) 타입의 파일을 보낼 경우
-attach : 바이너리 파일 첨부, 여러개일 경우 여러번 반복해서 쓴다.
-attacht : 텍스트 파일 첨부, 여러개일 경우 여러번 반복해서 쓴다.

도스창을 열고 아래와 같이 테스트 해보라.

blat myfile.txt -s "A file for pedro" -t foo@bar.com
//myfile.txt의 내용을 A file for pedro란 제목으로 foo@bar.com에게 보낸다.
//이때, 보낸 사람은 -install할때 쓴 메일 주소가 된다.

blat myfile.txt -s "A file for pedro" -t foo@bar.com -q
//-q 옵션은 화면에 결과를 출력하지 않을때 사용, 별 쓸모 없음.

blat myfile.txt -s "A file for mark" -t fee@fi.com -f foo@bar.com
//기본 보내는 사람을 무시하고, 보낸사람이 foo@bar.com이 된다.

Blat myfile.txt -s "animals" -t fee@fi.com -cc "moo@grass.edu,horse@meadow.hill"
//moo@grass.edu,horse@meadow.hill에게도 참조메일을 보낸다.

blat.exe BLAT.ZIP -s "file to gil" -t foo@bar.com -base64
//MIME Base 64 format으로 blat.zip파일을 보낸다.

blat myfile.txt -s "oumpla" -t foo@bar.com -attach c:myfolder*.txt
//myfile.txt의 내용을 oumpla라는 제목으로 foo@bar.com에게 c:myfolder*.txt
//파일을 첨부해서 보낸다.
//c:myfolder*.*으로 쓰면 모든 파일을 보낸다.

blat myfile.txt -t fee@fi.com -server smtp.domain.com -port 6000



■ CGI(Perl) 프로그램에서 사용법 :

위의 사용법을 잘 보았다면, cgi프로그램에서 사용하는 데 별무리가 없을거라 생각한다.

## 메일 보낼 내용을 $comments란 변수에 저장한다.
$comments = "









$FORM{``subject``}

";

## $comments변수에, html form인, content에서 받은 내용을 더한다.
## . 연산자에 유의하라. 문자열을 합치는 연산자 이다.
$comments .= "$FORM{``content``}";

## $comments변수에 아래 내용을 더한다.
$comments .= "

";

## blat의 경로를 지정한다. 만약 이미 시스템에서 경로가 지정되어 있을 경우에는
## blat이라고만 써도 된다. 그리고 c:다음에 역슬래쉬 두개를 씀에 유의하라.
## 앞에것은 단지 escape 문자의 역할을 한다.
$SENDMAIL = "c:latlat";
## 받는 사람에 tomail이란 폼에서 받은내용을 저장한다.
$t = "-t $FORM{``tomail``}";
## 제목에 subject란 폼에서 받은내용을 저장한다.
$s = "-s "$FORM{``subject``}"";
## 보내는 사람에 frommail이란 폼에서 받은내용을 저장한다.
$f = "-f $FORM{``frommail``}";
## 메일 발송결과를 저장할 파일, 문제발생시 디버그 정보로 유용하다.
$LOG = "process.log";

## 임시로 $comments 변수의 내용을 저장할 파일, 이것이 실제 메일 내용이 된다.
$file = "temp.txt";

open(OUTPUT, ">$file");
print OUTPUT "$comments
";
close(OUTPUT);

$commandline = "$SENDMAIL $file $s $t $f -html > $LOG";

## 역 따옴표에 유의하라. 코맨드라인에서 실행하라는 의미다.
## 대신 system()함수를 사용해도 된다. 방법은 system($commandline);
`$commandline`;

## 문제발생의 아래의 두라인은 주석처리하고, 문제를 해결하라.
unlink($file);
unlink($LOG);



*** Win32::Process 펄 모듈을 사용할 경우 : ***

## 윈도우 NT계열에서는 Process를 사용하는 것이 훨씬 안정적이다.
## 메일링 리스트등에 blat을 사용할 경우는 반드시 이렇게 하라.


## 루틴시작
...
...

$commandline = "$SENDMAIL $file $s $t $f -html > $LOG";

use Win32::Process;
use Win32;

Win32::Process::Create($ProcessObj, $SENDMAIL, "$commandline", 0, DETACHED_PROCESS, ".") || die ErrorReport();

$ProcessObj->Wait(INFINITE);
unlink($file);
unlink($LOG);
## 루틴끝


## Win32::Process 의 에러보고를 위한 루틴
sub ErrorReport {
print Win32::FormatMessage(Win32::GetLastError());
}



■ 문제해결 :

- 아직까지 2주일동안 사용해본 결과 별 문제가 없었다.
(WinNT, Apache 1.3.9, ActivePerl 5.60, http://gsp.kyunghee.ac.kr)
(Win2000, IIS 5.0, ActivePerl 5.5, localhost 개발환경)
- Apache 에서 사용할 경우 malformed header 에러가 나는 경우는
system()함수를 사용하지 말고, `` 역따옴표 코맨드라인을 사용해 보라.



끝. 편의상 경어를 생략했습니다. 양해바랍니다.

##########################################################################

 

홈페이지바로가기 

Comments