Jump to content

Opionions and Experiences on Sendy (Newsletter-Tool)?


Orkun
 Share

Recommended Posts

Hi Guys

We are looking for an alternative to MailChimp for managing Newsletters, Subscribers, Campaigns, Lists etc... While searching for a new Tool I discovered Sendy. It looks like a decent Webapp/Newsletter-Tool to manage Newsletters, Lists, Subscribers, Campaigns etc... The Mails are sended with Amazon SES and it is way cheaper than Mailchimp. And it is also a self hosted Tool. 

Has someone some Experience and Opinions on Sendy in general and also in combination with ProcessWire (Module, Integration etc...)?

Do you also know other Solutions / Alternatives rather than Mailchimp?

 

1237472416_Bildschirmfoto2018-05-15um11_51_21.thumb.png.16abe28476a45da6914c3105f255b7a5.png

 

Kind regards
Orkun

  • Like 1
Link to comment
Share on other sites

Newsletter-Tools... the reason why I prefer Mailchimp, CampaignMonitor, and similar solutions:

I don't have to invest in servers, several IP addresses and maintenance.
I don't have to take care of blacklists, spam-prevention-configurations, routings and all that technical stuff.

Mailchimp & Co. do this for me. They want my money and they want me to be happy with their service.

Self-hosted solutions never worked for me, the companies I worked for, clients and most people I know who do newsletter-marketing.

Just my opinion. It may work really well for you.

  • Like 1
Link to comment
Share on other sites

The module source is below.

Example usage: a checkbox on a contact form (using Form Builder) for the user to subscribe. 

It's used on https://ricardo-vargas.com/contact/

EXAMPLE

A method on _hooks.php. If you don't use Form Builder, use this code on your form page.

$forms->addHookBefore('FormBuilderProcessor::emailForm', function($event) {

    $processor = $event->object;

    if ($processor->formName == 'contact-form') {
        $formData = $event->arguments(1);

        $contact_name = $event->sanitizer->text($formData['contact_name']);
        $contact_name = substr($contact_name, 0, 30); // limit length further
        $contact_name = $event->sanitizer->emailHeader($contact_name);

        $contact_email = $event->sanitizer->text($formData['contact_email']);
        $contact_email = $event->sanitizer->emailHeader($contact_email);

        $processor->emailFrom = $contact_email; //reply to
        $processor->emailSubject = 'Message from '.$contact_name;

        
        $form = $event->object->getInputfieldsForm();
        $subscribe = $form->get('receive_updates');
        $list_id = $form->get('sendy_list_id')->attr('value');

        // check to see if they subscribed
        if ($subscribe->attr('checked')) {
            
            $success_url = '/contact';
            // $fail_url = '/contact?error=1';

           
            $ProcessSendyAPI = wire('modules')->getModule('ProcessSendyAPI');
            $ProcessSendyAPI->subscribeInSendy($contact_name, $contact_email, $list_id, $success_url);


        }
    }
});

MODULE

https://gist.github.com/sjardim/2d834ebb0bd66d4da1ac16072f4075cd

<?php namespace ProcessWire;

class ProcessSendyAPI extends WireData implements Module, ConfigurableModule
{

    public static function getModuleInfo()
    {
        return array(
            'title' => __('Process Sendy API'),
            'summary' => __('Handle API calls to a Sendy installation'),
            'author' => 'Sérgio Jardim',
            'version' => '001',
            'singular' => true,
            'autoload' => false,
            'icon' => 'envelope'
        );
    }

    /**
     * Data as used by the get/set functions
     *
     */
    protected $data = array();

    /**
     * Default configuration for module
     *
     */
    static public function getDefaultData() {

        return array(
            "sendy_api_key"          => '',
            "sendy_installation_url" => 'http://www.example.com/sendy'
        );
    }

     /**
     * Populate the default config data
     *
     */
    public function __construct() {
       foreach(self::getDefaultData() as $key => $value) {
               $this->$key = $value;
       }
    }

