修复PrestaShop联系表单不发送邮件进入垃圾箱

如果您在PrestaShop商店电子邮件配置中使用SMTP,那么您可能会遇到以下问题 - 您没有收到有关来自联系表单的新邮件的电子邮件通知。其他所有邮件都发送正常。


这是因为PrestaShop从客户的名字发送邮件,但使用您的SMTP服务器和您的电子邮件帐户。

您可以联系您的托管支持或您的电子邮件提供商支持,也许他们会为您提供一些解决方案。如果没有,你可以在PrestaShop级别解决这个问题。

解:

1.最简单的方法是通过PHP邮件() functon 发送邮件。您可以更改后台中的电子邮件设置(高级参数 - >电子邮件)。 以这种方式发送的邮件通常会陷入垃圾邮件。当然这很糟糕。
修复PrestaShop联系表单不发送邮件进入垃圾箱

2.另一种方式 - 小代码修改。

所有文件都可以通过FTP进行编辑。文件路径是相对于站点根目录的。
所有更改应该在覆盖类中执行:/override/controllers/ContactController.php

在文件/controllers/ContactController.php中,您可以找到函数postProcess()。在这个函数的最后找到下面的代码
 

if (!Mail::Send($this->context->language->id, 'contact', Mail::l('Message from contact form').' [no_sync]',
    $var_list, $contact->email, $contact->name, null, null,
            $file_attachment, null,    _PS_MAIL_DIR_, false, null, null, $from) ||
        !Mail::Send($this->context->language->id, 'contact_form', ((isset($ct) && Validate::isLoadedObject($ct)) ? sprintf(Mail::l('Your message has been correctly sent #ct%1$s #tc%2$s'), $ct->id, $ct->token) : Mail::l('Your message has been correctly sent')), $var_list, $from, null, null, null, $file_attachment, null, _PS_MAIL_DIR_, false, null, null, $contact->email)) {
    $this->errors[] = Tools::displayError('An error occurred while sending the message.');
}

此代码用于将邮件发送给客户和管理员。这个例子是从PrestaShop 1.6中给出的,在其他版本中可能会略有不同。

您需要通过以下方式替换该代码:

// save the current email sending method to the variable
$ps_mail_method = Configuration::get('PS_MAIL_METHOD');
// change email sending method to PHP mail()
Configuration::updateValue('PS_MAIL_METHOD', '1');
// send email to admin zuimoban.com
if (!Mail::Send(
    $this->context->language->id,
    'contact',
    Mail::l('Message from contact form').' [no_sync]',
    $var_list,
    $contact->email,
    $contact->name,
    $from,
    ($customer->id ? $customer->firstname.' '.$customer->lastname : ''),
    $file_attachment
)) {
    $this->errors[] = Tools::displayError('An error occurred while sending the message.');
}
 
// turn back default method
Configuration::updateValue('PS_MAIL_METHOD', $ps_mail_method);
// send email to a customer
if(!Mail::Send(
    $this->context->language->id,
    'contact_form',
    ((isset($ct) && Validate::isLoadedObject($ct)) ? sprintf(Mail::l('Your message has been correctly sent #ct%1$s #tc%2$s'), $ct->id, $ct->token) : Mail::l('Your message has been correctly sent')),
    $var_list,
    $from,
    null,
    $contact->email,
    $contact->name,
    $file_attachment
)) {
    $this->errors[] = Tools::displayError('An error occurred while sending the message.');
}



这些更改的主要想法是:在将邮件发送给管理员之前,我们将电子邮件发送方法更改为PHP Mail()。然后我们将其更改回默认(SMTP)方法。因此,邮件将通过SMTP服务器发送给客户,不会陷入垃圾邮件,并且管理员将对PHP邮件()感到满意

 


上一篇:prestashop首页轮播幻灯片图片修改 下一篇:如何更改PrestaShop中的数据库连接设置
  • 版权声明:内容来自互联网不代表本站观点,2018-05-12发表于 prestashop教程栏目。
  • 转载请注明: 修复PrestaShop联系表单不发送邮件进入垃圾箱| prestashop教程 +复制链接