:: ASP 에서 표현할 경우
response.write(formatnumber( value, 0, -1 ))
:: PHP 에서 표현할 경우
echo number_format($value);
:: Perl Script 에서 표현할 경우
print cm($value);
sub cm {
my $num = shift;
my ($n) = $num =~ /(\d+)/;
1 while $n =~ s/(\d+)(\d{3})/$1,$2/;
$num =~ s/(\d+)/$n/;
$num;
}
:: JSP 에서 표현할 경우
new DecimalFormat("###,###,###,###,###").format(value);
보통은 Bean으로 만들어서 표현을 합니다.
:: MS-SQL Query에 의해 표현할 경우
SELECT
REPLACE(CONVERT(VARCHAR,CONVERT(MONEY,1234567890),1),'.00','')
결과값
1,234,567,890
(1개 행 적용됨)
-- 기존 qmail-remote를 qmail-remote-org로 이름변경
$ mv /var/qmail/bin/qmail-remote /var/qmail/bin/qmail-remote-org
-- qmail-remote perl script파일을 다음과 같이 만들자.
$ vi /var/qmail/bin/qmail-remote
/** --------------------------------------------------------------------------------- **/
#!/usr/bin/perl
# 스탠다드 입력으로 메일 내용을 읽어들인다.
undef $/;
$inputdata = <STDIN>;
$/ = "\n";
$inputdata =~ /Subject: (.*)/;
$subject = $1;
$inputdata =~ /Received: from.*\(([0-9.]+)\)/;
$ip = $1;
# 시간을 구한다.
$now_string = localtime;
# 로그를 기록한다.
open FH, ">>/var/log/qmail-remote.log";
flock(FH,2);
print FH "\n===================================================================";
print FH "\nARGV[0]:$ARGV[0]\nARGV[1]:$ARGV[1]\nARGV[2]:$ARGV[2]";
print FH "\n$now_string\nIP:$ip\nTo:$ARGV[2]\nFrom:$ARGV[1]\nSubject:$subject\n";
close FH;
# 특정 제목이면 보내지도 않고 보냈다고 에러코드를 리턴하고 종료한다.
if ($subject =~ /^\s*(광고|대출|뽈노)\s*\s+/i) { #광고성 제목의 메일 pass
exit 1;
}
if ($ARGV[1]=~ m/root@windows.or.kr/) {
exit 1;
}
if ($ARGV[1]=~ m/postmaster@windows.or.kr/) {
exit 1;
}
if ($ARGV[1]=~ m/anonymous@windows.or.kr/) {
exit 1;
}
if ($ARGV[2]=~ m/anonymous@windows.or.kr/) {
exit 1;
}
if ($ARGV[2]=~ m/root@windows.or.kr/) {
exit 1;
}
if($ip =~ m/Cron/) { # 크론이 메일을 발송하는 경우 Cron으로 시작하는 ip값을 가지는 것도 있으니 추가
exit 1;
}
#if($ARGV[1] =~ /\s*(?:root|postmaster|anonymous|)\s*/i)
#{
#exit 1;
#}
#if($ARGV[2] =~ /\s*(?:root|postmaster|anonymous|)\s*/i)
#{
#exit 1;
#}
# 원래 qmail-remote 프로그램을 실행시킨다.
open (MAIL, "| /var/qmail/bin/qmail-remote-org $ARGV[0] $ARGV[1] $ARGV[2]");
print {MAIL} $inputdata;
close MAIL;
/** --------------------------------------------------------------------------------- **/
설명)
바운싱이나 더블바운싱이 되는 원리는.
역시 없는 메일로 보낸 메일의 리턴때문이다.
postmaster, root, anonymous 등의 메일이 from:이나 to:에 들어가므로 파라메터로 들어오는
ARGV[1]. ARGV[2]에서 검사후 강제 종료시켜버리면
/var/qmail/queue/mess에 남아 꾸준히 발송하여 프로세스를 잡아먹는 현상을 방지 할 수 있다.