Контактная форма Magento - получаю электронное письмо от себя

По какой-то причине, когда клиент отправляет контактную форму, в моем gmail отображается, что электронное письмо было отправлено от меня, а не от моего клиента. Пожалуйста, проверьте фотографии, чтобы вы знали, о чем я говорю.

http://i.stack.imgur.com/QsACc.jpg Это изображение показывает, что электронное письмо пришло от меня

http://i.stack.imgur.com/nghG2.jpg Посмотреть на стрелке, это то, что я вижу в каждом электронном письме, которое приходит от контакта. То же имя, то же название.

Это действительно раздражает, потому что, когда многие люди используют это, я не могу сказать, кто из них кто.

Это моя контактная страница: meome.vn/lien-he Там может быть какой-то код для вставки в шаблон электронной почты, который я не знаю. В любом случае, если кто-нибудь знает, как это исправить, пожалуйста, помогите мне. Я очень ценю это.


person Meome    schedule 10.10.2012    source источник


Ответы (2)


Вы проверили конфигурацию электронной почты в бэкэнде. Администратор -> Система -> Конфигурация -> Магазин адресов электронной почты и Администратор -> Система -> Конфигурация -> Контакты -> Параметры электронной почты

person Palanikumar    schedule 10.10.2012
comment
Они используются для настройки целевой электронной почты, когда клиенты отправляют форму. Я говорю о том, что после того, как я получил электронное письмо от клиентов, я не вижу их имени или адреса электронной почты, но вместо этого показывает, что электронное письмо было отправлено от меня. Если я получу 10 заявок от клиентов, я увижу 10 писем с одной и той же плиткой, все от меня, как на картинке 2 выше. Форма работает нормально, просто мне нужно, чтобы она отображала адрес электронной почты/имя моего клиента в разделе «От» вместо моего адреса электронной почты. - person Meome; 11.10.2012

Технически это дубликат Изменить поле "От" электронной почты контактной формы magento отправителю, но я дал полный и подробный ответ здесь. Простой основной хак — один из ответов, представленных там.

Я полон решимости не взламывать файлы ядра, поэтому я решил эту проблему, создав собственный контроллер. Я читал, и это казалось достаточно простым ... и также никакие расширения на рынке не предлагают цели, которые я поставил перед собой: 1) иметь адрес электронной почты и имя клиента на От; 2) простой человеческий ввод для защиты от спама; и 3) пара настраиваемых полей, 3 из которых на самом деле являются атрибутами продукта.

Файлы для этого:

$ find -type f
./Cycleworks/Cycleworks_ContactExtended.xml
./Cycleworks/ContactExtended/controllers/IndexController.php
./Cycleworks/ContactExtended/Helper/Data.php
./Cycleworks/ContactExtended/etc/config.xml

А теперь о самих файлах... Первый файл XML сообщает Magento о вашем пользовательском переопределении.

// copy this to app/etc/modules/
./Cycleworks/Cycleworks_ContactExtended.xml
<?xml version="1.0"?>
<config>
    <modules>
        <Cycleworks_ContactExtended>
            <active>true</active>
            <codePool>local</codePool>
        </Cycleworks_ContactExtended>
    </modules>
</config>  

Остальные файлы помещаются в app/code/local/. Ниже я скопировал функцию postAction() из исходного контроллера, затем добавил свой код вверху, а затем внес одно изменение в ->sendTransactional().

