Ayant un WordPress sur 1and1 j’ai été confronté à un « out of memory » sur le fichier class-phpmailer.php
à cause d’un appel AJAX d’un formulaire créé avec GuiForm. Je ne peux pas faire grand chose côté serveur à cause de l’hébergement partagé… Donc j’ai fouillé comment contourner le problème.
Il va s’agir de modifier le fichier guiform/classes/GuiForm/Module/Ajax.php
du plugin.
On va remplacer la fonction mailer()
afin d’utiliser la fonction wp_mail
fournie par WordPress. La fonction mailer()
devient :
public function mailer($type = 'mail', $init = array()){ global $wpdb, $guiform; $subject = ""; $MsgHTML = ""; $headers = ""; $attachments = ""; $sendTo = array_map('trim', explode(',', $init['to'])); $sendCc = array_map('trim', explode(',', $init['cc'])); $sendBcc = array_map('trim', explode(',', $init['bcc'])); $sendReplyTo = array_map('trim', explode(',', $init['reply-to'])); /* Make sure the PHPMailer class has been instantiated // (Re)create it, if it's gone missing if ( !is_object( $phpmailer ) || !is_a( $phpmailer, 'PHPMailer' ) ) { require_once ABSPATH . WPINC . '/class-phpmailer.php'; require_once ABSPATH . WPINC . '/class-smtp.php'; $phpmailer = new PHPMailer(true); $phpmailer->clearAllRecipients(); $phpmailer->SMTPAuth = true; }*/ if($type == 'test-mail'){ $data = $wpdb->get_row($wpdb->prepare("SELECT name, value FROM $wpdb->guiform_options WHERE id = %d", $this->_id)); $sendTo = array($data->name); $row = unserialize($data->value); $row = array_map('trim', $row); $html = "<strong>". __('Greetings!', GuiForm_Plugin::NAME) ."</strong><br /><br />"; $html .= __("This is a test message.", GuiForm_Plugin::NAME) ."<br /><br />"; $MsgHTML = self::emailTpl($html); /*$phpmailer->SetFrom("noreply@guiform.com", GuiForm_Plugin::PACKAGE); $phpmailer->Subject = __('Test Message', GuiForm_Plugin::NAME);*/ $headers .= 'From: noreply@guiform.com' . "\r\n"; $subject = __('Test Message', GuiForm_Plugin::NAME); } else if($type == 'activation-mail'){ $data = $wpdb->get_row($wpdb->prepare("SELECT name, value FROM $wpdb->guiform_options WHERE id = %d", $this->_id)); $row = unserialize($data->value); $row = array_map('trim', $row); $mv_code = md5(time()); $row['key'] = $mv_code; $guiform->updateOption($data->name, $row, 'mail', $this->_id); //$phpmailer->Subject = __("Email Verification", GuiForm_Plugin::NAME); $subject = __("Email Verification", GuiForm_Plugin::NAME); $sendTo = array($data->name); $vlink = get_site_url() ."/?". $guiform->getOption('permalink')->value['value'] .'='. $this->_id ."&mv-code=$mv_code"; $html = "Hello ".$row['name'].",<br /><br />"; $html .= __("To enable this email address from sending emails with your forms we must first verify by clicking the link below:", GuiForm_Plugin::NAME) ."<br /><br />"; $html .= __("Verification Link: ", GuiForm_Plugin::NAME) ."<a target=\"_blank\" href=\"$vlink\">". __("click here!", GuiForm_Plugin::NAME) ."</a><br /><br />"; $MsgHTML = self::emailTpl($html); //$phpmailer->SetFrom("noreply@guiform.com", "GuiForm"); $headers .= 'From: noreply@guiform.com' . "\r\n"; } else if($type == 'mail'){ $init['message'] = str_replace("\\r\\n", "<br />", $init['message']); $init['message'] = stripcslashes($init['message']); //Do not remove   and <br />. $MsgHTML = $init['message'] ." <br />"; //$phpmailer->SetFrom($init['from'], ""); //$phpmailer->Subject = $init['subject']; $headers .= 'Reply-To: '.$init['from'] . "\r\n"; $headers .= 'From: '.$init['from'] . "\r\n"; $subject = $init['subject']; if(sizeof($init['attachment'])){ foreach($init['attachment'] as $file){ //$phpmailer->AddAttachment(self::getAttachmentPath($file['url']), $file['name']); $attachments = self::getAttachmentPath($file['url']); } } if(sizeof($sendReplyTo)){ foreach($sendReplyTo as $replyTo){ if(is_email($replyTo)){ //$phpmailer->AddReplyTo($replyTo); $headers .= 'Reply-To: '.$replyTo. "\r\n"; } } } if(sizeof($sendCc)){ foreach($sendCc as $mailCc){ if(is_email($mailCc)){ //$phpmailer->AddCC($mailCc); $headers .= 'Cc: '.$mailCc."\r\n"; } } } if(sizeof($sendBcc)){ foreach($sendBcc as $mailBcc){ if(is_email($mailBcc)){ //$phpmailer->AddCC($mailBcc); $headers .= 'Bcc: '.$mailBcc."\r\n"; } } } } /*$phpmailer->Body = html_entity_decode($MsgHTML); $phpmailer->AltBody = strip_tags($MsgHTML); $phpmailer->IsHTML(true); $phpmailer->CharSet = "UTF-8";*/ $headers .= 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-Type: text/html; charset=UTF-8'."\r\n"; $body = html_entity_decode($MsgHTML); wp_mail( $sendTo, $subject, $body, $headers, $attachments); /* foreach($sendTo as $mailTo){ if($phpmailer->validateAddress($mailTo)){ $phpmailer->AddAddress($mailTo); } } $smtpSettings = $guiform->getOption($this->form, false, 'smtp')->value; if($smtpSettings->smtp_enable){ $row['protocol'] = 'smtp'; $row['smtp_host'] = $smtpSettings->smtp_host; $row['smtp_port'] = $smtpSettings->smtp_port; } $phpmailer->Mailer = $row['protocol']; if($row['protocol'] == 'smtp'){ $phpmailer->IsSMTP(); $phpmailer->SMTPSecure = $row['smtp_encryption']; $phpmailer->Host = $row['smtp_host']; $phpmailer->Port = $row['smtp_port']; } if(filter_var($row['smtp_auth'], FILTER_VALIDATE_BOOLEAN)) { $phpmailer->SMTPAuth = true; $phpmailer->Username = trim($row['smtp_username']); $phpmailer->Password = trim($row['smtp_password']); } if(!$phpmailer->send()) { die( __("Mailer Error: ", GuiForm_Plugin::NAME) . $phpmailer->ErrorInfo); } else { $phpmailer->clearAllRecipients(); $phpmailer->clearAttachments(); if($type !== 'mail'){ die( __("Message sent! Please check your email for message.", GuiForm_Plugin::NAME)); } } */ }