【转】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

相关文章
相关标签/搜索