Сбой программной отправки электронной почты в Magento

#email #magento

#Адрес электронной почты #magento

Вопрос:

Почему в настройках конфигурации / системы / отправки почты нигде не указано имя пользователя и пароль для вашего smtp-сервера?

Чтобы обойти это, нужно ли вносить изменения в getMail(), описанные в этом сообщении: http://www.magentocommerce.com/boards/viewthread/1073/P30 /

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

Итак, первый шаг — создайте шаблон.
— В конфигурационных / транзакционных электронных письмах, я полагаю, я должен видеть список шаблонов. Я ничего не вижу. Но если я добавлю новый шаблон, я смогу выбрать из списка шаблонов.
— Присвоите шаблону имя «Bob».
— Добавьте несколько переменных к шаблону:
myvar1={{var myvar1}}
myvar2={{var myvar2}}
— Сохраните шаблон; ему присваивается идентификатор 1.

Теперь отправьте электронное письмо программно из действия контроллера:
— Нет необходимости вносить изменения в LINEEND в Mime.php поскольку в версии 1.4.2.0 уже установлено значение n
— Внесите изменения в getMail() в Template.php как указано в этом сообщении: http://www.magentocommerce.com/boards/viewthread/1073/P30 /
— Напишите код в действии контроллера для отправки электронной почты:

     This returns nothing:  
    $emailTemplate  = Mage::getModel('core/email_template')->loadDefault('no matter what goes here emailTemplate is not set');

    This does return an email template:
    $emailTemplate  = Mage::getModel('core/email_template')->loadByCode('Bob');

    but the call to send below fails:
    $emailTemplate->setSenderEmail('sent@byme.com');
    $emailTemplate->setSenderName('Steve');
    $emailTemplateVariables = array();
    $emailTemplateVariables['myvar1'] = 'TestValue1';
    $emailTemplateVariables['myvar2'] = 'TestValue2';
    // $processedTemplate = $emailTemplate->getProcessedTemplate($emailTemplateVariables); -- this returns nothing
    $emailTemplate->send('thisisme@mydomain.com','John', $emailTemplateVariables);
In the system.log I get the warning below, and no e-mail ever arrives.
Warning: stream_socket_enable_crypto() [<a href='streams.crypto'>streams.crypto</a>]: this stream does not support SSL/crypto  in C:ApplicationsApache Software FoundationApache2.2htdocsmagentolibZendMailProtocolSmtp.php on line 206
  

Должен ли я использовать loadByCode? Хотелось бы, чтобы была какая-нибудь стоящая документация (справка по loadByCode — «Загрузить шаблон по коду» !!). Должен ли я использовать send, sendTransactional? О, немного качественной документации.

Спасибо

Ответ №1:

Я вижу здесь 2 вопроса.

1. Как настроить почтовую систему Magento на использование протокола smtp?

У вас возникли проблемы из-за этого, потому что Magento настроен на использование рассылки с хоста по умолчанию. Поэтому он будет искать ее на компьютере, где она установлена.

Если вы хотите настроить smtp-сервер, я бы рекомендовал использовать это расширение : http://www.magentocommerce.com/magento-connect/ziq2004/extension/460/advanced-smtp—artson.it

Я обнаружил, что это просто в использовании и настройке.

2. Как отправить почту в вашем пользовательском модуле

Сначала вы можете создать свой шаблон в Confguration / Транзакционные электронные письма, отметьте идентификатор, чтобы он был вашим идентификатором

Затем просто используйте этот код для отправки почты в вашем модуле

 <?php
// The Id you just marked...
$templateId = 1;

// Define the sender, here we query Magento default email (in the configuration)
// For customer support email, use : 'trans_email/ident_support/...'
$sender = Array('name' => Mage::getStoreConfig('trans_email/ident_general/name'),
                'email' => Mage::getStoreConfig('trans_email/ident_general/email'));

// Set you store
// This information may be taken from the current logged in user
$store = Mage::app()->getStore();

// In this array, you set the variables you use in your template
$vars = Array('my_var' => $my_var,
              'another_var' => 12);

// You don't care about this...        
$translate  = Mage::getSingleton('core/translate');

// Send your email
Mage::getModel('core/email_template')->sendTransactional($templateId,
                                                         $sender,
                                                         'recipient@gmail.com',
                                                         'Recipient Name',
                                                         $vars,
                                                         $store->getId());

// You don't care as well        
$translate->setTranslateInline(true);
?>
  

Надеюсь, это поможет вам

С уважением,

Ответ №2:

Я удалил элемент ‘ssl’ => ‘tls’ из массива в getMail() в Template.php и мое электронное письмо пришло. Я все еще был бы признателен, если бы у кого-нибудь было объяснение того, как следует указывать имя пользователя и пароль smtp-сервера, а также объяснение различий в методах загрузки шаблона и т.д. Было бы весьма кстати!

Ответ №3:

Если кто-нибудь ищет полный пример кода отправки электронной почты Magento на основе существующего шаблона электронной почты Magento, хорошо работает следующее. Для этого не требуется никакой конфигурации XML. Вы можете загрузить шаблон как по имени, так и по идентификатору. В этом случае я загружаю его по имени.

 // This is the name that you gave to the template in System -> Transactional Emails
$emailTemplate = Mage::getModel('core/email_template')->loadByCode('My Custom Email Template');

// These variables can be used in the template file by doing {{ var some_custom_variable }}
$emailTemplateVariables = array(
'some_custom_variable' => 'Hello World'
);

$processedTemplate = $emailTemplate->getProcessedTemplate($emailTemplateVariables);

$emailTemplate->setSenderName('Joe Bloggs');
$emailTemplate->setSenderEmail('test@test.com');
$emailTemplate->setTemplateSubject("Here is your subject");

$emailTemplate->send('recipient@test.com', 'Joanna Bloggs', $emailTemplateVariables);