Inviare email da moduli personalizzati di Magento

Un’ottima interazione con il cliente è una caratteristica principale per qualsiasi transazione, non fa eccezione la vendita di prodotti online. In questo caso un perfetto strumento per mantenere i rapporti con i propri clienti è la posta elettronica.

Magento fornisce già una base di interazione tramite e-mail, come per esempio la notifica automatica di ordine avvenuto con successo, o la segnalazione al cliente di un eventuale suo cambio di stato.
Capita però che ciò che offre Magento in fatto di e-mail non è abbastanza… fortunatamente noi sviluppatori abbiamo a disposizione la possibilità di realizzare moduli ad hoc per soddisfare qualsiasi esigenza personalizzata.

Ipotizziamo di voler inviare un’email cliccando su un bottone inserito nella scheda backoffice dell’ordine. Grazie al framework Zend e a poche righe di codice è possibile ottenere l’effetto desiderato. Perché Zend e non la classe core di Magento? Perché tramite Zend è possibile gestire facilmente l’invio di mail tramite SMTP, anche più “difficoltosi” come gmail.

Dato che stiamo lavorando ad un modulo do per scontato che il controller che si occuperà di raccogliere l’azione del bottone sia già stato creato. All’interno di esso inseriremo nella funzione IndexAction() la validazione dei dati che riceveremo tramite la form di richiesta. Creiamo una funzione che chiameremo sendMail() e conterrà tutto la logica relativa all’invio della mail.

Passiamo ora al codice vero e proprio:

[php]$mail = new Zend_Mail();[/php]

Creiamo un’istanza di Zend_Mail nell’oggetto $mail

[php]$config = array(
‘ssl’ => ‘tls’,
‘port’ => 587,
‘auth’ => ‘login’,
‘username’ =>’username@gmail.com’,
‘password’ => ‘password’);

$transport = new Zend_Mail_Transport_Smtp(‘smtp.gmail.com’, $config);[/php]

Configuriamo il protocollo SMTP scelto (come esempio ho usato il già citato gmail).
La classe Zend_Mail fornisce vari metodi per configurare la mail in ogni sua caratteristica:

[php]$mail->setBodyHtml(‘Contenuto Email Html’);
$mail->setBodyText(‘Contenuto Email Testo’);[/php]

Impostiamo il contenuto della mail, scegliendo adeguatamente la tipologia di body se testo o html:

[php]$mail
->setFrom(‘email_mittente’,’nome_mittente )
->addTo(‘email_destinatario’,’nome_destinatario’)
->setSubject(‘oggetto_mail’);[/php]

Finiamo con la definizione del mittente e del destinatario, quindi passiamo a come mandare la mail, usando la seguente porzione di codice:

[php]try{
$mail->send($transport);
Mage::getSingleton(‘core/session’)->addSuccess(“La mail è stata inviata con successo”);
$this->_redirect(”);
}
catch(Exeception $e){
Mage::getSingleton(‘core/session’)->addError(“Non è stato possibile inviare la mail”);
$this->_redirect(”);
}[/php]

Il metodo che esegue l’invio è send() che nel caso di problemi può lanciare un’eccezione che tramite try/catch siamo in grado di individuare e segnalare. Fornendo al metodo send() l’attributo $transport che abbiamo configurato in precedenza forniamo tutti i dati relativi al protocollo SMTP.

La e-mail ora è stata inviata, ma se volessimo applicarle un particolare template? Per poterlo fare è necessario aggiungere un paio di passaggi. Per prima cosa creiamo un template nella cartella app/local/it_IT/template/email/ che chiameremo demo_mail_template.html. Ora aggiungiamo nel config.xml presente nella cartella etc/ del nostro modulo questa parte di codice:

[php]

<label>Esempio Template Mail</label>
demo_mail_template.html
html

[/php]

Ora passiamo al codice da aggiungere, naturalmente prima del send().

[php]$emailTemplate = Mage:getModel(‘core/email_template’)->loadDefault(‘demo_mail_template);[/php]

Instanziamo la classe Mage_Core_Model_Email_Template e assegnamo il nostro template.

[php]$emailTemplateVar = array(
‘firstVar’ => ‘esempio_var_1’,

);
$processedTemplate = $emailTemplate->getProcessedTemplate($emailTemplateVar);[/php]

Creiamo il set di variabili che vogliamo presenti nel corpo della nostra mail e le assegnamo al template instanziato in precedenza. Le variabili potranno essere recuperate nel template attraverso il comando:

[php]{{var etichetta_variabile}}[/php]

Ora non ci resta che assegnare all’oggetto $mail il template su cui abbiamo appena lavorato e il gioco è fatto:

[php]$mail->setBodyHtml($processedTemplate);[/php]

Con queste poche righe di codice abbiamo ottenuto un modulo che riceve tramite una form dei dati specifici e li invia automaticamente tramite una e-mail formattata con un template.

Non ci sei riuscito? Contattaci subito, il nostro staff specializzato portà aiutarti con le configurazioni del tuo ecommerce Magento.

Nella prossima puntata verrà descritta la metodologia per spedire una mail tramite la classe Mage_Core_Model_Email.

Condividi