2013-09-25 2 views
1

'에서'내가 사용 PHP의 메일을 무시한다.PHP의 메일()() 이메일 주소

사용자 "theArtist는"우리의 사이트에 판매를위한 그림을 위로 넣습니다. 사용자 "RichGuy"는 그것을보고 우리 사이트는 RichGuy가 "theArtist"에게 자신의 전자 메일 주소와 메시지를 입력하는 양식을 가지고 있습니다.

"RichGuy"가이 양식을 채우고 '보내기'를 클릭하면 PHP 코드가 데이터베이스에서 아티스트의 전자 메일 주소를 검색하고 mail() 호출에 사용 된 "받는 사람"전자 메일 주소로 만듭니다. 그리고 RichGuy가 방금 그 양식에 자신의 회신 전자 메일을 입력 한 이후로 "[email protected]"은 mail() 호출의 "보낸 사람 :"헤더에 사용됩니다.

나는 메일 ([email protected]를 보내려면 하나를 우리의 메일() 코드를 테스트하기 위해 두 더미 이메일 계정을 설정하고 하나 ([email protected]) 메일을 수신 할 수 있습니다.

내 진짜 이름은 이 수신자의받은 메시지에서 '보낸 사람'부분에 표시하기 때문이다. 문제, 내 진짜 이름과 내 핫메일 이메일은 "theArtist는"또한, hotmail.com 계정입니다하지 않는 것이 [email protected]. 참고 있습니다 여기에 베어링이 있는지 확인하십시오. [email protected] 계정을 몇 년 동안 사용해 보았습니다. 다른 두 개의 '더미'계정은이 메일() 코드를 테스트하기위한 새로운 계정입니다.

여기에 있습니다. 의 PHP 코드 : 위의 이메일이 성공적으로 [email protected]에 의해 수신되는

$sendTo = "[email protected]"; 
$subject = "I want that painting now!"; 
$theMsg = "That's a fine abstract piece, I'll buy it."; 
$headers = "From: [email protected]"; 

if(mail($sendTo, $subject, $theMsg, $headers)) 
{ 
     // success 
} 

- 여기 "theArtist는"수신 내용은 다음과 같습니다


지금 그림 것을 원한다! 에서 [email protected]

: [email protected]

가 보낸 사람 : ([email protected])

프레드 스미스 (화) 9/24/13 (8) : 20 PM

에 : [email protected] 좋은 추상 조각을의

, 나는 그것을 살 것이다.


왜 지옥에 내 진짜 이름, 프레드 스미스는이 같은 [email protected]'s 이메일에 게재되는 이유는 무엇입니까? 내 실제 이름을 사용하여 인증하는 2 개의 더미 전자 메일 계정을 사용 했음에도 불구하고 mail()이 뒤에 있습니까? 내 localhost 웹 서버와 웹에서 실행중인 준비 서버 모두에서 동일한 동작이 발생합니다.

$sendTo = "[email protected]"; 
$subject = "I want a deal on that painting"; 
$theMsg = "How about a discount on your painting?"; 
$headers = "From: [email protected]"; 
if(mail($sendTo, $subject, $theMsg, $headers, '[email protected]')) 

NO 변경을 :

그래서 나는 다음과 같이 문제를 강제로 시도했다. 내 실제 이름, Fred Smith가 발신자의 전자 메일 주소 인 RichGuy @ gmail 바로 앞에 붙어 있습니다.COM -


내가 그 그림에 거래를 원하는

프레드 스미스 ([email protected])

사람 : [email protected]

에서 : RichGuy @ gmail.com

보낸 날짜 : 화요일 9/24/13 8:20 PM

받는 사람 : [email protected]

그림 할인은 어떻습니까?


어떻게 든 인증 문제 일 수 있습니까?
mail()이 "ah-HAH"를 인식 할 수 있습니까? 사이트의 실제 '소유자'는 Fred Smith이므로 [email protected]이나 [email protected]에서 인증 할 수 없으므로 이전에 인증을 받아야합니다. 프레드 스미스 (FredSmith)에 이메일로 보내는 것. "

그건 그렇고, 내 localhost 웹 서버에서 sendmail debug.log를 검사했는데 전자 메일 메시지에는 거기에 "Fred Smith"가 기록되어 있지 않습니다.

[mail function] 
SMTP = smtp.live.com 
smtp_port = 25 
auth_username = [email protected] 
auth_password = fredspassword 

보내는 메일은 대부분 일반 계정을 사용하여 핫메일로 인증 한 다음 추가된다

+0

일부 호스트가이를 알았습니다. 사용자가 다른 사람으로부터 전자 메일을 가장하여 차단합니다. –

+0

PHP로 코딩 된 상태에서 Rmail을 사용하는 경향이있었습니다. 그것은 HTML 메일과 기타 등등을 보내는 것을 아주 쉽게 만들었습니다. 시도해보고 싶다면 어딘가에서 복사본을 얻을 수 있습니다 (작성자가 프로젝트 사이트를 가지고있는 것으로 보이므로 직접 가져올 수 없습니다). –

+0

이메일 주소가 진짜입니까? 이 경우 가짜 것을 사용하십시오. '@ example.com' 도메인을 사용하십시오. –

답변

1

확인 php.ini의 [메일 기능] 구성 섹션은, 내 생각은 다음에 따라 표시이다 발신자 헤더. 많은 ISP가 이제 SMTP를 차단하므로 로컬 개발 환경에서 SMTP를 보내는 유일한 방법입니다.

$sendername = strtok($senderEmail, "@"); 
$headers = "From: " . $sendername . " <" . $senderEmail . ">\r\n"; 

나는 단순히 '@'기호까지 보낸 사람의 이메일 '핸들'을 가져다 형식 "theSendersName"을 사용하여 헤더 '에서'메일을 포맷하고 일 : 여기

+1

@ StigM 감사합니다. localhost 웹 서버의/sendmail 폴더에있는 sendmail.ini 파일에 설명 된대로 해당 auth_ 설정을 찾았습니다. 그래서 나는 인증에 대한 나의 의심이 옳았다 고 생각한다. 내 호스팅 제공 업체는 sendmail.ini도 같은 방식으로 설정해야합니다. 우리 사이트를 호스트하기 위해 등록 할 때 만든 Fred Smith 계정 이름을 인증하기 위해서입니다. 내 localhost의 sendmail.ini를 변경할 수는 있지만 호스팅 제공 업체가 자신의 웹 서버에서 sendmail.ini를 수정하도록 허용 할 것이므로 가능한 경우 mail()을 무시하는 방법을 찾아야합니다. – CFHcoder

+0

@CFHcoder 훌륭한 해결책은 [Swift Mailer] (http://swiftmailer.org/)를 사용하는 것입니다. 'Mail Transport'에 대한 몇 가지 옵션이 있습니다. 다른 SMTP 서버를 사용하여 전송할 수있는 경우 Swift_SmtpTransport를 사용하여이 서버를 가리킬 수 있습니다. – StigM

+1

@Dagon 공식적으로 유효하지 않지만 Win32 구현을위한 auth_ 필드가 존재합니다.PHP는 SMTP 자체를 처리하므로 Win32 PHP는 SMTP를 인증해야합니다 (인증 설정을 허용하는 sendmail 설정 없음). – StigM