如果您在PrestaShop商店电子邮件配置中使用SMTP,那么您可能会遇到以下问题 - 您没有收到有关来自联系表单的新邮件的电子邮件通知。其他所有邮件都发送正常。
这是因为PrestaShop从客户的名字发送邮件,但使用您的SMTP服务器和您的电子邮件帐户。
您可以联系您的托管支持或您的电子邮件提供商支持,也许他们会为您提供一些解决方案。如果没有,你可以在PrestaShop级别解决这个问题。
解:
1.最简单的方法是通过PHP邮件() functon 发送邮件。您可以更改后台中的电子邮件设置(高级参数 - >电子邮件)。 以这种方式发送的邮件通常会陷入垃圾邮件。当然这很糟糕。
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 ldhost.cn
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邮件()感到满意