Monday 5 March 2012

SMTP Mail configuration Magento

1. You need to override Mage_Core_Model_Email_Template [ app/code/core/Mage/Core/Model/Email/Template.php need to be override].
2. Create a Module in your app/code/local/Company/Core
3. Create a config.xml in app/code/local/Company/Core/etc, copy and paste the below code in that file.

<?xml version="1.0"?>
<config>
        <modules>
        <Companyname_Core>
            <version>0.1.0</version>
        </Companyname_Core>
    </modules>
    <global>
        <models>
            <core>
                <rewrite>                   
                    <email_template>Companyname_Core_Model_Email_Template</email_template>
                </rewrite>
            </core>
        </models>
    </global>
</config>

3. Create a Template.php in app/code/local/Company/Core/Model/Email/, copy and paste the below code in that file.

<?php
class Companyname_Core_Model_Email_Template extends Mage_Core_Model_Email_Template
{
    public function send($email, $name=null, array $variables = array())
    {
   
        if (!$this->isValidForSend()) {
            Mage::logException(new Exception('This letter cannot be sent.')); // translation is intentionally omitted
            return false;
        }

        $emails = array_values((array)$email);
        $names = is_array($name) ? $name : (array)$name;
        $names = array_values($names);
        foreach ($emails as $key => $email) {
            if (!isset($names[$key])) {
                $names[$key] = substr($email, 0, strpos($email, '@'));
            }
        }
       
        $variables['email'] = $email;
        $variables['name'] = $name;
       
        ini_set('SMTP', Mage::getStoreConfig('system/smtp_settings/host'));
        ini_set('smtp_port', Mage::getStoreConfig('system/smtp_settings/port'));
       
        $host = Mage::getStoreConfig('system/smtp_settings/host');
        $smtpuser = Mage::getStoreConfig('system/smtp_settings/username');
        $smtpuserpass = Mage::getStoreConfig('system/smtp_settings/password');
        $port = Mage::getStoreConfig('system/smtp_settings/port');
        $auth = strtolower(Mage::getStoreConfig('system/smtp_settings/auth'));
        $mail = $this->getMail();
       
        $setReturnPath = Mage::getStoreConfig(self::XML_PATH_SENDING_SET_RETURN_PATH);
        switch ($setReturnPath) {
            case 1:
                $returnPathEmail = $this->getSenderEmail();
                break;
            case 2:
                $returnPathEmail = Mage::getStoreConfig(self::XML_PATH_SENDING_RETURN_PATH_EMAIL);
                break;
            default:
                $returnPathEmail = null;
                break;
        }
       
        if ($returnPathEmail !== null) {
            $mailTransport = new Zend_Mail_Transport_Sendmail("-f".$returnPathEmail);
            Zend_Mail::setDefaultTransport($mailTransport);
        }
       
        foreach ($emails as $key => $email) {
            $mail->addTo($email, '=?utf-8?B?' . base64_encode($names[$key]) . '?=');
        }
       
        $this->setUseAbsoluteLinks(true);
        $text = $this->getProcessedTemplate($variables, true);
       
        if($this->isPlain()) {
            $mail->setBodyText($text);
        } else {
            $mail->setBodyHTML($text);
        }
        $config = array('port' =>$port);
        if($auth != 'NONE'){
            $config = array('port' =>$port, 'auth' => $auth, 'username' => $smtpuser, 'password' => $smtpuserpass);
        }
        $transport = new Zend_Mail_Transport_Smtp($host, $config);
       
        $mail->setSubject('=?utf-8?B?'.base64_encode($this->getProcessedTemplateSubject($variables)).'?=');
        $mail->setFrom($this->getSenderEmail(), $this->getSenderName());
       
        try {
            $mail->send($transport); // Zend_Mail warning.. // Note. here the $transport parameter contains the configuration for smtp authentication
            $this->_mail = null;
        }
        catch (Exception $e) {
            return false;
        }
        return true;
    }
}

Thats all now you can enjoy sending mail with smtp in magento................ :)