標籤:
Prestashop 一般預設使用 mail 函數發送郵件,郵件發送的IP地址就是伺服器或者共用空間的IP地址。共用空間上面的網站很多,可能存在發送垃圾郵件的網站,導致共用空間的IP地址被其 他郵件服務商(gmail、hotmail等等)加入黑名單,使用mail發送的郵件全部不能夠發送成功。
更換使用第三方郵件來發送郵件,Prestashop 後台設定的發送郵件模式更換成SMTP。
經過測試發現:使用SMTP發送郵件,當寄件者為非SMTP賬戶郵箱時,發送郵件成功,但是收件者收不到郵件。
聯絡我們(contact us)頁面發送郵件給網站管理者,寄件者為客戶的郵箱,這樣的郵件都收不到。我的訂單頁面也存在這種問題。
如果設定寄件者郵箱為SMTP賬戶郵箱,能夠正常收到郵件。從網站後台給客戶發送郵件,客戶都能夠收到郵件。從後台發送的郵件,寄件者為SMTP賬戶郵箱。
Magento開發人員也許考慮到這個問題,他們給出了很好的解決方案。Magento聯絡我們頁面,客戶發送的郵件,寄件者就是SMTP賬戶郵箱,但是回複收件者郵箱是客戶郵箱。
綜合考慮上面的情況,只能夠採用Magento的那種郵件處理模式來解決問題。寄件者設定為SMTP賬戶郵箱,回複郵箱設定成客戶郵箱。
找到Prestashop classes/Mail.php 檔案,修改地方如下:
// 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,其他高版本是否修複這個漏洞,暫不清楚。
轉載自:http://www.phpmarker.com/388.html
【轉】Prestashop SMTP模式發送郵件客戶郵件(聯絡我們頁面)收到不的解決辦法