2011-10-28 4 views
2

메일 기능을 설정하는 데 약간의 문제가 있습니다. 나는 내 HTML 템플릿을 클래스 파일에 별도로 보관할 수 있도록 설정하려고했습니다. 나는 아래와 같은 것을하고 싶었다.mail() 함수 - HTML 템플릿 보내기

mail('[email protected]', 'subject here', include('email/template.html'), '[email protected]'); 

정말 좋아 보이지는 않지만 어쨌든 정말 긴 메시지 문자열을 갖는 것 외에 다른 방법을 사용합니까?

종류는

답변

1

file_get_contents 대신 include을 시도 간주한다. include은 파일을 처리하고 내용을 반환하는 것이 아니라 스트림 (클라이언트로 전송되는 데이터)으로 출력합니다. 그렇지 않으면 항상 echo include('...')이됩니다.

"고급"능력 (그리고 당신의 호스트가 그것을 지원함)을 찾고 있다면 현실적으로, PEAR Mail이 더 좋은 선택입니다.

+0

고맙습니다. Html로 분석하는 것이 아니라 평범한 텍스트 일뿐입니다. 헤더를 업데이트해야합니까? – user863739

+0

@ user863739 : 새로운 [Mail_mime] (http://pear.php.net/manual/en/package.mail.mail-mime.example.php)을 만들고 콘텐츠 유형 (예)으로 재생할 수 있습니다. –

1

include() 파일의 내용을 반환하지 않습니다. 파일을 실행합니다. 즉, 파일 내의 모든 PHP 코드가 실행되고 "베어"html이 클라이언트에 출력됩니다. include() 반환 값은 성공/실패를 나타내는 true/false 값입니다.

그것은 나쁜 디자인,하지만이 같은 싶어 :

ob_start(); 
include('email/template.html'); 
$email_text = ob_get_clean(); 

mail('[email protected]', 'subject', $email_text, ....); 

output buffering 기능은 포함하고 다음 통과하는, 즉 $의 EMAIL_TEXT의 VAR에 반환의 "출력을"캡처를 mail() 함수에 전달합니다.

이 방법은 .html 페이지를 PHP로 실행하려는 경우에만 필요합니다. 정말 평범한 HTML이라면 대신 file_get_contents()를 사용하면 PHP 구문 분석/컴파일/실행 순서가 저장됩니다.

+1

OB (Output Buffering)는 읽는 파일을 PHP로 처리해야하는 경우에만 필요합니다. 단지 내용을 뒤집어 쓰는 경우 fopen/fread/fclose 또는 file_get_contents가 더 나은 방법입니다. - ** 수정 ** 내 의견에 근본적인 언급이 포함되도록 게시물을 업데이트 한 것 같습니다. ;-) –

1

귀하의 "() 포함"문이 잘못되고 ...이 시도 :

$template = file_get_contents('email/template.html'); 
mail('[email protected]', 'subject here', $template, '[email protected]'); 

는 당신이 실제로 당신이의 일환으로 해석 할 파일 포함되지 않는 한 include 지시어를 사용하지 마십시오 페이지 - 나쁜 프로그래밍 습관입니다. 위의 대답은 ob_start()를 사용합니다. include() ob_get_clean(); 더러운 방식으로 작동합니다. 실제로 PHP 스크립트로 포함을 실행합니다. 이제 템플릿이 사용자에 의해 채워지고 어딘가에 저장되면 사용자는이 구문을 사용하여 서버에서 임의의 PHP 코드를 실행할 수 있습니다. 좋지 못한 결과.

+0

감사합니다. Ahmed, file_get_contents()를 사용하여 HTML이 아닌 일반 텍스트로 구문 분석되고있는 것 같습니다. – user863739

관련 문제