2013-12-01 9 views
-1

У меня есть код, который мне нравится. Он работает отлично, на протяжении многих лет на любом сервере я его надел. Мне нравится, что это всего лишь несколько строк кода, я могу отправить электронное письмо кому-либо, они всегда его получают, и мне не нужно беспокоиться о SMTP-пользователе/​​проходе.Как добавить вложение для этого PHP mail() кода?

Для моих целей мне не нужны сложные сценарии. Я загрузил и установил все почтовые программы (PHPmailer), но по сравнению с моим кодом из ~ 10 строк, который делает для меня то же самое, что и 100 000 строк кода, но не работает, потому что в zip-файлах с сайтов отсутствуют файлы, файлы находятся в неправильных папках или некоторые функции «отключены» по соображениям безопасности, где ни один из примеров не работает, что означает, что я должен копаться, пробираться по всему коду и исправить примеры и т. д.

Я надеялся, что есть более простое решение. Код, который у меня есть, выглядит следующим образом:

<? 
$to = "[email protected]"; 
$from = "[email protected]"; 
$email_subject = "Test"; 
$email_message .= "Hello, \n\n"; 

$headers = 'From: '.$from."\r\n". 'Reply-To: '.$to."\r\n" . 'X-Mailer: PHP/' . phpversion(); 
@mail($to, $email_subject, $email_message, $headers); 
?> 

Это шесть строк кода.

Я понимаю, что я мог бы провести следующие 18 часов поиска Google для этого ответа, но я подумал, что если это не будет слишком много хлопот, чтобы прийти сюда и задать этот вопрос:

Скажем, у меня была точно те же 6 строк кода, но мне также необходимо было прикрепить файл, который был расположен в той же папке, что и файл PHP, для отправки электронной почты.

$file = dirname(__FILE__).'doc.pdf'; 

Есть быстрый, экономичный способ изменить исходные шесть строк кода, который работает, чтобы отправить сообщение, необходимо добавить в файл PDF в качестве вложения?

+0

Смотрите также http://stackoverflow.com/questions/1498219/how-to-send-email-attachments-in-php-with-attachments?rq= 1 –

+0

Надеюсь, меня могут простить за то, что я задаюсь вопросом, является ли это [повторный запрос этого закрытого вопроса] (http://stackoverflow.com/questions/20307247/attach-small-pdf-to-email-with-phps- mail), но с совершенно новой учетной записи пользователя. Я добавил ссылку на то, как сделать то, что вы хотите по другому вопросу: вам нужно вручную создать все границы MIME и кодировку base64. – halfer

ответ

0

Я проверил все ответы, размещенные здесь в этом вопросе, но ни один из них не является таким хорошим.

Это будет работать для вас:

<? 

// fill in the basics here 

$to = '[email protected]'; 
$from = '[email protected]'; 
$subject = 'Top Secret'; 
$message = 'Emails R Us'; 

// THIS is where you reference the file(s) to be attached: the first part is the  location and file name, the next part is the title in the email for the attachment; you can have more than one file (separate by comma). avoid large files (over 1MB) 

$attachments = array(
'basic.pdf' => 'The File Title', // can be any extension 
); 

$headers = array(
'Reply-to' => '[email protected]', 
'CC' => '[email protected]' 
'BCC' => '[email protected]' 
    ); 

// end basics 

// now the function that assembles the email and sends it 


function mailAttachments($to, $from, $subject, $message, $attachments = array(), $headers = array(), $additional_parameters = '') { 
$headers['From'] = $from; 
$mime_boundary = '==MIME_BOUNDARY_' . md5(time()); 
$headers['MIME-Version'] = '1.0'; 
$headers['Content-Type'] = 'multipart/mixed; boundary="' . $mime_boundary . '"'; 
$headers_string = ''; 
foreach($headers as $header_name => $header_value) { 
    if(!empty($headers_string)) { 
     $headers_string .= "\r\n"; 
    } 
    $headers_string .= $header_name . ': ' . $header_value; 
} 

$message_string = '--' . $mime_boundary; 
$message_string .= "\r\n"; 
$message_string .= 'Content-Type: text/plain; charset="iso-8859-1"'; 
$message_string .= "\r\n"; 
$message_string .= 'Content-Transfer-Encoding: 7bit'; 
$message_string .= "\r\n"; 
$message_string .= "\r\n"; 
$message_string .= $message; 
$message_string .= "\r\n"; 
$message_string .= "\r\n"; 

foreach($attachments as $local_filename => $attachment_filename) { 
    if(is_file($local_filename)) { 
     $message_string .= '--' . $mime_boundary; 
     $message_string .= "\r\n"; 
     $message_string .= 'Content-Type: application/octet-stream;  name="' . $attachment_filename . '"'; 
     $message_string .= "\r\n"; 
     $message_string .= 'Content-Description: ' . $attachment_filename; 
     $message_string .= "\r\n"; 

     $fp = @fopen($local_filename, 'rb'); 
     $file_size = filesize($local_filename); 
     $data = @fread($fp, $file_size); 
     $data = chunk_split(base64_encode($data)); 

     $message_string .= 'Content-Disposition: attachment; filename="' . $attachment_filename . '"; size=' . $file_size. ';'; 
     $message_string .= "\r\n"; 
     $message_string .= 'Content-Transfer-Encoding: base64'; 
     $message_string .= "\r\n\r\n"; 
     $message_string .= $data; 
     $message_string .= "\r\n\r\n"; 
    } 
} 


$message_string .= '--' . $mime_boundary . '--'; 


return mail($to, $subject, $message_string, $headers_string, $additional_parameters); 
} 

// end function 

?> 
Смежные вопросы