Как да блокирате и запишете всички изходящи имейли от WordPress

WordPress изпраща много имейли и понякога може да стане наистина досадно, особено ако управлявате няколко сайта.

През повечето време това е добре и трябва да бъдете уведомени, когато се случи нещо, за да проверите какво става.

Има случаи, в които искате да изключите всички изходящи имейли.

Например: Трябва да отстранявате трудно за намиране грешка. Създали сте тестов WordPress сайт с реални клиентски данни и нямахте време да изтриете потребителските данни, или пък да промените имейлите ми, така че хората да не получават случайни имейли.

По време на отстраняването на грешки можете да получите много имейли. За разработчика е добре да разполага с много информация, за да определи точния проблем, но ако вашият клиент получи 20 тестови имейла в рамките на един час, което може да не е много приятно преживяване.

Преди няколко години проучвах за приставки за CRM WordPress. Някой се клиентите на този плъгин се оплака, че е пробвал плъгина на тестов сайт и неговите клиенти са получили имейли, че са били добавени в някаква система. Плъгинът създавал потребител, което е логично. WordPress или друг плъгин изпращал имейл. Когато тези имейли са очакване е ОК, но в повечето случаи не е професионално.

<?php
/**
 * Block & log all outgoing WordPress emails.
 * @author Svetoslav Marinov (SLAVI) | http://orbisius.com
 * @copyright all rights reserved
 * @license GPL
 */

// Exit if access directly or not used on stg sites
if (!defined('ABSPATH')
        //|| (stripos(PHP_SAPI, 'cli') !== false) // uncomment if you want emails to be sent out when wp-cli is doing some stuff.
        || (
        	empty($_SERVER['SERVER_NAME'])
			||
            ! preg_match('#client-live-site\.com#si', $_SERVER['SERVER_NAME'])
        )
) {
	return;
}

// replace standard WordPress wp_mail() so nobody else can do it.
if (!function_exists('wp_mail')) {
	/**
	 * Logs wp_mail data
	 * @param $to
	 * @param $subject
	 * @param $message
	 * @param string $headers
	 * @param array $attachments
	 */
	function wp_mail( $to, $subject, $message, $headers = '', $attachments = array() ) {
		// silence
		$file = dirname(ABSPATH) . '/data/emails/outgoing' . date('/Y/m') . '/.ht_mail_' . date('Y_m_d') . '.log';
		$file = str_replace('\\', '/', $file);
		$r = '#/(htdocs|www)#si';

		// we want the logs to be outside of doc root
		if (preg_match($r, $file)) {
			$file = preg_replace($r, '', $file);
		}

		$file_dir = dirname($file);

		if (!is_dir($file_dir)) {
			mkdir($file_dir, 0711, 1);
		}

		$buff_arr = [
			'to' => $to,
			'subject' => $subject,
			'message' => $message,
			'headers' => $headers,
			'attachments' => $attachments,
			'date' => date('r'),
			'backtrace' => debug_backtrace(), // who called the wp_mail?
		];

		ob_start();
		//$buff = var_export($buff_arr, 1); // may crash if circular references.
		var_dump($buff_arr);
		$buff = ob_get_clean();
		$buff .= "\n";
		$buff .= str_repeat('-', 50);
		$buff .= "\n";
		$buff .= "\n\n";
		file_put_contents($file, $buff, LOCK_EX | FILE_APPEND);
	}
}

// test if it works.
add_action('init', function () {
	if (isset($_REQUEST['qs_block_emails'])) {
		wp_mail('aaa', 'bbb', 'cccc');
	}
});
Go359 - Oнлайн Магазини

Go359.com е платформа за електронна търговия, с която можете да си създадете безплатен електронен магазин бързо и лесно.

This entry has 0 replies

Comments open

Безплатен онлайн магазин от Go359.com