2014-03-30 4 views
0

이상한 문제가 있습니다.php mail 'from'헤더가 작동하지 않습니다.

필자는 'mail'함수를 사용하여 php mail() 함수를 래핑합니다. 이것은 몇 년 동안 사용되었고 내 사이트의 두 곳에서 매일 행복하게 메일을 보내고 있습니다. 그러나 동일한 호스트의 동일한 사이트의 다른 부분에서 동일한 포함을 다시 사용할 때 'From'헤더를 포함하여 메일을 보낼 수 없다는 것을 알았습니다. 유일한 차이점은 사이트의 새로운 발신 위치는 기본 인증 보호 된 디렉토리입니다.

사람들이 도약하기 전에 동일한 호스트에서 동시에 작업하는 것과 똑같은 코드이므로 정확하게 동일한 코드가 두 위치에서 작동하며 세 번째 위치에서는 작동하지 않습니다. . (이 다중 HTML 이메일을 운반로)

그래서 나는 다른 헤더들, 설정 :

$headers = "From: $fromName <$fromEmail>\n"; 
$headers .= "Reply-To: \"$fromName\" <$fromEmail>\n"; 
$headers .= "Sender: \"$fromName\" <$fromEmail>\n"; 

이 사이트에 두 위치에서 잘 작동하지만 '보낸 사람'라인의 포함은 메일 전송의 원인 동일한 호스트의 세 번째 위치에서 오류가 발생했습니다. 이 코드는 또한 내 dev 컴퓨터에서 잘 작동하며,이 세 번째 위치에서 메일을 보내지 않는 Live 호스팅 상자 일뿐입니다. 이제 ...

  1. 예 나는 "\ n을"이 아니라 "\ 연구 \ 없음"을 사용하고 있습니다 알고 있지만 내 경험은 "\ 연구 \ n"Windows 호스트에 필요하지만 원인이 문제있다 * 익스 호스트에 - 그래 내가 알고있는 RFC는 CRLF 말한다 - 그래서 에서이 나중에 래퍼에 을 '고정'되어이 Windows 호스트에 있다면 그러나 "\ n을"로 왼쪽 * IX
  2. 아니, 설정 "\ r \ n"은 어떤 변화도 가져 오지 않습니다!
  3. 은 내가 메일() 다섯 번째 있었던 파라미터 및 -f 사용하여 experiemented,하지만 그 은 나만이 '보낸 사람'필드가 실제로 메시지를 열기에받는 사람이 보는 효과가
  4. 를 대신하여 보낸 메일 제공; 그러나 Pretty_name [email_address]에서 Outlook의 메일 목록에있는 발신자는 'Pretty_name'이 아닌 email_address로 표시됩니다.
  5. ini-set으로 경험했지만 전자 메일 주소와 메시지 만 설정합니다 이미 이메일 주소에서 원하는으로 가고, 그것은 그래서

을 작동하지 않습니다 'Pretty_name을'의 기억 - 동일한 코드는 아무 문제없이 같은 사이트에서 다른 곳들이받은,하지만 문제가 여기에있다 동일한 코드가이 위치의 '보낸 사람'헤더 없이만 사용될 수 있다고 (아직 짐작하지 않은 이유로) 보인다.

그런 일관성없는 행동이 보이는 사람은 누구입니까?

들으

+0

실제로 실패한 사항에 대해 자세히 설명해 주시겠습니까? 서버에서 메일을 전달할 수 없다고보고했거나 단순히 수신하지 못하고 있습니까? 스팸 필터 또는 유효한 출처에서 유사한 제한에 의해 차단되고 있는지 다른 계정으로 보냈습니까? – IMSoP

+0

mail()은 메시지가 전송되지 않았 음을 나타내는 부울 FALSE를 반환하고 아무것도받지 못합니다. 오류나 경고가 발행되지 않으며, 단지 그것을 갖지 않을 것입니다! – user3343607

답변

0

메일()가 false를 반환하는 경우 먼저, 다음, 반드시 출력 마지막 오류 메시지를 확인하십시오 오류 메시지가 정말로 이메일에 대해 잘 표시되지 않는 경우

print_r(error_get_last());

자체적으로, php.ini 파일에 문제가있을 가능성이 있습니다 (예 : 업그레이드 중 구성 실수 등). 문제가있는 코드를 별도의 파일로 분리 한 다음, 임시로 php.ini 파일을 기본 파일로 교체하고 웹 서버를 재시작하여 새로운 php.ini를 적용한 다음 테스트를 다시 실행할 수 있습니다. phpinfo()를 스크립트와 함께 덤핑하여 새로운 php.ini가 유효 함을 확인할 것을 권장합니다).

둘째, \ r \ n을 사용하십시오. 여기에 테스트에서 기능적 차이가 없다는 것을 알고 있지만, 올바른 줄 끝이고 그냥 \ n을 사용하면 규칙을 실제로 따르는 메일 서버에 문제가 발생할 것입니다. \ n을 사용하면 메일 서버에 의존하여 오류 자동 수정을 처리하는 추가 코드를 갖게됩니다.

\ r \ n을 사용하면 규칙을 따르지 않는 코딩되지 않은 서버에서 문제가 발생할 수 있지만 실제로 해결할 문제는 아닙니다. 항상 RFC를 따르십시오.

관련 문제