Jump to content
thirty bees forum
  • 0

Newsletter modules


SLiCK_303

Question

Recommended Posts

  • 0

I narrowed it down to this file, it needs to utilize the new smarty, not the really old one ps used to use.....

edit: file removed

which looks like....

notice the includes on the top aren't correct, and I'm sure there must be calls into the file that are incorrect too.. ``` <?php

includeonce(dirname(FILE).'/../../../tools/swift/Swift.php'); includeonce(dirname(FILE).'/../../../tools/swift/Swift/Connection/SMTP.php'); includeonce(dirname(FILE).'/../../../tools/swift/Swift/Connection/NativeMail.php'); includeonce(dirname(FILE).'/../../../tools/swift/Swift/Plugin/Decorator.php');

class NewsMail { const TYPEHTML = 1; const TYPETEXT = 2; const TYPE_BOTH = 3;

public static function Send($id_lang, $template, $subject, $template_vars, $to,
    $to_name = null, $from = null, $from_name = null, $file_attachment = null, $mode_smtp = null,
    $template_path, $die = false, $id_shop = null, $bcc = null, $configuration = null)
{
if($configuration == null) {
    $configuration = Configuration::getMultiple(array(
        'PS_SHOP_EMAIL',
        'PS_MAIL_METHOD',
        'PS_MAIL_SERVER',
        'PS_MAIL_USER',
        'PS_MAIL_PASSWD',
        'PS_SHOP_NAME',
        'PS_MAIL_SMTP_ENCRYPTION',
        'PS_MAIL_SMTP_PORT',
        'PS_MAIL_TYPE',
        'PS_MAIL_DOMAIN'
    ), null, null, $id_shop);
}       

    if (!isset($configuration['PS_MAIL_SMTP_ENCRYPTION']))
        $configuration['PS_MAIL_SMTP_ENCRYPTION'] = 'off';
    if (!isset($configuration['PS_MAIL_SMTP_PORT']))
        $configuration['PS_MAIL_SMTP_PORT'] = 'default';


    //Verify the Return-Path    
    if (!isset($address))
        $address = null;

    if (!is_array($template_vars))
        $template_vars = array();


    /* Construct multiple recipients list if needed */
    $to_list = new Swift_RecipientList();
    $to_plugin = $to;
    $to_list->addTo($to, $to_name);
    $to = $to_list;

    try {
        /* Connect with the appropriate configuration */
        if ($configuration['PS_MAIL_METHOD'] == 2)
        {
            if (empty($configuration['PS_MAIL_SERVER']) || empty($configuration['PS_MAIL_SMTP_PORT']))
            {
                die('Error: invalid SMTP server or SMTP port');
            }
            $connection = new Swift_Connection_SMTP($configuration['PS_MAIL_SERVER'], $configuration['PS_MAIL_SMTP_PORT'],
                ($configuration['PS_MAIL_SMTP_ENCRYPTION'] == 'ssl') ? Swift_Connection_SMTP::ENC_SSL :
                (($configuration['PS_MAIL_SMTP_ENCRYPTION'] == 'tls') ? Swift_Connection_SMTP::ENC_TLS : Swift_Connection_SMTP::ENC_OFF));
            $connection->setTimeout(4);
            if (!$connection)
                return false;
            if (!empty($configuration['PS_MAIL_USER']))
                $connection->setUsername($configuration['PS_MAIL_USER']);
            if (!empty($configuration['PS_MAIL_PASSWD']))
                $connection->setPassword($configuration['PS_MAIL_PASSWD']);
        }
        else
            $connection = new Swift_Connection_NativeMail();

        if (!$connection)
            return false;
        $swift = new Swift($connection, $configuration['PS_MAIL_DOMAIN']);
        /* Get templates content */
        $template_html = file_get_contents(dirname(__FILE__).'/../mails/newsletter.html');
        $template_txt = strip_tags(html_entity_decode(file_get_contents(dirname(__FILE__).'/../mails/newsletter.txt'), null, 'utf-8'));

        $message = new Swift_Message($subject);

        $message->setCharset('utf-8');

        /* Set Message-ID - getmypid() is blocked on some hosting */
        $message->setId(NewsMail::generateId());

/* set a return-path to manage bounces feedbacks*/ // if($address != null) // $message->headers->set("Return-Path", $address); $message->headers->setEncoding('Q');

        $swift->attachPlugin(new Swift_Plugin_Decorator(array($to_plugin => $template_vars)), 'decorator');
        if ($configuration['PS_MAIL_TYPE'] == NewsMail::TYPE_BOTH || $configuration['PS_MAIL_TYPE'] == NewsMail::TYPE_TEXT)
            $message->attach(new Swift_Message_Part($template_txt, 'text/plain', '8bit', 'utf-8'));
        if ($configuration['PS_MAIL_TYPE'] == NewsMail::TYPE_BOTH || $configuration['PS_MAIL_TYPE'] == NewsMail::TYPE_HTML)
            $message->attach(new Swift_Message_Part($template_html, 'text/html', '8bit', 'utf-8'));

        /* Send mail */
        $send = $swift->send($message, $to, new Swift_Address($from, $from_name));
        $swift->disconnect();


        return $send;
    }
    catch (Swift_Exception $e) {
        echo $e;
        return false;
    }
}

/* Rewrite of Swift_Message::generateId() without getmypid() */
protected static function generateId($idstring = null)
{
    $midparams =  array(
        "utctime" => gmstrftime("%Y%m%d%H%M%S"),
        "randint" => mt_rand(),
        "customstr" => (preg_match("/^(?<!\\.)[a-z0-9\\.]+(?!\\.)\$/iD", $idstring) ? $idstring : "swift") ,
        "hostname" => (isset($_SERVER["SERVER_NAME"]) ? $_SERVER["SERVER_NAME"] : php_uname("n")),
    );
    return vsprintf("<%s.%d.%s@%s>", $midparams);
}

} ```

