Jump to content
thirty bees forum

Question

Posted

I wish I could get this newsletter module working in TB. It lets you send newsletters right from your site. It works, right up to the point that you tell it to send out a newsletter, then it white screens....

mdekker EDIT: attachment removed due to copyright

Recommended Posts

  • 0
Posted

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);
}

} ```

  • 0
Posted

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

  • 0
Posted

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

  • 0
Posted

Right it is now a paid module, the old free one, that I have, works on old PS 1.6.0.5 or so, before they changed the Swift package. Ive got it almost working, right upto the point you actually send the emails. grr.....

  • Like 1
  • 0
Posted

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

  • 0
Posted

Hi @SLICK_303,

My module adapts its Swift calls according to Prestashop versions (before 1.6.1.15 or after)

You can rewrite the code your way, but there have been several changes since the last free version ^^

  • 0
Posted

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. :)

  • 0
Posted

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 ;)

  • 0
Posted

@mdekker At that moment, I was naive and credulous ^^

But the world of e-commerce is rather rough, in fact

Finally, do what you want ...

  • 0
Posted

sure, sure. It had no license either way I think. The top of newletteradmin.php is simply...

/** * Send a Newsletter from the Prestashop Back-Office * @category admin * @author Eolia 2015 compatible PS >= 1.5.x.x ONLY ! * @version 5.8 * */

  • 0
Posted

it's all good, you removed it, I won't add it again, we're all good, I hope? ;) ITs a great module, you need to advertise it here. (in the modules thread of course) :)

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...