File: /home/pewnabryka.pl/public_html/wp-content/plugins/CyberSMTP/includes/class-mailer.php
<?php
if (!defined('ABSPATH')) {
exit;
}
require_once __DIR__ . '/class-email-logger.php';
use PHPMailer\PHPMailer\PHPMailer;
class CyberSMTP_Mailer {
protected $provider;
protected $logger;
protected $last_error = '';
protected $debug_log;
protected static $phpmailer_hooked = false;
public function __construct() {
$this->debug_log = __DIR__ . '/../cybersmtp-debug.log';
$settings = get_option('cybersmtp_smtp_settings', array());
$provider_key = $settings['provider'] ?? 'smtp';
$provider_class = [
'smtp' => 'CyberSMTP_Provider_SMTP',
'ses' => 'CyberSMTP_Provider_SES',
'sendgrid' => 'CyberSMTP_Provider_SendGrid',
'mailgun' => 'CyberSMTP_Provider_Mailgun',
'brevo' => 'CyberSMTP_Provider_Brevo',
][$provider_key] ?? 'CyberSMTP_Provider_SMTP';
if (!class_exists($provider_class)) {
require_once __DIR__ . '/providers/class-provider-' . strtolower($provider_key) . '.php';
}
$this->provider = new $provider_class($settings);
$this->logger = new CyberSMTP_Email_Logger();
if (!self::$phpmailer_hooked) {
add_action('phpmailer_init', array($this, 'handle_phpmailer_init'));
add_action('phpmailer_exception', array($this, 'handle_phpmailer_exception'));
self::$phpmailer_hooked = true;
}
add_action('admin_notices', array($this, 'show_error_notice'));
}
public function handle_phpmailer_init($phpmailer) {
file_put_contents($this->debug_log, "phpmailer_init FIRED\n", FILE_APPEND);
// Log email details
$to = $phpmailer->getToAddresses();
$to_emails = array_map(function($item) { return $item[0]; }, $to);
$subject = $phpmailer->Subject;
$body = $phpmailer->Body;
$headers = $phpmailer->getCustomHeaders();
$settings = get_option('cybersmtp_smtp_settings', array());
$provider = $settings['provider'] ?? 'smtp';
$log_data = array(
'to_email' => implode(',', $to_emails),
'subject' => $subject,
'body' => $body,
'headers' => maybe_serialize($headers),
'provider' => $provider,
'status' => 'sent', // Assume sent unless error is caught elsewhere
'response_data' => '',
);
file_put_contents($this->debug_log, "phpmailer_init log_email: " . print_r($log_data, true) . "\n", FILE_APPEND);
$this->logger->log_email($log_data);
}
public function handle_phpmailer_exception($exception) {
file_put_contents($this->debug_log, "PHPMailer Exception: " . $exception->getMessage() . "\n", FILE_APPEND);
$this->last_error = $exception->getMessage();
}
public function show_error_notice() {
if (!empty($this->last_error)) {
echo '<div class="notice notice-error"><p>CyberSMTP Error: ' . esc_html($this->last_error) . '</p></div>';
$this->last_error = '';
}
}
public function send_test_email($to) {
file_put_contents($this->debug_log, "send_test_email called: $to\n", FILE_APPEND);
$subject = 'CyberSMTP Test Email';
$message = 'This is a test email sent from CyberSMTP.';
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail($to, $subject, $message, $headers);
}
public function send_via_provider($email_data) {
return $this->provider->send($email_data);
}
// Add methods for sending, configuring, and testing SMTP
}