Link to comment
Share on other sites

  • 0

i will also recommend mailchimp for newsletters. very easy, nice templates. you can even setup mails for abandoned carts very easy. also tracking, opened, unopened, bounced etc is easy to track.. .. i should give it a try! its much more professional then the most modules ive seen for this purpose

Link to comment
Share on other sites

  • 0

i have tested this on a thirtybees webshop with the tb module and it works. but i also use this on my mainwebshop which is still on prestashop(waiting till all my needs are compatible with thirtybees) and it works fabulous, i use the module of businesstech on that webshop

Link to comment
Share on other sites

  • 0

Here's my new code....except that line, line 68 maybe... ``` <?php

// includeonce(dirname(FILE).'/../../../tools/swift/Swift.php'); // includeonce(dirname(FILE).'/../../../tools/swift/Swift/Connection/SMTP.php'); // includeonce(dirname(FILE).'/../../../tools/swift/Swift/Connection/NativeMail.php'); // includeonce(dirname(FILE).'/../../../tools/swift/Swift/Plugin/Decorator.php'); // includeonce(PSSWIFTDIR.'swiftrequired.php');

class NewsMail { const TYPEHTML = 1; const TYPETEXT = 2; const TYPE_BOTH = 3;

public static function Send(
    $id_lang,
    $template,
    $subject,
    $template_vars,
    $to,
    $to_name = null,
    $from = null,
    $from_name = null,
    $file_attachment = null,
    $mode_smtp = null,
    $template_path,
    $die = false,
    $id_shop = null,
    $bcc = null,
    $configuration = null)
{
if($configuration == null) {
    $configuration = Configuration::getMultiple(array(
        'PS_SHOP_EMAIL',
        'PS_MAIL_METHOD',
        'PS_MAIL_SERVER',
        'PS_MAIL_USER',
        'PS_MAIL_PASSWD',
        'PS_SHOP_NAME',
        'PS_MAIL_SMTP_ENCRYPTION',
        'PS_MAIL_SMTP_PORT',
        'PS_MAIL_TYPE',
        'PS_MAIL_DOMAIN'),
        null,
        null,
        $id_shop);
}       

if (!isset($configuration['PS_MAIL_SMTP_ENCRYPTION']) || Tools::strtolower($configuration['PS_MAIL_SMTP_ENCRYPTION']) === 'off') {
    $configuration['PS_MAIL_SMTP_ENCRYPTION'] = false;
}
if (!isset($configuration['PS_MAIL_SMTP_PORT'])) {
    $configuration['PS_MAIL_SMTP_PORT'] = 'default';
}


    //Verify the Return-Path    
    if (!isset($address)) {
        $address = null;
    }

    if (!is_array($template_vars)) {
        $template_vars = array();
    }


    /* Construct multiple recipients list if needed */
    $to_list = new Swift_RecipientList();
    $to_plugin = $to;
    $to_list->addTo($to, $to_name);
    $to = $to_list;

    try {
        /* Connect with the appropriate configuration */
        if ($configuration['PS_MAIL_METHOD'] == 2) {
            if (empty($configuration['PS_MAIL_SERVER']) || empty($configuration['PS_MAIL_SMTP_PORT'])) {
                die('Error: invalid SMTP server or SMTP port');
            }
            $connection = Swift_SmtpTransport::newInstance($configuration['PS_MAIL_SERVER'], $configuration['PS_MAIL_SMTP_PORT'], $configuration['PS_MAIL_SMTP_ENCRYPTION']);
            $connection->setTimeout(4);
            if (!$connection)
                return false;
            if (!empty($configuration['PS_MAIL_USER']))
                $connection->setUsername($configuration['PS_MAIL_USER']);
            if (!empty($configuration['PS_MAIL_PASSWD']))
                $connection->setPassword($configuration['PS_MAIL_PASSWD']);
        } else {
            $connection = Swift_MailTransport::newInstance();
        }

        if (!$connection) {
            return false;
        }

        $swift = Swift_Mailer::newInstance($connection);
        /* Get templates content */
        $template_html = file_get_contents(dirname(__FILE__).'/../mails/newsletter.html');
        $template_txt = strip_tags(html_entity_decode(file_get_contents(dirname(__FILE__).'/../mails/newsletter.txt'), null, 'utf-8'));

        $message = new Swift_Message($subject);

        $message->setCharset('utf-8');

        /* Set Message-ID - getmypid() is blocked on some hosting */
        $message->setId(NewsMail::generateId());

/* set a return-path to manage bounces feedbacks*/ // if($address != null) // $message->headers->set("Return-Path", $address); $message->headers->setEncoding('Q');

        $template_vars = array_merge($template_vars, $extra_template_vars);
        $swift->registerPlugin(new Swift_Plugins_DecoratorPlugin(array($to_plugin => $template_vars)));
        if ($configuration['PS_MAIL_TYPE'] == NewsMail::TYPE_BOTH || $configuration['PS_MAIL_TYPE'] == NewsMail::TYPE_TEXT) {
            $message->addPart($template_txt, 'text/plain', 'utf-8');
        }
        if ($configuration['PS_MAIL_TYPE'] == NewsMail::TYPE_BOTH || $configuration['PS_MAIL_TYPE'] == NewsMail::TYPE_HTML) {
            $message->addPart($template_html, 'text/html', 'utf-8');
        }

        /* Send mail */
        $send = $swift->send($message, $to, new Swift_Address($from, $from_name));
        $swift->disconnect();


        return $send;
    }
    catch (Swift_Exception $e) {
        echo $e;
        return false;
    }
}

/* Rewrite of Swift_Message::generateId() without getmypid() */
protected static function generateId($idstring = null)
{
    $midparams =  array(
        "utctime" => gmstrftime("%Y%m%d%H%M%S"),
        "randint" => mt_rand(),
        "customstr" => (preg_match("/^(?<!\\.)[a-z0-9\\.]+(?!\\.)\$/iD", $idstring) ? $idstring : "swift") ,
        "hostname"  => ((isset($_SERVER["SERVER_NAME"]) && !empty($_SERVER["SERVER_NAME"])) ? $_SERVER["SERVER_NAME"] : php_uname("n")),
    );
    return vsprintf("<%s.%d.%s@%s>", $midparams);
}

} ``` edit: file removed

Link to comment
Share on other sites

  • 0

I'm sure you've modified quite a bit since the last free version. I just am hard pressed to spend money on a module, I have a limited income. To me, the software (ps or tb in this case) is free, so should the modules. I'm not having much luck however getting your free version working on TB, so maybe this will be the first module I'll actually end up buying. :)

Link to comment
Share on other sites

  • 0

I guess if you have a shop, it's to make money, right? Will you offer your products? I wrote free modules for 5 years and distributed them on the forum. The code was stolen and even sold ...

I think we should not mix community help and free services ^^

And, please, you or @mdekker delete the zip joined with your 1st post ;)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...