2013-12-13 2 views
1

첨부 파일이있는 전자 메일을 보내는 PHP 코드가 있지만 원하는 것은 이름, 연락처 번호 등의 모든 데이터를 테이블에 넣는 것입니다. <table>을 사용해 보았지만 전자 메일은 여전히 ​​일반 텍스트입니다. 누군가 그것을 만드는 방법을 도와 줄 수 있습니까?html 형식의 첨부 파일이있는 전자 메일 보내기

이 내 PHP 코드 : PHP 복잡한 이메일 용

<?php 
$cname = $_POST['Name']; 
$cnumber = $_POST['Tel']; 
$cemail = $_POST['emailadd']; 
$cmess = $_POST['contactmess']; 
$index = 'index.php'; 

move_uploaded_file($_FILES["attachment"]["tmp_name"] , "/files/upload/" . $_FILES["attachment"]["name"]); 

$to = '[email protected]'; 
$subject = 'Careers Inquiry'; 
$random_hash = md5(date('r', time())); 
$headers = "From: ". $cemail ."\r\nReply-To:". $cemail; 
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""; 
$headers .= "Content-Type: text/html; charset='iso-8859-1'"; 
$attachment = chunk_split(base64_encode(file_get_contents("/files/upload/" .$_FILES["attachment"]["name"]))); 

ob_start(); 
?> 
--PHP-mixed-`<?php echo $random_hash; ?> ` 
Content-Type: multipart/alternative; boundary="PHP-alt-`<?php echo $random_hash; ?>`" 

--PHP-alt-`<?php echo $random_hash; ?>` 
Content-Type: text/plain; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit 

--PHP-alt-`<?php echo $random_hash; ?>` 
Content-Type: text/html; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit 

<html> 
<body> 
    <table> 
     <tr><td>Name: </td><td><?php echo $cname; ?></td></tr> 
     <tr><td>Contact Number: </td><td><?php echo $cnumber; ?></td></tr> 
     <tr><td>Email Address: </td><td><?php echo $cemail; ?></td></tr> 
     <tr><td>Message: </td><td><?php echo $cmess; ?></td></tr> 
    </table> 
</body> 
</html> 

--PHP-alt-`<?php echo $random_hash; ?>`-- 

--PHP-mixed-`<?php echo $random_hash; ?>` 
Content-Type: application/octet-stream; name="`<?php echo $_FILES["attachment"]["name"];?>`" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment 

`<?php echo $attachment; ?>` 
--PHP-mixed-`<?php echo $random_hash; ?>`-- 

<?php 
$message = ob_get_clean(); 
$mail_sent = @mail($to, $subject, $message, $headers); 
unlink('/files/upload/' . $_FILES["attachment"]["name"]); 
echo $mail_sent ? header('Location: '. $index): '<script type="text/javascript">  alert("Sorry, service temporary unavailable."); </script>'; 
?> 
+0

[바퀴를 다시 만들지 마십시오] (https://github.com/Synchro/PHPMailer). –

답변

2

PHPMailer 클래스를 체크 아웃.

PHPMailer의 기능을 사용하여 복잡한 전자 메일 (예 : HTML 형식)을 보내는 것이 훨씬 쉽습니다.

설치 및 사용이 쉽습니다. 링크 된 페이지의 맨 아래에있는 예제를보십시오.

0

첫번째로, 당신은 같은 라이브러리를 선택할 수있는 경우 :

위의 모든는 학습 곡선의 비트 시작해야 그러나 장기적으로 그들은 당신을 대단히 도울 것입니다. 메일 헤더와 경계를 올바르게 잡아서 스팸 필터가 메일을 수신하지 못하게하는 것은 매우 어려운 일이며 다른 사람들은 이미 이러한 문제를 해결했습니다.

그러나 메일을 수동으로 작성해야하는 경우.

당신의 헤더를 구성 할 때 당신이 자신의 라인에 각각 분할하는 경우 읽고 당신이 \r\n

일예로 끝나는 수 있도록하는 것이 더 쉬울 수 있습니다 마지막 두 헤더 떨어져 \r\n의 몇 가지를 놓친 것 같은

$headers = "From: $cemail\r\n"; 
$headers .= "Reply-To: $cemail\r\n"; 
$headers .= "Content-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"\r\n"; 

는 것 같습니다.

또한 Content-Type 헤더를 복제했습니다. 두 번째 방법은 각 경계에 Content-Type을 지정할 때 필요하지 않습니다.

charset을 따옴표로 묶지 마십시오.

I.E.

charset='iso-8859-1'charset="iso-8859-1"

그것은 사람들이 당신의 문제입니다 가능

charset=iso-8859-1

이어야한다.

메시지 린트 (http://www.apps.ietf.org/content/message-lint)를 통해 출력을 실행해도 위의 값 이외의 값은 표시되지 않습니다.

관련 문제