Теперь разберёмся с отправкой письма с вложением (вложениями) средствами WordPress.
PHPMailer — это такой класс, который позволяет очень удобно (на мой взгляд) отправлять емайлы. Подробное описание класса не было целью этого поста, поэтому я лишь покажу, как нужно приклеплять вложения посредством кода PHP и приведу подробный пример.
Итак, чтобы добавить вложение к письму, используйте этот паттерн:
$phpmailer->AddAttachment('абсолютный путь к файлу на хостинге', 'название файла');
На примере плагинов:
$plugin_name = 'true-instagram-widget'; $phpmailer->AddAttachment(getcwd() . '/plugins/' . $plugin_name . '.zip', $plugin_name . '.zip'); // я добавил только одно вложение, но вы можете добавить и больше, продублировав вторую строку
И теперь, чтобы уже всё было понятно окончательно, вот вам полный пример отправки письма:
global $phpmailer; if ( !is_object( $phpmailer ) || !is_a( $phpmailer, 'PHPMailer' ) ) { // проверяем, существует ли объект $phpmailer и принадлежит ли он классу PHPMailer // если нет, то подключаем необходимые файлы с классами и создаём новый объект require_once ABSPATH . WPINC . '/class-phpmailer.php'; require_once ABSPATH . WPINC . '/class-smtp.php'; $phpmailer = new PHPMailer( true ); } $phpmailer->ClearAttachments(); // если в объекте уже содержатся вложения, очищаем их $phpmailer->ClearCustomHeaders(); // то же самое касается заголовков письма $phpmailer->ClearReplyTos(); $phpmailer->From = 'true@truemisha.ru'; // от кого, Email $phpmailer->FromName = 'Миша Рудрастых'; // от кого, Имя $phpmailer->Subject = 'Плагин: ' . $plugin_display_name; // тема $phpmailer->SingleTo = true; // это означает, что если получателей несколько, то отображаться будет всё равно только один (если непонятно, спросите, я вам подробно объясню в комментариях) $phpmailer->ContentType = 'text/html'; // тип содержимого письма $phpmailer->IsHTML( true ); $phpmailer->CharSet = 'utf-8'; // кодировка письма $phpmailer->ClearAllRecipients(); // очищаем всех получателей $phpmailer->AddAddress( $_POST['email'] ); // добавляем новый адрес получателя $phpmailer->Body = '<p>Благодарю вас за покупку плагина (архив приложен к письму).</p><p>Если у вас возникнут какие-либо вопросы, <a href="https://misha.agency/contacts">свяжитесь со мной</a> любым удобным вам способом.</p>'; $phpmailer->AddAttachment(getcwd() . '/plugins/' . $plugin_name . '.zip', $plugin_name . '.zip'); // добавляем вложение $phpmailer->Send(); // отправка письма
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
А, Миша, спасибо. Хех, я настолько тебя завалил вопросами, что ты написал статью. :-)
Пожалуйста :)
а стандартная оберька впшная разве не умеет файлы отправлять?
wp_mail()? Умеет, просто пост не про неё, да и добавляет вложения она как раз способом, описанным в этой статье.