2011-03-31 1 views
2

나는 이메일을 보내기 위해 PHP의 내장 메일 기능을 사용하고 있습니다. 지금까지 필자는 다른 예제를보고 필자가 필요하다고 생각하는 것을 제거함으로써 많은 것을 성취했습니다.인라인 이미지를 사용하여 PHP로 이메일 보내기

인라인 이미지가 포함 된 이메일을 보내는 현재 코드는 다음과 같습니다. 콘텐츠가 또는 (이 생략) 내 데이터베이스로부터 값으로

function sendEmail($to, $subject, $htmlmessage, $inline_images = array()){ 
    define('RN', "\n"); 
    /* define mime boundaries */ 
    $mime_boundary_mix = "_mix_" . md5(time()); 

    /* set headers */ 
    $headers = "From: [email protected]" . RN; 
    $headers .= "Reply-To: [email protected]" . RN; 
    $headers .= "Return-Path: [email protected]" . RN; 
    $headers .= "Message-ID: <".time()."[email protected]".$_SERVER['SERVER_NAME'].">" . RN; 
    $headers .= "X-Mailer: PHP v".phpversion() . RN; 

    $headers .= "Mime-Version: 1.0" . RN; 
    $headers .= "Content-Type: multipart/mixed;" . RN; 
    $headers .= " boundary=\"{$mime_boundary_mix}\""; 

    /* start email body with mime_boundary */ 
    $msg = "--{$mime_boundary_mix}" . RN; 
    /* include html */ 
    $msg .= "Content-Type: text/html; charset=\"iso-8859-15\"". RN; 
    $msg .= "Content-Transfer-Encoding: 8bit". RN . RN; 
    $msg .= $htmlmessage . RN; 

    /* check if there are inline images */ 
    if(count($inline_images) > 0) { 
     foreach($inline_images as $image) { 
     $path_to_image = $image['path']; 
     $image_filename = basename($path_to_image); 
     $image_type = filetype($path_to_image); 

     $file_handler = fopen($path_to_image, 'rb'); 
     $image_data = chunk_split(base64_encode(fread($file_handler, filesize($path_to_image)))); 
     fclose($file_handler); 

     /* start mime boundary */ 
     $msg .= "--{$mime_boundary_mix}" . RN; 
     /* add image data */ 
     $msg .= "Content-Type: {" . image_type_to_mime_type (exif_imagetype($path_to_image)) . "};" . RN; 
     $msg .= " name=\"{$image_filename}\"" . RN; 
     $msg .= "Content-Disposition: inline;" . RN; 
     $msg .= " filename=\"{$image_filename}\"" . RN; 
     $msg .= "Content-Transfer-Encoding: base64" . RN . RN; 
     $msg .= $image_data . RN . RN; 

     } 
     /* end mime boundary */ 
     $msg .= "--{$mime_boundary_mix}--" . RN; 

    } 
    /* end mime boundary */ 
    $msg .= "--{$mime_boundary_mix}--" . RN; 

    return mail($to, $subject, $msg, $headers); 
} 

$ inline_images 교체 일부 자리를 가지고 있지 않을 수있는 템플릿을 이용하여 생성하는 단계와 같은 이미지 패스 항목을 포함하는 배열이다 : 배열 ([0] => 배열 ('경로'=> 'myimage.png')) (내가 잘못하지 않았지만 중요하지 않은 경우)

누구든지이 코드를 사용하는 이유는 무엇입니까? 이 전자 메일에 첨부 파일 아이콘을 표시하고 gmail에서 경고를 표시하는 이유 : 모든 이미지를 표시하고 허용 할 때 표시되지 않습니까? 몇 가지 질문이 있습니다 : - Outlook에서이 전자 메일을 받으면 제대로 작동하지만 가능하면 클립 클립 아이콘을 숨기고 싶습니다. 실제로는 첨부 파일이 아닌 포함 된 이미지입니다. - Gmail에서 전자 메일의 모든 이미지 대신 첨부 파일 및 공백 (깨진 이미지 아이콘)으로 이미지가있는 전자 메일을받습니다. 어떻게 수정해야합니까? GMail은 먼저 이미지를 허용할지 묻는 메시지를 표시하지만 빈칸이 나타나면 허용합니다. Gmail의 첨부 파일로 이미지를 숨길 수 있습니까? - 또한 Office Outlook Web Access에서 전자 메일을 보았습니다. Office Outlook Web Access는 GMail에서와 동일한 방식으로 전자 메일을 표시했으나 이미지는 표시되지 않지만 첨부 파일로만 보았습니다.

아무도 도와 줄 수 있습니까? 자세한 내용이 필요하면 문의하십시오.

답변

0

phpmailer 또는 switmailer와 같은 라이브러리를 사용할 수없는 이유는 무엇입니까? 그들은 html 메일을 완벽하게 지원합니다. 또한 모든 헤더를 작성할 필요가 없습니다.

+0

나 자신이 PEAR과 같은 것을 선택할 것이지만 그것은 내 웹 호스트에 있지 않으며 웹 호스트를 교환 할 수있는 위치에 있지 않습니다. – Cornelis

+0

메일 링을 위해 PEAR을 사용하지 않았습니다. 왜 당신은 웹 호스트를 교환해야합니까? 외부 종속성없이이 라이브러리를 간단하게 사용할 수 있습니다. – Shameer