2011년 8월 4일 목요일

php 메일 발송 안될때(org,edu)

PHP의 mail() 함수를 통해 메일발송이 안될때의 해결방법  ( 출처: 패스코리아넷 passkorea.net/Support/FAQ)
웹메일에서 보낸메일은 잘 가는데 PHP mail() 함수를 통해 발송시 문제가 된다면
다음처럼 발송프로그램이나 발송옵션에 따른 문제일 확률이 높습니다.

발송후 아래처럼 발송로그를 확인해보시면 '보낸사람주소'가 엉뚱하게 붙어나갈 것 입니다.
Nmail PHP) tail -n30 /var/MailRoot/logs/smail-200609060000
sendmail) tail -n30 /var/log/maillog

예를 들어 'root@localhost.localdomain' 처럼 붙어나간다면 대형포털이나 스팸차단솔루션을 사용중인 메일서버에서
발송서버의 IP와 도메인(localhost.localdomain)이 일치하지 않아 차단될 가능성이 높습니다.
이 문제가 아니더라도 '보낸사람주소(회신주소)'가 제대로 지정되지 않을 경우
문제가 발생하는 원인에 대한 정확한 에러메세지를 메일로 받아볼 수 없는 문제가 있습니다.

따라서 아래 내용을 참고하셔서 서버설정이나 메일발송프로그램을 수정하셔야 합니다.

-. 메일을 보낼때 보낸사람주소를 따로 지정해도 'root@localhost.localdomain' 등의 엉뚱한 주소로 붙어나가는 경우의 해결방법.

    sample source)
        $header = "Return-Path: <$mail_from>\n";
        $header .= "From: $fname <$mail_from>\n";
        mail($to, $subject, $body, $header);

    A) 메일발송 소스를 수정하는 방법.
        $header = "Return-Path: <$mail_from>\n";
        $header .= "From: $fname <$mail_from>\n";
        mail($to, $subject, $body, $header);
        =>
        mail($to, $subject, $body, $header, '-f'.$mail_from);

    B) php.ini 를 수정하는 방법.(Linux)
        ; PHP mail() 함수에서 발송하는 메일에는 모두 적용됨. 수정후 아파치 재시작해야함.
        ;sendmail_path =
        =>
        sendmail_path = "/usr/sbin/sendmail -t -i -fpostmaster@domain.com"

    C) php.ini 를 수정하는 방법.(Windows)
        ; 모든 메일발송자가 고정적으로 지정됨. 수정후 아파치 재시작해야함.
        ;sendmail_from = me@example.com
        =>
        sendmail_from = postmaster@domain.com

php form 값 넘길때 일회용 토큰 보안

<?php
session_start();
?>
<html>
<head>
<title>SQL Injection Test</title>
</head>
<body>
<?php

echo 'Session token=' . $_SESSION['token'];
echo '<br />';
echo 'Token from form=' . $_POST['token'];
echo '<br />';

if ($_SESSION['token'] == $_POST['token']) {
    /* 훌륭하다. 정상으로 돌아간다. 다른 토큰을 만들자. */

} else {
    echo '<h1>Go away!</h1>';
}
$token = md5(uniqid(rand(), true)); 
$_SESSION['token'] = $token; 
?>
<form id="myFrom" action="<?php echo $_SERVER['PHP_SELF']; ?>"
    method="post">
<div><input type="hidden" name="token" value="<?php echo $token; ?>" />
<input type="text" name="myText"
    value="<?php echo(isset($_POST['myText']) ? $_POST['myText'] : ''); ?>" />
<input type="submit" value="Save" name="submit" /></div>
</form>
</body>
</html>


팔로어