PHP에서 mail() 함수 동작 테스트, Zeroboard 수정사항
MYDN2008. 5. 21. 14:01
PHP 에서 mail 함수 정상 동작하는지 확인하는 소스
test.php 로 저장하여,
웹페이지에서 로드했을때
mail success 가 찍혀야 정상
만약, 위 소소에서 mail success 가 찍히는데
각종 커스텀 보드에서 메일 발송이 되지 않는다면,
php소스에서 mail 함수의 각 인자들을 확인해본다.
error_log($mailto, 0); // mailto 변수를 서버의 에러로그에 찍는다.
error_log($subject, 0);
가령,
Apache 서버를 구동중이라면,
Apache\logs\error.log
파일에 mailto 변수의 내용이 찍힌다.
지금 내가 사용중인 환경은
Apache2.2.8 + SMTP(W2K3 R2) + PHP5.2.5
위와 같이 테스트에서 이상이 없었으나,
제로보드에서는 메일을 보내지 못하는 현상이 발생한다.
따라서,
제로보드의 메일발송 소스를 확인해보니,
받는 사람(Receiptor) 변수에
위의 예제에서는 "sample@a.com" 이지만,
제로보드는 "받는사람 이름 <sample@a.com>"을 설정한다.
Receiptor 변수를 임의로 "sample@a.com"으로 수정하고
정상 작동하는 것을 확인
해당 소스를 수정해주었다.
제로보드\classes\mail\Mail.class.php
수정이후 정상 발송 확인
끝~!
<?php
//$mailto="받는주소";
$mailto="sample@a.com";
$subject="mail test";
$content="test";
$result=mail($mailto, $subject, $content);
if($result){
echo "mail success";
}else {
echo "mail fail";
}
?>
//$mailto="받는주소";
$mailto="sample@a.com";
$subject="mail test";
$content="test";
$result=mail($mailto, $subject, $content);
if($result){
echo "mail success";
}else {
echo "mail fail";
}
?>
test.php 로 저장하여,
웹페이지에서 로드했을때
mail success 가 찍혀야 정상
만약, 위 소소에서 mail success 가 찍히는데
각종 커스텀 보드에서 메일 발송이 되지 않는다면,
php소스에서 mail 함수의 각 인자들을 확인해본다.
error_log($mailto, 0); // mailto 변수를 서버의 에러로그에 찍는다.
error_log($subject, 0);
가령,
<?php
//$mailto="받는주소";
$mailto="sample@a.com";
$subject="mail test";
$content="test";
$result=mail($mailto, $subject, $content);
if($result){
echo "mail success";
}else {
error_log($mailto, 0);
echo "mail fail";
}
?>
일 경우,//$mailto="받는주소";
$mailto="sample@a.com";
$subject="mail test";
$content="test";
$result=mail($mailto, $subject, $content);
if($result){
echo "mail success";
}else {
error_log($mailto, 0);
echo "mail fail";
}
?>
Apache 서버를 구동중이라면,
Apache\logs\error.log
파일에 mailto 변수의 내용이 찍힌다.
지금 내가 사용중인 환경은
Apache2.2.8 + SMTP(W2K3 R2) + PHP5.2.5
위와 같이 테스트에서 이상이 없었으나,
제로보드에서는 메일을 보내지 못하는 현상이 발생한다.
따라서,
제로보드의 메일발송 소스를 확인해보니,
받는 사람(Receiptor) 변수에
위의 예제에서는 "sample@a.com" 이지만,
제로보드는 "받는사람 이름 <sample@a.com>"을 설정한다.
Receiptor 변수를 임의로 "sample@a.com"으로 수정하고
정상 작동하는 것을 확인
해당 소스를 수정해주었다.
제로보드\classes\mail\Mail.class.php
function getReceiptor() {
//if($this->receiptor_name) return sprintf("%s <%s>", '=?utf-8?b?'.base64_encode($this->receiptor_name).'?=', $this->receiptor_email);
return $this->receiptor_email;
}
//if($this->receiptor_name) return sprintf("%s <%s>", '=?utf-8?b?'.base64_encode($this->receiptor_name).'?=', $this->receiptor_email);
return $this->receiptor_email;
}
수정이후 정상 발송 확인
끝~!
SMTP 서버 릴레이 오류 해결방법
MYDN2008. 5. 21. 11:09
Outlook Express에서 메일 발송이 되지 않는다.
기술 자료 ID | : | 601904 |
마지막 검토 | : | 2003년 7월 28일 월요일 |
수정 | : | 1.3 |
이 문서는 이전에 다음 ID로 출판되었음: KR601904
현상
Exchange 2000을 설치 후 클라이언트에서 Outlook Express을 설정하고 외부로 메일을 보낼 때 다음과 같은 에러가 발생합니다.
"받는 사람 중 한 사람이 서버에서 거부되었으므로 메시지를 보낼 수 없습니다. 거부된 전자 메일 주소는 'mgkim7@hotmail.com'입니다. 제 목 'Test', 계정: '157.60.8.33', 서버: '157.60.8.33', 프로토콜: SMTP, 서버 응답: '550 5.7.1 Unable to relay for mgkim7@hotmail.com', 포트: 25, 보안(SSL): 아니오, 서버 오류: 550, 오류 번호: 0x800CCC79"
원인
SMTP 가상 서버에서 릴레이(Relay)가 거부되었기 때문입니다.
해결 방법
• | 방법 1 : Outlook Express를 실행하는 컴퓨터가 릴레이가 가능하도록 다음의 단계를 실행하여 SMTP 가상서버의 Relay Restrictions에 클라이언트 컴퓨터를 추가합니다.
| ||||||||
• | 방법 2 : SMTP 가상 서버에서 Allow all computers which successfully authenticate to relay, regardless of the list above가 활성화되어 있는 경우에는 다음과 같이 Outlook Express에서 보내는 메일 서버에 로그온 하도록 설정합니다.
|
WebSVN 에서 특정 폴더(파일) 리스트 숨기기
MYDN2008. 5. 14. 20:11
앞서
WebSVN 에서 특정 저장소에 PREFIX 를 설정하여,
나타나지 않도록 하게 하였었다.
특정 저장소 리스트 숨기는 방법 보러가기
업무를 진행하다보니,
이번에는 공개된 저장소에서도 특정 폴더를
나타나지 않게 할 필요성이 있게 되었다.
WebSVN 은 저장소와 폴더(파일)의 개념이 독립적이기 때문에
수정 위치가 다르다.
다음과 같이 설정하여,
"_preserve_" 라는 문자열로 시작되는 폴더를 숨길 수 있다.
< WebSVN \ listing.php >
function showDirFiles($svnrep, $subs, $level, $limit, $rev, $listing, $index, $treeview = true)
{
global $rep, $passrev, $showchanged, $config, $lang;
{
global $rep, $passrev, $showchanged, $config, $lang;
$path = "";
if (!$treeview)
$level = $limit;
$level = $limit;
for ($n = 0; $n <= $level; $n++)
{
$path .= $subs[$n]."/";
}
{
$path .= $subs[$n]."/";
}
$contents = $svnrep->dirContents($path, $rev);
// List each file in the current directory
$loop = 0;
$last_index = 0;
$openDir = false;
$fullaccess = $rep->hasReadAccess($path, false);
foreach($contents as $file)
{
$isDir = ($file{strlen($file) - 1} == "/"?1:0);
$access = false;
$loop = 0;
$last_index = 0;
$openDir = false;
$fullaccess = $rep->hasReadAccess($path, false);
foreach($contents as $file)
{
$isDir = ($file{strlen($file) - 1} == "/"?1:0);
$access = false;
if( $isDir &&
strncmp($file,"_preserve_",10) == 0 )
continue;
strncmp($file,"_preserve_",10) == 0 )
continue;
if ($isDir)
{
if ($rep->hasReadAccess($path.$file, true))
...
붉은색 코드가 추가된 부분이다.{
if ($rep->hasReadAccess($path.$file, true))
...
만약, 폴더 뿐만이 아니라 파일까지 숨기고 싶다면,
위 코드 대신 아래의 코드를 삽입하면 된다.
if( strncmp($file,"_preserve_",10) == 0 )
continue;
continue;
마찬가지로,
특정 헤더에 설정값을 받도록 할 수 있겠지만,
귀차니즘...
끝!