<!--#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로 한시간 정도 에러 안나고 돌아가면... 성공한 것 아닌가?
알다 시피 대형 포털 사이트는 해당 발송 서버 아이피를 등록하지 않으면 자동으로 막힙니다.
스팸에 대한 처벌또한 강화 되었으니 주의 하시기 바랍니다.
어째든... 아무런 에러 없이 계속 돌아가 주기만을 바랄뿐이다 ^^
'WEB > ASP / DotNet' 카테고리의 다른 글
| 인덱스 필드 이용한 페이징 테스트 (0) | 2007/06/20 |
|---|---|
| ASP servervariables (0) | 2007/06/07 |
| 대량메일 발송 (2) | 2007/06/07 |
| Microsoft.XMLHTTP에서 한글 깨짐 완벽 해결 (0) | 2007/06/07 |
| 컴포넌트를 이용한 블로그 XML RSS 구현 (0) | 2007/06/07 |
| ASP 기반에서의 트랙백 구현 (0) | 2007/06/07 |




최근에 달린 댓글
링크
최근에 받은 트랙백
태그목록