Для начала давайте расмотрим, самый распространенный способ отправки почты, при помощи функции mail():
<?php $To = '[email protected]'; $Subject = 'Тема письма'; $Message = 'Текс сообщения'; $Headers = 'From: [email protected] \r\n' . 'Reply-To: [email protected] \r\n' . 'Content-type: text/html; charset=UTF-8 \r\n'; mail($To, $Subject, $Message, $Headers); ?>
А теперь давайте попробуем отослать сообщение с прикреплением. В принцепе идея та же, единственное что, необходимо поменять хидер письма:
<?php $b = 0; $mail_attached = ""; $boundary = md5(time()); $fp = fopen($file_name,"rb"); $content[$b] = fread($fp,filesize($file_name)); $mail_attached .= "--" . $boundary . "\n" . "Content-Type: binary/octet-stream; name=\"basename($file_name)\" \n" . "Content-Transfer-Encoding: base64 \n" . "Content-Disposition: inline; filename=\"basename($file_name)\" \n\n" . chunk_split(base64_encode($content[$b]))." \n"; $b++; fclose($fp); $mail_attached .= "--".$boundary." \n"; $add_header = "MIME-Version: 1.0\n". "Content-Type: multipart/mixed; boundary=\"$boundary\"; Message-ID: <".md5($email_from).">"; $mail_content = "--".$boundary."\n". "Content-Type: text/plain; charset=\"UTF-8\"\n". "Content-Transfer-Encoding: 8bit \n\n". $msg." \n\n". $mail_attached; mail($email_address, $subject, $mail_content, "From: ".$email_from."\nCC: ".$email_cc."\n BCC: ".$email_bcc ."\n Errors-To: ".$email_from."\n".$add_header); ?>
Первое, что мы делаем, это создаем уникальную запись для нашего письма, которую обычно называют граничной(boundary) записью. Данные нашего файла должны находиться между этой граничной записью, это поможет почтовой программе идентифицировать кусочки. Для создания граничной записи я использую md5 от текущего времени.
Если же для отправки писем ваш SMTP сервер требует аутентификацию, то прийдеться воспользоваться PEAR Mail Package:
<?php include_once("Mail.php"); $From = "Имя отправителя <[email protected]>"; $To = "Имя получателя <[email protected]>"; $Subject = "Тема письма"; $Message = "Текст сообщение"; $Host = "mail.yourdomain.com"; $Username = "smtp_username"; $Password = "smtp_password"; // Do not change bellow $Headers = array ('From' => $From, 'To' => $To, 'Subject' => $Subject); $SMTP = Mail::factory('smtp', array ('host' => $Host, 'auth' => true, 'username' => $Username, 'password' => $Password)); $mail = $SMTP->send($To, $Headers, $Message); if (PEAR::isError($mail)){ echo($mail->getMessage()); } else { echo("Email Message sent!"); } ?>