Отправка email с вложениями при помощи PHPMailer в WordPress

Мне часто задают вопросы относительно того, как работает мой функционал продажи плагинов. Секретов у меня нет и я уже описал, как настроить на своём сайте систему оплаты Яндекса с автоматическими уведомлениями.

Теперь разберёмся с отправкой письма с вложением (вложениями) средствами WordPress.

вложение в программе AirMail

PHPMailer

PHPMailer — это такой класс, который позволяет очень удобно (на мой взгляд) отправлять емайлы. Подробное описание класса не было целью этого поста, поэтому я лишь покажу, как нужно приклеплять вложения посредством кода PHP и приведу подробный пример.

Итак, чтобы добавить вложение к письму, используйте этот паттерн:

$phpmailer->AddAttachment('абсолютный путь к файлу на хостинге', 'название файла');

На примере плагинов:

1
2
3
$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://truemisha.ru/contacts">свяжитесь со мной</a> любым удобным вам способом.</p>';
$phpmailer->AddAttachment(getcwd() . '/plugins/' . $plugin_name . '.zip', $plugin_name . '.zip'); // добавляем вложение
$phpmailer->Send(); // отправка письма
Подпишитесь, чтобы раз в неделю получать свежие статьи с блога по email.

Смотрите также

Комментарии 4

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Миша: Да, точно)

  • Владимир: и на третьей строке не хватает скобки ) закрывающей if :)

  • Миша: Добрый вечер! Рекомендую получить ID пользователя через функцию get_current_user_id().

  • Дмитрий: Миша, подскажите пожалуйста, я использую такой редирект, но он не срабатывает: add_action( 'template_redirect', funct...

  • Миша: Ну как не определена - это аргумент функции. Или я просто вас не до конца понимаю.