문제

웹 사이트 방문자가 파일과 간단한 메시지를 업로드 할 수있는 양식을 웹 사이트에 넣고 싶은 사용자를 상상해보십시오. 메시지 본문의 메모와 함께 파일 첨부로 일시적으로 만.

자세한 내용을 참조하십시오 http://a2zsollution.com/php-secure-e-mail/

이것을 달성하는 가장 간단한 방법은 무엇입니까?

측면에서 가장 간단한 :

  • 크기 (코드 골프)
  • 구현의 용이성 (이상적으로는 하나의 파일로, 외부 리소스가 거의 없거나 없음)
  • 난독 화를 위해 난독 화되지 않음 (크기에 대한 트레이드 오프는 괜찮습니다)
  • 자체 포함 된 예제 (양식 게시물없이 호출되는 경우 양식을 표시합니다)

이것은 거의 다음과 같습니다. PHP에서 이메일과 첨부 파일을 얻는 방법. 거의 대답 할 수있었습니다 PHP에 여러 첨부 파일이있는 이메일 컴파일, 그러나 실제로 코드를 표시하지 않습니다.

도움이 되었습니까?

해결책

그냥 재미를 위해 나는 그것을 두드릴 것이라고 생각했다. 경계 부분이 어떻게 작동하는지 완전히 이해하지 못했기 때문에 생각했던 것보다 까다로워졌습니다. 결국 나는 시작과 결말이 시작되었다는 것을 알아 냈습니다.

<?php
    if(isset($_POST['submit']))
    {
        //The form has been submitted, prep a nice thank you message
        $output = '<h1>Thanks for your file and message!</h1>';
        //Set the form flag to no display (cheap way!)
        $flags = 'style="display:none;"';

        //Deal with the email
        $to = 'me@example.com';
        $subject = 'a file for you';

        $message = strip_tags($_POST['message']);
        $attachment = chunk_split(base64_encode(file_get_contents($_FILES['file']['tmp_name'])));
        $filename = $_FILES['file']['name'];

        $boundary =md5(date('r', time())); 

        $headers = "From: webmaster@example.com\r\nReply-To: webmaster@example.com";
        $headers .= "\r\nMIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"_1_$boundary\"";

        $message="This is a multi-part message in MIME format.

--_1_$boundary
Content-Type: multipart/alternative; boundary=\"_2_$boundary\"

--_2_$boundary
Content-Type: text/plain; charset=\"iso-8859-1\"
Content-Transfer-Encoding: 7bit

$message

--_2_$boundary--
--_1_$boundary
Content-Type: application/octet-stream; name=\"$filename\" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment 

$attachment
--_1_$boundary--";

        mail($to, $subject, $message, $headers);
    }
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>MailFile</title>
</head>

<body>

<?php echo $output; ?>

<form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" <?php echo $flags;?>>
<p><label for="message">Message</label> <textarea name="message" id="message" cols="20" rows="8"></textarea></p>
<p><label for="file">File</label> <input type="file" name="file" id="file"></p>
<p><input type="submit" name="submit" id="submit" value="send"></p>
</form>
</body>
</html>

매우 베어 본은 실제로, 그리고 분명히 인라인 CSS를 사용하여 양식을 숨기는 것은 약간 저렴하며, 당신은 거의 확실히 사용자에게 조금 더 많은 피드백을 원할 것입니다! 또한, 나는 부정 행위와 응용 프로그램/옥켓-스트림을 사용하는 대신 파일의 실제 컨텐츠 유형이 무엇인지 알아내는 데 조금 더 많은 시간을 할애 할 것입니다. 그러나 그 부분은 매우 흥미 롭습니다.

다른 팁

이것의 조합 http://www.webcheatsheet.com/php/send_email_text_html_attachment.php#attachment

PHP 업로드 파일 예제가 작동합니다. Move_Uploaded_File을 사용하여 위조 폴더에서 이동하는 대신 파일 예제에서 업로드 예제에서 다음과 같이 열 수 있습니다.

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

어디 $tmp_file = $_FILES['userfile']['tmp_name'];

나머지 예제와 같은 첨부 파일로 보내십시오.

모두 하나의 파일 / 자체 포함 :

