2011-12-30 7 views
1

나는 PHP 스크립트를 사용하여 시간이 지나면 보내려는 전자 메일을 보내고 있습니다. 나는 sleep()을 사용하려고합니다. 그러나 이메일을 보내지 못하게하려면 어디에 넣어야합니까? 내 코드는 다음과 같습니다.잠을 사용하여 PHP 전자 메일을 지연시키는 방법

<?php  
if(isset($_POST['email'])) 
{ 

$headers = "From: Memory Jet <[email protected]>\r\n"; 


$to_visitor = $_POST["email"]; 
$common_data = $_POST["message"]; 
//I originally put the delay here, it didn't work 
mail($to_visitor, "Your Memory", $common_data, $headers); 

} ?> 

미리 감사드립니다. =) -Ben

+0

'mail()'함수 앞에 넣으면 잠자기 상태가됩니다. –

+0

다시 시도해 보겠습니다. –

답변

4

두 가지 질문 : 1) "작동하지 않았다"는 것은 무엇을 의미합니까? 그것은 무엇을 했는가? 2) 왜 이메일을 보내기 전에 오랜 시간을 기다리고 싶습니까?

또한 PHP 스크립트에서 sleep()을 호출하면 스크립트 작성이 지연되고 브라우저에 대한 HTML이 지연되므로 적극 권장합니다.

더 강력한 이메일 대기열 시스템을 구현할 것입니다. 기본적으로 스크립트에서 전자 메일을 보내는 대신 전송할 전자 메일 큐가 들어있는 데이터베이스에 행을 삽입합니다. 그런 다음 cron 또는 다른 백그라운드 프로세스를 사용하여 정기적으로 데이터베이스에서 전송할 전자 메일을 확인한 다음 일괄 처리로 보냅니다.

또한 "전송할 시간"을 테이블에 지정할 수 있으며 보낸 사람 스크립트는 현재 시간이 "전송할 시간"이후가 될 때까지 전자 메일을 보내지 않습니다.

sleep() ing의 문제는 PHP 스크립트가 실행되고 실행 된 다음 사라 졌다는 것입니다. (상대적으로) 먼 미래에 뭔가를하려면 뭔가이 필요합니다. cron은 그 예입니다. 당신은 Windows 작업 스케줄러 (당신은 대상 플랫폼을 언급하지 않았다)에서 뭔가를 사용할 수있는, 또는 자신의 프로그램을 작성합니다. C (또는 PHP조차도)를 연속적으로 실행하고, 데이터베이스를 검사하고 전자 메일을 보내는 등의 무언가를 작성하는 일은별로 없을 것입니다.

+0

스크립트가로드되지 않았습니다. 나는 그것을 다시 시도해야 할 것이다 나는 그것이 오류라고 생각했다 –

+0

http://www.kirupa.com/forum/showthread.php?301942-Insert-time-delay-into-mail-sending – DGund

+1

@DevinGund, 아, 실제 사람의 연기를 모방. 의미가 있습니다 :-) –

0

나는 PHP 스크립트를 사용하여 보내려는 이메일을 보내고 싶습니다. 나는 그것을 위해 sleep()을 사용할 것이다.

하지 마십시오. 사용자가 트리거 한 스크립트에서이 작업을 수행하면 절전 호출이 끝날 때까지 사용자의 최종 페이지 렌더링이 지연됩니다. 또한 전체 시간 동안 Apache 서버 작업자를 묶을 것입니다. 과부하가 걸리고 10 초 지연되면 인터넷에서 스스로 빠져 나올 수 있습니다. 또한 사용자가 지연이 끝나기 전에 페이지를 닫으면 전자 메일이 전송되지 않습니다.

이렇게하려면 cron 또는 데몬을 사용하십시오.

+0

사실이 아닙니다! 사용자가 페이지를 닫으면 스크립트가 계속 실행됩니다! – Alexxus

+0

@Alexxus 일반적으로 아니오. http://php.net/manual/en/function.ignore-user-abort.php – ceejayoz

+0

쓰레기! 당신 말이 맞아요! 그 죄송합니다! 나는 그것이 기본적으로 켜져 있다고 생각했다. – Alexxus

관련 문제