2011-11-29 2 views
0

제출할 때 내 서버에서 PHP 스크립트를 호출하는 HTML 양식이 있습니다. 양식의 요소 (받는 사람의 주소, 제목 줄, 본문)가 스크립트로 보내지고 전자 메일이 생성되어 전송됩니다. 이 모든 것이 훌륭하게 작동합니다.이메일 메시지에 파일 첨부하기

나는 이것을 확장하여 사용자가 로컬 컴퓨터에서 파일을 선택하고이를 서버에 보내 전자 메일 첨부 파일로 보내도록 허용하고자합니다. 현재 아키텍처로이 작업을 수행 할 수 있습니까? 또한 파일이 로컬 시스템 또는 PHP 스크립트에서오고 있기 때문에 클라이언트 측의 JavaScript 코드에 있습니까? 나는 JavaScript가 이와 같은 것을 할 수 있다고 생각하지는 않았지만 파일 탐색 창이 열리는 유사한 도구를 보았으므로 가능해야하지만 어쩌면 JavaScript가 아닐 수도 있습니다. 어디서부터 시작해야하는지 또는 어떻게해야하는지에 대한 좋은 충고는 아주 좋습니다.

답변

-1

이 경우 JavaScript를 사용할 필요가 없습니다. 실제로이 예제에서 사용할 수있는 것은 블링을 추가하는 것입니다.

<form enctype="multipart/form-data" action="__URL__" method="POST"> 
Send this file: <input name="userfile" type="file" /> 
<input type="submit" value="Send File" /> 
</form> 

이는 PHP의 일부가 될 것입니다 : php.net에서 촬영

$uploaddir = '/var/www/uploads/'; 
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']); 

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { 
    // handle success (add $uploadfile as attachment to the mail) 
} else { 
    // handle error 
} 

코드 (http://php.net/manual/en/features.file 이것은 HTML의 일부가 될 것입니다 -upload.php).

+1

이것은 일반적인 파일 업로드 용이며 업로드 된 파일을 저장해야합니다. 임시 디스크 공간이 필요하지 않습니다. 이메일 첨부 파일, 또는 구체적으로 OP에 어떻게 적용됩니까? – nickb

+1

@nickb : OP가 ** 포인터 **를 요구하고 있으며 이것이 좋은 것이라고 생각합니다. StackOverflow **는 무료 코딩 서비스가 아닙니다 **. Zrvan의 대답은 믿을만한 것입니다. – Icarus

+0

@ 이카루스 - OP의 주제에 대한 응용 프로그램을 설명하지 않고 문서의 직접 c/p는 대답이 아닙니다. 당신이 "무료 코딩 서비스"에 대해 언급 한 이유에 대해 확신하지 못했지만, OP의 요청을 (내 대답으로 알 수 있듯이) 코딩해야한다고 말한 적이 없으며, 당신이 말하는 것을 이해하기 위해 ** 대담한 텍스트 **가 필요하지 않습니다. – nickb

2

현재 아키텍처에서이 작업을 수행 할 수 있습니까?

예, PHP를 사용하여 이메일에 파일을 첨부 할 수 있습니다.

또한이 파일은 로컬 시스템이나 PHP 스크립트에서 오는 것이므로 클라이언트 측의 JavaScript 코드에 포함됩니까?

고객 측의 양식 (AN <input type="file" /> 폼 요소를 이용하여 enctype="multipart/form-data" 폼의 enctype 설정) 서버로 업로드되고, 업로드 할 파일을 선택하도록 사용자에게 프롬프트한다. 거기에서 서버는 첨부 파일을 이메일에 허용되는 형식 (예 : 파일을 base64 인코딩하는 형식)으로 변환합니다. 파일이 base64_encoded되면 전자 메일에 제대로 형성되어야 수신자의 첨부 파일로 이해할 수 있습니다.

은 다음을 포함하여, 수율 많은 튜토리얼을 "PHP에서 이메일 첨부 파일을 보내"인터넷 검색 :

0

첫째 -이 자바 스크립트, PHP하지 행해진 다. 브라우저에서 실행될 때 Javascript는 로컬 파일 시스템에 액세스 할 수 없습니다. 당신이 할 필요가

우선은 multipart/form-data입니다 있도록 <form> 요소의 enctype 속성을 변경/양식에 <input type="file">를 추가 형태의 methodpost 있는지 확인하고 추가 할 수 있습니다. 성공적인 파일 업로드에 대한 정보는 PHP에서 $_FILES 배열 (see here for more information)의 PHP에서 파일 업로드를 처리 할 때 사용할 수 있습니다.

다음으로 이메일 생성 방법을 변경해야합니다.PHPMailer 또는 SwiftMailer과 같은 것을 사용하는 경우 (그 중 하나를 사용하는 것이 좋습니다) 메시지 첨부 파일을 추가하는 방법에 대해서는 해당 문서를 읽는 것이 좋습니다. mail()을 사용하고 계속 사용하려면 multipart MIME messages의 작동 방식을 알아야합니다.

<form action="send_email_with_attachment.php" method="post"enctype="multipart/form-data"> 
    <label for="file">Select file to attach:</label> 
    <input type="file" name="file" id="file" /> 
    <br /> 
    <input type="submit" name="submit" value="Submit" /> 
</form> 

을 그리고 PHP's mail function를 사용하여 보낼 메시지 문자열로 파일 내용을 연결 :

1

은 다음과 같이 HTML의 다중 양식을 사용합니다. 전자 메일 머리글 (메시지 문자열에서)은 경계가있는 multipart 인 컨텐트 유형을 가지며 전자 메일 본문과 경계 내용이있는 파일 내용을 구분합니다. 원하는 임의의 문자열을 선택할 수 있습니다. 파일이 이미지 인 경우 다음과 같이 표시 될 수 있습니다 (긴 문자열은 이미지 파일의 base64 인코딩).

To: Someone 
Subject: Test HTML email 
From: SomeoneElse 
Reply-To: Nobody 
MIME-version: 1.0 
Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p 
Date: Tue, 29 Nov 2011 09:55:36 +0100 (CET) 


--gc0p4Jq0M2Yt08jU534c0p 
Content-Type: text/plain; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit 

Hello World!!! 
This is simple text email message. 

--gc0p4Jq0M2Yt08jU534c0p 
Content-Type: image/png; name="img.png" 
Content-Transfer-Encoding: base64 
Content-ID: xxxx 
Content-Disposition: inline, filename="img.png" 

iVBORw0KGgoAAAANSUhEUgAAAAUA 
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO 
9TXL0Y4OHwAAAABJRU5ErkJggg== 

--gc0p4Jq0M2Yt08jU534c0p-- 
관련 문제