我正在使用Prestashop作为我的电子商务购物车和CMS解决方案,并且在接收通过联系表单发送的电子邮件时遇到问题。我四处询问,发现问题是因为我需要将“来自”地址分配给我的域名(例如do_not_reply@mydomain.com)和用户输入的电子邮件以分配不同的变量(例如'replyemail')。
但是,Prestashop联系表单是使用PHP Smarty模板引擎创建的,该引擎具有单独的contact-form.php文件和单独的contact-form.tpl,我将在下面显示。 首先是contact-form.php: -
<?php
$useSSL = true;
include(dirname(__FILE__).'/config/config.inc.php');
include(dirname(__FILE__).'/header.php');
$errors = array();
$smarty->assign('contacts', Contact::getContacts(intval($cookie->id_lang)));
if (Tools::isSubmit('submitMessage'))
{
if (!($from = Tools::getValue('from')) OR !Validate::isEmail($from))
$errors[] = Tools::displayError('invalid e-mail address');
elseif (!($message = nl2br2(Tools::getValue('message'))))
$errors[] = Tools::displayError('message cannot be blank');
elseif (!Validate::isMessage($message))
$errors[] = Tools::displayError('invalid message');
elseif (!($id_contact = intval(Tools::getValue('id_contact'))) OR !(Validate::isLoadedObject($contact = new Contact(intval($id_contact), intval($cookie->id_lang)))))
$errors[] = Tools::displayError('please select a contact in the list');
else
{
if (intval($cookie->id_customer))
$customer = new Customer(intval($cookie->id_customer));
if (Mail::Send(intval($cookie->id_lang), 'contact', 'Message from contact form', array('{email}' => $_POST['from'], '{message}' => stripslashes($message)), $contact->email, $contact->name, $from, (intval($cookie->id_customer) ? $customer->firstname.' '.$customer->lastname : $from)))
$smarty->assign('confirmation', 1);
else
$errors[] = Tools::displayError('an error occurred while sending message');
}
}
$email = Tools::safeOutput(Tools::getValue('from', ((isset($cookie) AND isset($cookie->email) AND Validate::isEmail($cookie->email)) ? $cookie->email : '')));
$smarty->assign(array(
'errors' => $errors,
'email' => $email
));
$smarty->display(_PS_THEME_DIR_.'contact-form.tpl');
include(dirname(__FILE__).'/footer.php');
?>
接下来是contact-form.tpl文件的代码: -
{capture name=path}{l s='Contact'}{/capture}
{include file=$tpl_dir./breadcrumb.tpl}
<h2>{l s='Contact us'}</h2>
{if isset($confirmation)}
<p>{l s='Your message has been successfully sent to our team.'}</p>
<ul class="footer_links">
<li><a href="{$base_dir}"><img class="icon" alt="" src="{$img_dir}icon/home.gif"/></a><a href="{$base_dir}">{l s='Home'}</a></li>
</ul>
{else}
<p class="bold">{l s='For questions about an order or for information about our products'}.</p>
{include file=$tpl_dir./errors.tpl}
<form action="{$request_uri|escape:'htmlall':'UTF-8'}" method="post" class="std">
<fieldset>
<h3>{l s='Send a message'}</h3>
<p class="select">
<label for="id_contact">{l s='Subject'}</label>
<select id="id_contact" name="id_contact" onchange="showElemFromSelect('id_contact', 'desc_contact')">
<option value="0">{l s='-- Choose --'}</option>
{foreach from=$contacts item=contact}
<option value="{$contact.id_contact|intval}" {if isset($smarty.post.id_contact) && $smarty.post.id_contact == $contact.id_contact}selected="selected"{/if}>{$contact.name|escape:'htmlall':'UTF-8'}</option>
{/foreach}
</select>
</p>
<p id="desc_contact0" class="desc_contact"> </p>
{foreach from=$contacts item=contact}
<p id="desc_contact{$contact.id_contact|intval}" class="desc_contact" style="display:none;">
<label> </label>{$contact.description|escape:'htmlall':'UTF-8'}</p>
{/foreach}
<p class="text">
<label for="email">{l s='E-mail address'}</label>
<input type="text" id="email" name="from" value="{$email}" />
</p>
<p class="textarea">
<label for="message">{l s='Message'}</label>
<textarea id="message" name="message" rows="7" cols="35">{if isset($smarty.post.message)}{$smarty.post.message|escape:'htmlall':'UTF-8'|stripslashes}{/if}</textarea>
</p>
<p class="submit">
<input type="submit" name="submitMessage" id="submitMessage" value="{l s='Send'}" class="button_large" />
</p>
</fieldset>
</form>
{/if}
有没有人知道如何调整此联系表单以便分配我选择的地址(例如do_not_reply@mydomain.com),并希望此电子邮件表单能够开始为我工作。如果这个'from'地址存储在其他地方,那么任何人都可以看到它可能存储的位置或它在代码中引用的位置吗?
答案 0 :(得分:0)
如果这个'from'地址存储在其他地方,那么任何人都可以看到它可能存储的位置或它在代码中引用的位置吗?
我无法从代码中看出来,但我的强烈猜测是这个文件:
include(dirname(__FILE__).'/config/config.inc.php');
编辑:
if (Mail::Send(intval($cookie->id_lang), 'contact', 'Message from contact form',
array('{email}' => $_POST['from'], '{message}' => stripslashes($message)),
$contact->email, $contact->name, $from, (intval($cookie->id_customer) ?
$customer->firstname.' '.$customer->lastname : $from)))
我现在无法仔细查看代码,但替换
'{email}' => $_POST['from']
或
$from
通过
'{email}' => 'whatever_you_want'
或
'whatever_you_want'
可能会做这个伎俩。