2013-03-21 3 views
1

doc 파일 첨부 파일이있는 전자 메일을 보내고 있습니다. 메일을 받았지만 첨부 파일이 없습니다.doc 파일 첨부 파일로 메일 보내기

PHP

$file_resume = ''; 
if (!empty($_FILES['attachment_file_name']['tmp_name'])) { 
$file = $_FILES['attachment_file_name']['name']; 
$attachment= file_get_contents($file); 
$attachment= chunk_split(base64_encode($attachment)); 

} 

$uid = md5(uniqid(time())); 

$headers= "From: [email protected]"."\r\n"; 
$headers.= "Reply-To: [email protected]"."\r\n"; 
$headers.= "X-Mailer: PHP/" . phpversion()."\r\n Content-Type: multipart/mixed; boundary=\"PHP-mixed-".$uid."\"\r\n"; 
$headers.= "MIME-Version: 1.0" . "\r\n"; 
$headers.= "Content-type: text/html; charset=utf-8"."\r\n Content-Disposition: attachment; filename=\"".$attachment."\"\r\n"; 

$message = $_POST['person_name']; 

mail($to,$subject,$message,$headers); 

HTML을

<form id="attachment" action='mailer.php' method='POST' name="attachment" enctype="multipart/form-data"> 

    person name: <input type="text" name="person_name" > 
<br /> 
    Attachment : <input id="attachment_file" class="field" style="height: 25px;" type="file" name="attachment_file_name" /> 

    <input id="submit_button" type="submit" value="Send" /> 
    </form> 
+0

PHPMailer 또는 SwiftMailer와 같은 클래스 또는 라이브러리를 사용하십시오. –

+0

@ luk3thomas - 메시지 블록의 경계입니다. 내가 볼 수없는 것은 전자 메일 본문과 전자 메일 본문과 인코딩 된 첨부 파일 콘텐츠의 각 블록을 경계 짓는 전자 메일 본문입니다. '$ message'는 어디에 정의되어 있습니까? –

+0

선생님, 제 코드가 바뀌 었습니다. 제 코드를 제게 알려주십시오. –

답변

2

을, 당신은 실제로 당신이 건설하는지 나타내는 바탕으로 메일 텍스트 패킷을 알게 필요 mail() 인수 을 이해하지 못하면 여기에 무슨 일이 일어나고 있는지, 첨부 파일을 보내 이메일을 보내려는 투쟁을 할 것입니다. 너무 날카로운 가장자리가 있습니다.

Gmail에는 원본 메시지 패킷을 일반 텍스트로 볼 수있는 멋진 기능이 있습니다. 원본 표시입니다. 전자 메일 스크립트를 테스트 할 때 가능한 경우 Gmail 계정을 사용하여 실제 전자 메일 일반 텍스트 패킷을 검사 할 수 있습니다. 원본을 표시하려면 이메일의 답장 화살표 옆에있는 아래쪽 화살표로 시작되는 왼쪽 상단 드롭 다운으로 이동하십시오.

첨부 된 이미지가 첨부 된 테스트 이메일을 나에게 보내면 아래에 있습니다. 메일 호출은 본질적으로이 예제와 다소 다른 것으로 변환되어야합니다.

헤더가 처음부터 어떻게 시작되는지 알아 두십시오 (아래의 상위 5 개 헤더는 처리하지 않습니다. MIME-Version 제외). 그 블록의 끝에서, 당신은 :

Content-Type: multipart/mixed; boundary=089e0118416874703004d86a5106 

= 당신이 인코딩 된 첨부 파일의 내용을 포함하여 다중 메시지 블록을 추가 할 수있는 메시지 부분의 경계이며, 다음과 같은 부분 적절한 하위 부품 헤더가 주어진다.

그래서 거기에 다음 text/plaintext/html 이중 메시지 형식을 포함

Content-Type: multipart/alternative; boundary=089e0118416874702b04d86a5104 

:

--089e0118416874703004d86a5106 

... message block(s) ... 

--089e0118416874703004d86a5106-- 

으로, 실제로 다른 경계 선언이있다. 이것은 필수 사항은 아니지만 많은 메일 클라이언트가 본질적으로 그렇게합니다. text/plain 또는 text/html 중 하나를 선택할 수 있습니다. 귀하의 의견과 귀하의 의견이 어떻게 구성되어 있습니까?

다음으로 우리는 다음을 참조하십시오 경계의가 a를 끝에 자신의 블록 (안 각 블록)에서 -- 후행 한

--089e0118416874703004d86a5106 
Content-Type: image/jpeg; name="opinion (2).jpg" 
Content-Disposition: attachment; filename="opinion (2).jpg" 
Content-Transfer-Encoding: base64 
X-Attachment-Id: f_hejlmnuz0 

