PHP mail(): Как прикрепить pdf-файл к письму?

1006
28 мая 2017, 23:05

Нужно, чтобы вместо message прикреплялся готовый файл с сервера и отправлялся mail(). Или есть другое решение ?

Answer 1

Пример 1 демонстрирует работу с библиотекой PHPMailer. Пример 2 использует mail() функцию напрямую. Пользуйтесь нужным вам примером

Пример 1: как использовать PHPMailer:

PHPMailer - полнофункциональный модуль создания и передачи электронной почты для PHP. Метод AddAttachment: $mail->AddAttachment("files/file1.pdf"); позволяет прикреплять файлы.

<?php
require_once('../class.phpmailer.php');
$mail             = new PHPMailer(); // По умолчанию использует php "mail ()"
$body             = file_get_contents('contents.html');
$body             = eregi_replace("[\]",'',$body);
$mail->AddReplyTo("name@yourdomain.com","First Last");
$mail->SetFrom('name@yourdomain.com', 'First Last');
$mail->AddReplyTo("name@yourdomain.com","First Last");
$address = "whoto@otherdomain.com";
$mail->AddAddress($address, "John Doe");
$mail->Subject    = "PHPMailer Test Subject via mail(), basic";
$mail->AltBody    = "Чтобы просмотреть сообщение, используйте HTML-совместимый просмотрщик электронной почты!"; // optional, Закомментировать и протестировать.
$mail->MsgHTML($body);
$mail->AddAttachment("files/file1.pdf"); // pdf file path
$mail->AddAttachment("files/fileթ.pdf"); // pdf file path
if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}
?>

Еще одна популярная библиотека Swiftmailer

Пример 2: Использует mail() функцию напрямую:

$name        = "Название здесь идет";
$email       = "someone@gmail.com";
$to          = "$name <$email>";
$from        = "John Doe ";
$subject     = "тема ";
$mainMessage = "Привет,я сообщение с pdf файлом";
$fileatt     = "files/test.pdf"; // Расположение файла
$fileatttype = "application/pdf";
$fileattname = "newName.pdf"; //Имя, которое вы хотите использовать для отправки, или вы можете использовать то же имя
$headers     = "From: $from";
// Открываем и читаем файл в переменную.
$file = fopen($fileatt, 'rb');
$data = fread($file, filesize($fileatt));
fclose($file);
// Это прикрепляет файл
$semi_rand     = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
$headers      .= "\nMIME-Version: 1.0\n" .
  "Content-Type: multipart/mixed;\n" .
  " boundary=\"{$mime_boundary}\"";
  $message = "Это multi-part сообщение в формате MIME․\n\n" .
  "-{$mime_boundary}\n" .
  "Content-Type: text/plain; charset=\"iso-8859-1\n" .
  "Content-Transfer-Encoding: 7bit\n\n" .
  $mainMessage  . "\n\n";
$data = chunk_split(base64_encode($data));
$message .= "--{$mime_boundary}\n" .
  "Content-Type: {$fileatttype};\n" .
  " name=\"{$fileattname}\"\n" .
  "Content-Disposition: attachment;\n" .
  " filename=\"{$fileattname}\"\n" .
  "Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" .
 "-{$mime_boundary}-\n";
// Отправить письмо
if(mail($to, $subject, $message, $headers))
{
    echo "Письмо отправлено.";
} else {
    echo "При отправке почты произошла ошибка.";
}
READ ALSO
Не работает своя функция в opencart 2.0

Не работает своя функция в opencart 2.0

подскажите почему не работает своя функция в opecart 20 делаю так в контролере:

533
Php работа с базами данных [требует правки]

Php работа с базами данных [требует правки]

Помогите, пожалуйста, написать скрипт, формирующий и обрабатывающий блок опроса мнения посетителей сайтаДля формирования блока использовать...

363
Проблемы с выводом переменной $_COOKIE[&#39;id&#39;] [требует правки]

Проблемы с выводом переменной $_COOKIE['id'] [требует правки]

в переменную $_COOKIE['id'] записан id пользователя например 8, при выводе он выводит 08, при попытке обрезать строку через substr($_COOKIE['id'], 1, 1) или substr($_COOKIE['id'],...

256
&ldquo;Портативное&rdquo; PHP или Python/Django web приложение

“Портативное” PHP или Python/Django web приложение

Существует ли возможность сделать PHP или Python/Django приложение переносным те

348