<? if(isset($_POST['submit'])){
//process and email
}else{
//display form
}
?>

위의 두 가지 예제를 기반으로 작업해야 할 작업을 얻는 빠른 운동이라고 생각합니다.

추신 : Apache가 PHP로 전달하기 전에 어딘가에 업로드해야합니다. 구성 파일에서 변경되지 않은 한 기본적으로 시스템의 임시 폴더입니다.

이 기사 "파일 첨부 파일로 PHP 기반 이메일 양식을 만드는 방법"단계별 지침을 제시하여 요구 사항을 달성하는 방법을 제시합니다.

인용하다:

이 기사에서는 파일 첨부 파일을 지원하는 PHP 기반 이메일 양식을 만드는 방법을 보여줍니다. 이 기사는 또한 업로드 된 파일의 유형과 크기를 검증하는 방법을 보여줍니다.

다음 단계로 구성됩니다.

  • 파일 업로드 상자가 포함 된 HTML 양식
  • PHP 스크립트에서 업로드 된 파일을 가져옵니다
  • 업로드 된 파일의 크기와 확장을 확인합니다
  • 업로드 된 파일을 복사하십시오
  • 이메일 보내기

전체 예제 코드를 다운로드 할 수 있습니다 여기

첨부 파일로 이메일에 파일을 추가하려면 ~ 할 것이다 서버에 간단히 저장해야합니다. 그러나 TMP 위치에 배치 한 다음 완료 한 후 삭제하는 것은 사소한 일입니다.

이메일, 젠드 메일 전자 메일 첨부 파일을 처리하기 위해 매우 사용하기 쉬운 인터페이스가 있습니다. 전체 Zend 프레임 워크가 설치된 상태에서 실행되지만 종속성을 위해 다른 모듈이 필요하지 않고 Zend_mail 라이브러리를 설치할 수 있다고 확신합니다.

zend_mail을 사용하면 첨부 파일이있는 이메일을 보내는 것만 큼 간단합니다.

$mail = new Zend_Mail();
$mail->setSubject("My Email with Attachment");
$mail->addTo("foo@bar.baz");
$mail->setBodyText("Look at the attachment");
$attachment = $mail->createAttachment(file_get_contents('/path/to/file'));
$mail->send();

전체 양식/이메일/첨부 파일을 수행하기 위해 1 파일 패키지를 찾고 있다면, 나는 보지 못했습니다. 그러나 개별 구성 요소는 확실히 이용 가능하고 조립하기 쉽습니다. 전체 무리의 가장 까다로운 것은 이메일 첨부 파일입니다. 위의 권장 사항은 매우 간단합니다.

나는 이것의 이메일 부분을 테스트하지 않았지만 (내 테스트 박스는 이메일을 보내지 않습니다) 작동한다고 생각합니다.

<?php
if ($_POST) {
$s = md5(rand());
mail('email@example.com', 'attachment', "--$s

{$_POST['m']}
--$s
Content-Type: application/octet-stream; name=\"f\"
Content-Transfer-Encoding: base64
Content-Disposition: attachment

".chunk_split(base64_encode(join(file($_FILES['f']['tmp_name']))))."
--$s--", "MIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"$s\"");
exit;
}
?>
<form method="post" enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'] ?>">
<textarea name="m"></textarea><br>
<input type="file" name="f"/><br>
<input type="submit">
</form>

배 :: mail_mime? 물론, 배 의존성 (min) 2 파일 (배 의존성을 제거하기 위해 편집하면 Main_Mime 자체 만)의 배 의존성이지만 잘 작동합니다. 또한 대부분의 서버에는 배가 어느 정도 설치되어 있으며 최상의 경우에는 배/메일과 배/메일 _mime이 있습니다. 동일한 기능을 제공하는 대부분의 다른 라이브러리에 대해서는 말할 수없는 것입니다.

PHP를 검토하는 것을 고려할 수도 있습니다 IMAP 확장. 조금 더 복잡하고 더 많은 설정이 필요하지만 (기본적으로 활성화되거나 설치되지 않음) Compilng에서 더 효율적이고 IMAP 기능 서버로 메시지를 보내야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top