【轉】Prestashop SMTP模式發送郵件客戶郵件(聯繫咱們頁面)收到不的解決辦法

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

轉載自:http://www.phpmarker.com/388.htmlblog

相關文章
相關標籤/搜索