/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAIEBAYIBggICAgICAgICAgKCgoKCgoKCgoKCgoKCgoK 
... lots of lines for the encoded file block ... 
W5R3W8ajLwrgUJEDGKWN2kWvO5iB7qdKwB6MwwfqVrQKcObveZxZBtQNCp0vc//Z 
--089e0118416874703004d86a5106-- 

하는 것으로.

아래를보고 luk3thomas의 답변과 비교하십시오. 자신에게 매우 간단한 이메일 메시지를 전송하는 시도하고 첨부 파일 형식의 이메일에 그 비교 :

mail('[email protected]', 'Simple mail test', 'Test message body content.');` 

당신은 첨부 파일을 포함하여 이메일을 보낼 필요가 무슨 생각을하기 시작한다. 문제는 전송 용 이메일 패킷을 형식화하는 것이 매우 특수하며 거의 실패하지 않을 수 있다는 것입니다. 그래서주의를 기울여야합니다.

MIME-Version: 1.0 
Received: by 10.50.40.164 with HTTP; Thu, 21 Mar 2013 00:30:51 -0700 (PDT) 
Date: Thu, 21 Mar 2013 02:30:51 -0500 
Delivered-To: [redacted]@gmail.com 
Message-ID: <[email protected]om> 
Subject: Test of email with attachment for plaintext 
From: Jared Farrish <[redacted]@gmail.com> 
To: Jared Farrish <[redacted]@gmail.com> 
Content-Type: multipart/mixed; boundary=089e0118416874703004d86a5106 

--089e0118416874703004d86a5106 
Content-Type: multipart/alternative; boundary=089e0118416874702b04d86a5104 

--089e0118416874702b04d86a5104 
Content-Type: text/plain; charset=UTF-8 

This is the body of the email message. 

--089e0118416874702b04d86a5104 
Content-Type: text/html; charset=UTF-8 

<div dir="ltr">This is the body of the email message.<br></div> 

--089e0118416874702b04d86a5104-- 
--089e0118416874703004d86a5106 
Content-Type: image/jpeg; name="opinion (2).jpg" 
Content-Disposition: attachment; filename="opinion (2).jpg" 
Content-Transfer-Encoding: base64 
X-Attachment-Id: f_hejlmnuz0 

/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAIEBAYIBggICAgICAgICAgKCgoKCgoKCgoKCgoKCgoK 
CgoKCgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/2wBDAQIICBAQEBAQEBAgICAgIEBAQEBA 
QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQED/wgARCAEsASwDASIA 
AhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAAAAAABgcFCAIDBAkAAf/EABsBAAMBAQEBAQAAAAAAAAAA 
[-- snip many lines of base64 file contents --] 
yGrjmAV5jlw7j5RFebDQu8RG2rLa/up9x/xHOU5eppGo7lm3uDTz6w5XxBYgB7ruYJFwW/2PiD9q 
XjDEturp55IeLGM36+Tlz8JY6v8AXGhta9/4Ih62UvuWHuP3DfOg/wAGFg/g0mNKnahdifSKKua+ 
h0likOlp+yFa2FgP0rtOReVitRTIiUuJSjw6JpN4thVyhRdZ8EE/aYzn523NZeJYu7judhllHo0g 
W5R3W8ajLwrgUJEDGKWN2kWvO5iB7qdKwB6MwwfqVrQKcObveZxZBtQNCp0vc//Z 
--089e0118416874703004d86a5106-- 
+0

Jared가 제안했듯이 간단한 메일을 되돌리는 것은 보내는 방법을 이해하는 가장 쉬운 방법 중 하나입니다. 귀하의 답변은 정말 분명하고 주변에서 찾을 수있는 최선책 중 하나입니다.) – sataniccrow

2

당신은 전자 메일 메시지의 본문에 첨부 파일을 추가해야합니다. 이 같은 시도 : 수동으로 첨부 파일 (들)로 이메일을 보내려고 위하여려고하는 경우에

$random_hash = md5(time()); 

$headers .= "\r\nContent-Type: multipart/alternative; boundary=\"PHP-alt-".$random_hash."\""; 

$headers .= "\r\nMIME-Version 1.0"; 

$attachment = chunk_split(base64_encode(file_get_contents($filename))); 

$message = 
"--PHP-alt-$random_hash 
Content-Type: text/plain 

Dear Same, 

We would like to thank you for your registration to be held on Saturday August 25, 2012 at the.... 

--PHP-alt-$random_hash 
Content-Type: application/pdf; name=$filename 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment 

$attachment 
--PHP-alt-$random_hash--"; 

@mail($to, $subject, $message, $headers); 
+0

내 코드로 업데이트 해주십시오. 당신의 anss에서. –

+1

luk3thomas이면, 메일 패킷과 메일() 함수의 출력이 일치 할 때까지 OP는 그것을 얻지 못할 것입니다. –

관련 문제