태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
페이지를 읽고 있습니다. ( 아쿠아바다's Blog )
분류 전체보기 (769)
쉐어포인트 (24)
Exchange (12)
SQL (121)
XML (36)
WEB (294)
O / S (97)
삶의향기 (162)
기획 (19)
RSS 피드(IE 7.0부터 기본 지원됩니다. 이전 버전 사용자는 접합한 툴을 사용하세요!!)

대량메일 발송

WEB/ASP / DotNet 2007/06/07 18:05 by 아쿠아바다

<!--#include file="dbconn.asp"-->
<%

Response.Buffer = True
Response.Expires = 0
Response.AddHeader "Pragma","no-cache"


Server.ScriptTimeOut = 3600
cur_path = Server.MapPath(".")

Set fs = CreateObject ("Scripting.FileSystemObject")
Set aspFile = fs.OpenTextFile (cur_path & "\email.asp") ' <----- 실행하기전 꼭 확인(이메일 내용)!!!
'=============서버 OutLook 실행후 멜발송

mail_str_org = ""
while not aspFile.AtEndOfStream
str = aspFile.ReadLine ()
mail_str_org = mail_str_org & str & Chr(13) & Chr(10)
wend
aspFile.close ()
'Response.Write mail_str_org


begin_code = cdbl(request ("begin_code"))

if begin_code = "" then '시작할 레코드
begin_code = 1
else
begin_code = CLng(begin_code)
end if
end_code = begin_code + 500 '500명씩 자르기 위한 준비

count = request("count")
if count = "" then
count = 0
else
count = CLng(count) '메일 보낸 카운트를 세기 위한 값
end if

' 테스터만
sql = "SELECT EMAIL,seq FROM purina.member where mailrefuse = '1' "
sql = sql & " and seq between " & begin_code & " and " & end_code ' between을 이용하여 값을 뽑아냄, 부
하를 줄이기 위해
sql = sql & " order by seq"
response.Write sql & "<p>"
OpenDatabase

Set logFile = fs.OpenTextFile (cur_path & "\log.txt",8) '로그를 기록하기 위한 텍스트파일 (미리 log.txt를 생
성해야함)

Set rs = conn.execute(sql)
if not rs.EOF then

Do while not rs.EOF
EMAIL = Rs("EMAIL")
seq = Rs("seq")

Set objMail = Server.CreateObject("CDONTS.Newmail")
objMail.From = "관리자<admin@admin.co.kr>"
objMail.To = EMAIL
objMail.Subject = " [이벤트] 최고로 건강을 키우고 싶다면 프로플랜! "
objMail.Body =mail_str_org
objMail.BodyFormat = 0
objMail.MailFormat = 0
objMail.importance = 1
objMail.Send


rs.MoveNext
count = count + 1
Loop
' 카운트 주기

logFile.WriteLine (seq & " : " & EMAIL & "(현재 카운트 : " & count & ")" &vbCrLf )
'로그파일에 마지막 성공한 번호와, 메일주소, 현재 카운트를 기록한다(계속 이어서~)

rs.close
set rs = nothing
logFile.close
%>

<%

Response.Write "<br>" & begin_code & " count : " & count

If begin_code < 120000 Then '12만건이 아직 안되었다면
%>
<SCRIPT>
setTimeout("window.open('send_mail.asp?begin_code=<%=end_code + 1%>&count=<%=count%>','_self');",
30000); //30초 쉰후에 다시 시작값을 보내서 다시 파일을 읽는다
</SCRIPT>
<%
Else
response.write "끝!"
End IF
%>






*******  바꾼 소스...  ************
if(!is_resource($conn)) $conn= new mysqlClass('호스트', '디비병', '유저명', '패스워드');

//업체 정보 쿼리
$sComQuery = "
    SELECT
        A.ID, A.Name, A.Email,
        B.Company, B.Addr, B.Phone, B.Fax, B.Homepage, B.NickName
    FROM MemberOfCompany AS B
    LEFT JOIN Member AS A ON A.id=B.id
    WHERE A.ID='".$aListRows[$key]['company_id']."'";
$aComRows = $conn->getData($sComQuery, 1);


그런데... 다시 생각해 보니 $conn은 원래부터가 resource가 아니였던 것이다. -.-;;
메뉴얼에도 잘 나와 있다시피...

$db_link = @mysql_connect('localhost', 'mysql_user', 'mysql_pass');

처럼 접속 했을 때 $db_link가 resource인 것이지, new를 통해 생성한 객체는 object 였던 것이다 -.-;;

그래서 결국에는 class에 메쏘드 하나를 추가하기로 했다. -.-;;


function checkResource() {
    if(is_resource($this->_CONN)) {
        return true;
    }
    else {
        return false;
    }
}

그리고 나서 위에 소스도 다음과 같이 수정했다.

*******  최종 소스...  *********
if(!$conn->checkResource()) $conn= new mysqlClass('호스트', '디비병', '유저명', '패스워드');

//업체 정보 쿼리
$sComQuery = "
    SELECT
        A.ID, A.Name, A.Email,
        B.Company, B.Addr, B.Phone, B.Fax, B.Homepage, B.NickName
    FROM MemberOfCompany AS B
    LEFT JOIN Member AS A ON A.id=B.id
    WHERE A.ID='".$aListRows[$key]['company_id']."'";
$aComRows = $conn->getData($sComQuery, 1);


아직까지는 잘 돌아가고 있으며, 메일 10만통을 보내는 데 1시간 정도 걸린다.(물론 콘솔을 4개 띄워서 동시에 4개의 프로세스로 돌린 경우이다 ^^;;)
php로 한시간 정도 에러 안나고 돌아가면... 성공한 것 아닌가?


알다 시피 대형 포털 사이트는 해당 발송 서버 아이피를 등록하지 않으면 자동으로 막힙니다.
스팸에 대한 처벌또한 강화 되었으니 주의 하시기 바랍니다.

어째든... 아무런 에러 없이 계속 돌아가 주기만을 바랄뿐이다 ^^


출처 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=44327&sca=&sfl=mb_id%7C%7Csubject&stx=ovclas

좀더 흥미로운 내용이 많이 있습니다.. HOME > WEB/ASP / DotNet를 확인하세요
TAG   
0 Trackback, 2 Comment, :
1  ... 254 255 256 257 258 259 260 261 262  ... 769 
Statistics Graph
Total : 557,403 Today : 33