Вложения в письмах

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

Отправка писем с вложениями — стандартная задача для веб-приложений. Хотя встроенная функция mail() позволяет это делать, ручное формирование заголовков (headers) и границ (boundaries) для файлов — процесс сложный и подверженный ошибкам. Поэтому в современной разработке чаще используют библиотеки вроде PHPMailer.

Основной метод для добавления файла — addAttachment($path, $name). Первый аргумент — это путь к файлу на сервере, а второй (необязательный) — имя, которое увидит получатель. Это позволяет переименовывать файлы «на лету».

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

Список тем

1. Компоненты письма

id: 39350_email_att_01_concept

Перед вами список элементов, которые являются компонентами email-сообщения в PHP. Распределите их по двум категориям: «Тело письма» (содержимое, которое видит получатель) и «Мета-данные» (служебная информация о письме). Обратите внимание, что тело письма может быть представлено в виде HTML или обычного текста, а мета-данные включают информацию, необходимую для доставки и отображения письма.

Перетяните элементы в соответствующие блоки
Тело письма
Мета-данные
HTML-разметка
Текст письма
Тема письма
Адрес отправителя
Вложение
Сообщения
Проверить
Показать подсказку

2. Метод добавления

id: 39350_email_att_02_syntax

Дополните фрагмент кода для отправки email с прикреплённым файлом. В коде используется библиотека PHPMailer для работы с электронной почтой. Вам нужно вызвать метод объекта $mail, который позволяет добавить файл-вложение к письму, и передать ему путь к файлу в виде строки. Путь к файлу указан в комментарии. Заполните пропуски так, чтобы документ был корректно прикреплён к письму.

Заполните пропуски
<?php
require 'vendor/autoload.php';

use PHPMailer\PHPMailer\PHPMailer;

$mail = new PHPMailer(true);

$mail->setFrom('sender@example.com', 'Отправитель');
$mail->addAddress('recipient@example.com', 'Получатель');

$mail->Subject = 'Письмо с документом';
$mail->Body = 'Во вложении находится документ';

// Прикрепите файл documents/contract.pdf
$mail->input1S(input2S);

$mail->send();
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Переименование файла

id: 39350_email_att_03_rename

В коде нужно правильно добавить вложение к email-сообщению с помощью метода addAttachment(). Файл с именем 'report_2023_final_v2.pdf' хранится в папке 'uploads' на сервере, но получатель письма должен увидеть его под более простым и понятным именем 'Report.pdf'. Используйте выпадающие списки, чтобы выбрать правильные аргументы для метода: первый должен указывать на реальное расположение файла, второй — на имя, которое будет отображаться в письме.

Нужно правильно расставить в пропуски предложенные варианты
<?php
$mail = new PHPMailer(true);

// Настройка параметров отправки
$mail->setFrom('sender@example.com');
$mail->addAddress('recipient@example.com');
$mail->Subject = 'Отчет за 2023 год';

// Добавление вложения с переименованием
$mail->addAttachment(input1S, input2S);

$mail->send();
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Порядок сборки

id: 39350_email_att_04_seq

Перед вами строки кода PHP для отправки письма с вложением с использованием библиотеки PHPMailer. Код представлен в перемешанном порядке. Восстановите правильную последовательность строк, чтобы получился рабочий скрипт отправки email. Учтите, что строка с подключением библиотеки должна быть первой, создание объекта - второй, а отправка - последней. Остальные строки (настройка отправителя, получателя и добавление вложения) можно расставить в любом порядке между созданием объекта и отправкой.

Расставьте строки в правильном порядке
$mail->addAddress('client@example.com', 'Иван Иванов');
$mail->setFrom('noreply@example.com', 'Отдел рассылок');
$mail->send();
$mail = new PHPMailer\PHPMailer\PHPMailer();
require 'vendor/autoload.php';
$mail->addAttachment('/путь/к/файлу/document.pdf', 'Документ.pdf');
Сообщения
Проверить
Показать подсказку

5. Несуществующий файл

id: 39350_email_att_05_predict

Проанализируйте представленный код отправки email с вложением через PHPMailer. В коде указан неверный путь к файлу для вложения. Определите, что произойдет при выполнении этого кода.

Выберите правильный вариант ответа
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);
try {
    $mail->isSMTP();
    $mail->Host = 'smtp.example.com';
    $mail->SMTPAuth = true;
    $mail->Username = 'user@example.com';
    $mail->Password = 'password';
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port = 587;

    $mail->setFrom('from@example.com', 'Отправитель');
    $mail->addAddress('to@example.com', 'Получатель');
    $mail->Subject = 'Тестовое письмо с вложением';
    $mail->Body = 'Это тестовое сообщение';

    // Указан неверный путь к файлу
    $mail->addAttachment('/var/www/nonexistent_file.pdf');

    $mail->send();
    echo 'Письмо успешно отправлено';
} catch (Exception $e) {
    echo "Письмо не отправлено. Ошибка: {$mail->ErrorInfo}";
}
?>
Сообщения
Проверить
Показать подсказку

6. Исправление пути

id: 39350_email_att_06_error

В приведённом фрагменте PHP-кода для отправки email с вложением допущена ошибка в указании пути к прикрепляемому файлу. Используется относительный путь, который может не работать в зависимости от того, откуда запускается скрипт. Найдите и исправьте строку, чтобы путь к файлу стал абсолютным и надёжно работал независимо от точки запуска скрипта.

Найдите ошибку и исправьте
<?php
use PHPMailer\PHPMailer\PHPMailer;
 
$mail = new PHPMailer();
$mail->setFrom('sender@example.com');
$mail->addAddress('recipient@example.com');
$mail->Subject = 'Отчёт за месяц';
$mail->addAttachment('uploads/report.pdf');
$mail->send();
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

7. Отправка картинки

id: 39350_email_att_07_build

Соберите из предложенных строк PHP-код для отправки электронного письма с прикреплённым изображением 'logo.png' с помощью библиотеки PHPMailer. Расположите строки в следующем логическом порядке: открывающий тег PHP, подключение класса PHPMailer через оператор use, создание объекта почтового сообщения, указание адреса получателя, установка темы письма, добавление изображения как вложения методом addAttachment(), отправка письма. Некоторые строки являются лишними и не должны входить в решение.

Перетяните в правильном порядке строки из одного блока в другой
<?php
use PHPMailer\PHPMailer\PHPMailer;
$mail = new PHPMailer();
$mail->addAddress('user@example.com');
$mail->Subject = 'Логотип компании';
$mail->addAttachment('logo.png');
$mail->send();
$mail->Attachment = 'logo.png';
attach($mail, 'logo.png');
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

PHP: запуск кода в браузере

id: 39350_compiler
🐘
Запустить тренажёр (PHP)
НайтиКурс.Ру