dryk50495 2010-02-11 15:33
浏览 55
已采纳

重新配置PHP Mail()Smarty联系表

I'm using Prestashop as my ecommerce shopping cart and CMS solution and was having problems receiving emails sent via the contact form. I asked around and found the problem to be due to the fact that I need to assign the 'from' address as something from my domain (e.g. do_not_reply@mydomain.com) and the email entered by user to be assigned a different variable (e.g. 'replyemail').

However, the Prestashop contact form is created with a PHP Smarty template engine, which has separate contact-form.php file and a separate contact-form.tpl which I am displaying below. Firstly 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');

?>

Next is the code for the file 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">&nbsp;</p>

        {foreach from=$contacts item=contact}

            <p id="desc_contact{$contact.id_contact|intval}" class="desc_contact" style="display:none;">

            <label>&nbsp;</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}

Does anyone have any idea how I can adjust this contact form in order to assign the from address of my choice (e.g. do_not_reply@mydomain.com) and hopefully this email form would start working for me. If this 'from' address is stored somewhere else, can anyone see where it might be stored or where it is refering to in the code?

  • 写回答

1条回答 默认 最新

  • donglinxia1541 2010-02-11 16:59
    关注

    If this 'from' address is stored somewhere else, can anyone see where it might be stored or where it is refering to in the code?

    I can't tell from the code, but my strong guess would be this file:

    include(dirname(__FILE__).'/config/config.inc.php');
    

    Edit:

     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)))
    

    I can't look closely into the code right now, but replacing either

    '{email}' => $_POST['from']
    

    or

    $from
    

    by

    '{email}' => 'whatever_you_want'
    

    or

    'whatever_you_want'
    

    might do the trick.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?