Prestashop 通常默認使用 mail 函數發送郵件,郵件發送的IP地址就是服務器或者共享空間的IP地址。共享空間上面的網站不少,可能存在發送垃圾郵件的網站,致使共享空間的IP地址被其 他郵件服務商(gmail、hotmail等等)加入黑名單,使用mail發送的郵件所有不可以發送成功。php
更換使用第三方郵件來發送郵件,Prestashop 後臺設置的發送郵件模式更換成SMTP。html
通過測試發現:使用SMTP發送郵件,當發件人爲非SMTP帳戶郵箱時,發送郵件成功,可是收件人收不到郵件。服務器
聯繫咱們(contact us)頁面發送郵件給網站管理者,發件人爲客戶的郵箱,這樣的郵件都收不到。個人訂單頁面也存在這種問題。函數
若是設置發件人郵箱爲SMTP帳戶郵箱,可以正常收到郵件。從網站後臺給客戶發送郵件,客戶都可以收到郵件。從後臺發送的郵件,發件人爲SMTP帳戶郵箱。測試
Magento開發者也許考慮到這個問題,他們給出了很好的解決方案。Magento聯繫咱們頁面,客戶發送的郵件,發件人就是SMTP帳戶郵箱,可是回覆收件人郵箱是客戶郵箱。網站
綜合考慮上面的狀況,只可以採用Magento的那種郵件處理模式來解決問題。發件人設置爲SMTP帳戶郵箱,回覆郵箱設置成客戶郵箱。this
找到Prestashop classes/Mail.php 文件,修改地方以下:rest
// 102-104 行之間修改代碼 // $from_name is not that important, no need to die if it is not valid if (!isset($from_name) || !Validate::isMailName($from_name)) $from_name = $configuration['PS_SHOP_NAME']; if (!Validate::isMailName($from_name)) $from_name = null; // 設置回覆郵箱爲客戶郵箱 $email_reply_to = $from; // 設置發件人郵箱爲SMTP帳戶郵箱 $from = $configuration['PS_SHOP_EMAIL']; // It would be difficult to send an e-mail if the e-mail is not valid, so this time we can die if there is a problem if (!is_array($to) && !Validate::isEmail($to)) { Tools::dieOrLog(Tools::displayError('Error: parameter "to" is corrupted'), $die); return false; }
// 256-264 行代碼修改 /* Create mail and attach differents parts */ $message = new Swift_Message('['.Configuration::get('PS_SHOP_NAME', null, null, $id_shop).'] '.$subject); $message->setCharset('utf-8'); // 設置回覆者郵箱爲客戶郵箱 $message->setReplyTo($email_reply_to); /* Set Message-ID - getmypid() is blocked on some hosting */ $message->setId(Mail::generateId()); $message->headers->setEncoding('Q');
上面的解決方法暫時適合於Prestashop 1.5.6.1,其餘高版本是否修復這個漏洞,暫不清楚。htm