./Cycleworks/ContactExtended/controllers/IndexController.php
<?php
require_once 'Mage/Contacts/controllers/IndexController.php';
class Cycleworks_ContactExtended_IndexController extends Mage_Contacts_IndexController
{
    public function postAction()
    {
    $post = $this->getRequest()->getPost();
    if ( $post ) {
        if( stripos( $post["people"],"tires") ===FALSE ){
            Mage::getSingleton('customer/session')->addError("Please correctly answer the question to confirm you are human.<br>\"".$this->getRequest()->getPost("people")."\" is not correct.");
                $this->_redirect('*/*/');
                return;         
        }
        $extras=Array( "bike_year","bike_make","bike_model","bike_model_ext" );
        foreach($extras as $field) {
            if( $post[$field] == "empty" )
                $post[$field]= "----";
        }
        $comment = $post['comment']."\nMage::getStoreConfig(self::XML_PATH_EMAIL_SENDER)=\n'".Mage::getStoreConfig(self::XML_PATH_EMAIL_SENDER)."'";
        $post['comment']= nl2br($comment);

        $translate = Mage::getSingleton('core/translate');
        /* @var $translate Mage_Core_Model_Translate */
        $translate->setTranslateInline(false);
        try {
            ...
            ...
            ...
            $mailTemplate->setDesignConfig(array('area' => 'frontend'))
                ->setReplyTo($post['email'])
                ->sendTransactional(
                    Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE),
                    array( 'name'=>$post['name'],'email'=> $post['email'] ),        // Mage::getStoreConfig(self::XML_PATH_EMAIL_SENDER), //
                    Mage::getStoreConfig(self::XML_PATH_EMAIL_RECIPIENT),
                    null,
                    array('data' => $postObject)
                );
            ...
            ...
            ...
    }
}

Красивая и пустая оболочка. И да, все они имеют открывающие теги <?php, но не закрывающие??

./Cycleworks/ContactExtended/Helper/Data.php
<?php
class Cycleworks_ContactExtended_Helper_Data extends Mage_Core_Helper_Abstract
{

}

И XML в пользовательском модуле:

./Cycleworks/ContactExtended/etc/config.xml
<?xml version="1.0"?>
<config>
    <modules>
        <Cycleworks_ContactExtended>
            <version>0.0.01</version>
        </Cycleworks_ContactExtended>
    </modules>
    <frontend>
        <routers>
            <contacts>
                <args>
                    <modules>
                        <Cycleworks_ContactExtended before="Mage_Contacts">Cycleworks_ContactExtended</Cycleworks_ContactExtended>
                    </modules>
                </args>
            </contacts>
        </routers>
    </frontend>
    <global>
        <helpers>
            <contactextended>
                <class>Cycleworks_ContactExtended_Helper</class>
            </contactextended>
        </helpers>        
    </global>
</config>

Вот и весь бэкенд. Что касается самой формы, я добавил этот код в form.phtml под блоком комментариев и над закрывающим тегом </ul>. Для большинства людей этот файл находится в app/code/design/frontend/default/default/template/contacts. Поскольку у меня есть купленный шаблон TM, мой находится в default/a034/template/contacts

<?php
$confirm_people_question="Motorcycles have two of these and rhymes with plires";    // CKCK form anti-spam
?>
<li>
    <label for="people" class="required"><em>*</em><?php echo $confirm_people_question ?></label>
    <div class="input-box">
        <input name="people" id="people" title="Please confirm you are people" value="" class="required-entry input-text" type="text" />
    </div>
</li>
<?php
// from http://www.sharpdotinc.com/mdost/2009/04/06/magento-getting-product-attributes-values-and-labels/
$wanted=Array("make","model","engine_size");    // note that each attribute needs to be searchable
$attributes = Mage::getModel('catalogsearch/advanced')->getAttributes();    // $productAttrs = Mage::getResourceModel('catalog/product_attribute_collection');
$attributeArray=array();
foreach($attributes as $a){
    if(  in_array( $a->getAttributeCode(), $wanted) ){
        foreach($a->getSource()->getAllOptions(false) as $option){
            $attributeArray[$a->getAttributeCode()][$option['value']] = $option['label'];
        }
    }
}

?>
<li>
    <div class="ymm">
    <label for="bike_year">Year</label><br>
        <select id="year" name="bike_year">
            <option value="empty"></option>
            <?  for( $idx=date("Y"); $idx >= 1985; $idx-- ) 
                    echo "                      <option value=\"$idx\">$idx</option>\n";
            ?>
        </select>
    </div>
    <div class="ymm">
    <label for="bike_make">Make</label><br>
        <select id="make" name="bike_make">
            <option value="empty"></option>
            <?  foreach( $attributeArray['make'] as $id => $brand ) 
                    echo "                      <option value=\"$brand\">$brand</option>\n";
            ?>
        </select>
    </div>
    <div class="ymm">
    <label for="bike_model">Model</label><br>
        <select id="model" name="bike_model">
            <option value="empty"></option>
            <?  foreach( $attributeArray['model'] as $id => $model )    
                    echo "                      <option value=\"$model\">$model</option>\n";
            ?>
        </select>
    </div>
    <div class="ymm">
        <label for="bike_model_ext">More</label>
        <div class="input-box">
            <input type="text" size="15" value="" id="model_ext" name="bike_model_ext" class="input-text">
        </div>
    </div>
</li>

Чуть не забыл, последний ключ к головоломке — шаблон почты в админке: System - Transactional Emails. Найдите свой HTML-шаблон контакта (или создайте новый и не преобразовывайте его в обычный текст), и вот что у меня есть:

<body style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
<div style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
<table>
<tr><td>Name</td><td>{{var data.name}}</td></tr>
<tr><td>E-mail</td><td>{{var data.email}}</td></tr>
<tr><td>Telephone</td><td>{{var data.telephone}}</td></tr>
</table>
<P>
<fieldset><legend>Subject: &nbsp; {{var data.subject}}</legend>
{{var data.comment}}
</fieldset>
Bike info: {{var data.bike_year}} {{var data.bike_make}} {{var data.bike_model}} {{var data.bike_model_ext}}
</div>
</body>

Я никогда не думал, что сделаю свой собственный модуль, но я следовал рецептам, которые нашел здесь и в других местах, и собрал это вместе. Также корректно ведет себя при сбое капчи. Я пытался выяснить, как предоставить клиенту возможность CC с его собственным контактом, но ничего не нашел.

Позже я попытался создать собственный модуль, позволяющий использовать альтернативный шаблон электронного уведомления администратора для новых заказов, но знаний, полученных мной выше, оказалось недостаточно. :P Так что мои знания и комфорт с Magento, возможно, выше «опасного взлома», но мне еще предстоит пройти долгий путь.

person Chris K    schedule 15.02.2013