    public static function getModuleConfigInputfields(array $data)
    {
        $data = array_merge(self::getDefaultData(), $data);

        $wrapper = new InputfieldWrapper();

        $f = wire('modules')->get('InputfieldText');
        $f->attr('name', 'sendy_api_key');
        $f->label = __('Sendy API Key', __FILE__);
        $f->description = __('Further instructions at  https://sendy.co/api', __FILE__);
        $f->notes = __('Get your key at http://your_sendy_installation/settings.', __FILE__);
         $f->value = $data['sendy_api_key'];
        $wrapper->add($f);

        $f = wire('modules')->get('InputfieldURL');
        $f->attr('name', 'sendy_installation_url');
        $f->label = __('Sendy instalation URL', __FILE__);
        $f->description = __('Your Sendy installation URL without a trailing slash', __FILE__);
        $f->notes = 'http://www.example.com/sendy';
        $f->value = $data['sendy_installation_url'];
        $wrapper->add($f);

        return $wrapper;
    }

    /**
     * [subscribeUserOrGuest description]
     * @param  [type] $name        [description]
     * @param  [type] $email       [description]
     * @param  [type] $list_id     [description]
     * @param  [type] $success_url [description]
     * @param  [type] $fail_url    [description]
     * @return [type]              [description]
     */
    public function subscribeInSendy($name, $email, $list_id, $success_url = null, $fail_url = null)
    {
        $api_key = $this->data['sendy_api_key'];
        $sendy_url = $this->data['sendy_installation_url'];

        $postdata = http_build_query(
            array(
            'name' => $name,
            'email' => $email,
            'list' => $list_id,
            'boolean' => 'true' //set this to "true" so that you'll get a plain text response
            )
        );
        $opts = array('http' => array('method'  => 'POST', 'header'  => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata));
        $context  = stream_context_create($opts);
        $result = file_get_contents($sendy_url.'/subscribe', false, $context);

        //check result and redirect
        if($result) {
            $this->wire('log')->save("newsletter", 'A new user subscribed to the site mailing list: '.$email);
            
            if($success_url) {
                header("Location: $success_url");
            }
            
        } else {
            $this->wire('log')->save("error", 'Error occurred on subscribing '.$email);
            
            if($fail_url) {
                header("Location: $fail_url");
            }
        }
    }

}

 

  • Like 7
Link to comment
Share on other sites

1 hour ago, Nukro said:

Has someone some Experience and Opinions on Sendy in general and also in combination with ProcessWire (Module, Integration etc...)?

Sendy is great if your budget is small AND you need to send emails to a lot of people (10k+). Mailchimp is incredible, but the price for small business is not so good, especially when a dollar is almost 4 times your currency (Brazilian Real) ?

Just keep an eye on your AWS SES reputation dashboard, for complain and bounce rates.

  • Like 3
Link to comment
Share on other sites

  • 2 weeks later...

We have a customer using Sendy for about 6 months now, no problems, about 100k+ newsletters sent.

Agree with @Sergio, keep an eye on SES dashboard as it's feedback is not visible in Sendy.

We integrated it with Processwire, in as much as we built simple pages(form) where end user adds images and text for a newsletter. This then gets sent to Sendy as HTML Email and a Campaign all ready to go. 

The concept was to simplify and shield user from complexities of making HTML EMails. We used the Zurb Foundation as the base templates for the HTML EMail code. With Processwire we then merge template and end user form input and send to Sendy via it's API.

The calculator on the Sendy.co web site is correct. The AWS SES cost to date for the 100k+ mails is about $USD 10.  The clients savings from previous provider for same qty of mailings is approx. $USD 1,000.

For a small business this really is significant. Actually, to any business.

However, companies like Mailchimp and others are providing a good service, pre built templates, email designs, wizards, security etc... which you are going to have to do yourself to some extent if you go the Sendy route.

 

 

 

 

 

  • Like 5
Link to comment
Share on other sites

 Share

×
×
  • Create New...