Download latest version (v184.108.40.206)
You can retrieve your license in Settings.
How to upgrade?
- Fixed 'duplicate' and 'delete' buttons appearing twice in 'Sending' mode
- Fixed blank double opt-in confirmation message when saving list settings without populating the confirmation message
If you're using version 220.127.116.11, just download the updated files and replace them in their respective folders on your server.
Note: If you're using any version lower than 18.104.22.168, please download the full version from the form above and follow the upgrade instructions on the right.
- Updated Redactor WYSIWYG editor to 9.1.4
- Fixed issue with setting font and background colors in the WYSIWYG editor
- Brand selection modal window will not show when duplicating a campaign while logged in as a brand user
- Removed reference to Sendy's API URL in subscribe form HTML code modal window when logged in as brand user
- WYSIWYG editor (instead of HTML editor) now displays by default when creating a new campaign or autoresponder
- WYSIWYG editor no longer removes html, head and body tags
- Updated Redactor to 9.1.1.
- Use SSL when checking user's license and version
- Fixed 'last_campaign' not updated when sending via SMTP
- Include more information in error message if SES quotas displays zeros
- Fixed a bug where bounces & complaints are registered but not shown in report if sending an email with attachments
- Fixed a rare bug where total recipient count shows '0' in the campaign report for some users
- Updated Redactor to version 9.0.4 which fixes a bug where "Ctrl/Cmd + v" is disabled as well as various other fixes
- Handles a rare scenario where sending sending stops at 100% and is unable to finish for some reason
- Trims whitespace of email when using "per line" method for mass delete and unsubscribe
- Users on PHP version 5.3.0, 5.3.1 and 5.3.2 can now use
- Changed displayed currency in 'Define recipients' page to what's selected as your PayPal currency
- Fixed a bug where unsubscribe fails if the plain text unsubscribe tag,
[unsubscribe]is placed inside a href tag, eg.
- Updated Redactor to version 9.0.3
- Converted column type of two tables in campaigns table that stores list ids to "TEXT"
- CSV exports now wraps values in quotes so that values with commas are supported
- Added index to email column for faster CSV import speed
- Campaign will be marked as complete if there are nothing left to send and the number of recipients sent is less than the total number of recipients to be sent due to any reason (eg. some subscribers were manually deleted before or during the sending process)
- Included a new condition to fix a rare occurrence for users on PHP 5.2.17 where emails may fail to send
- Eliminated some timezone warnings
- Appended a period to the subscribe API error message,
Invalid list IDfor consistency with other error messages.
- Fixed a bug in 1.1.7 where sending does not automatically resume
Campaigns RSS feed is now available for each brand (see top right in "All campaigns" page)
Some ways to use the Campaigns RSS feed
- Integrate your campaigns feed with your website or application anyway you like
- Display an archive of your past campaigns on your website or application
- Let your audience subscribe to your RSS feed so they'll get notified whenever you send a campaign. Good for users who prefers RSS over email (or even both)
- Subscribe to your client's RSS feed (if you give access to your clients) to get notified when they send a new campaign
[unsubscribe]tags can now be used in the HTML version of your campaign or autoresponder. These tags will be converted into a raw web version or unsubscribe URL.
- Tweaked and improved sending reliability
- Webversion, unsubscribe and email tags as well as API key, license key and cron job commands can now be selected with one click (no need to click and drag to select text)
- You can now include non alphanumeric characters (eg. commas) in your 'From name' (hat tip: Michael Gordon)
- You can now have quotes in custom field values
- "Thank you", "Good bye" and "Subscription confirmation" emails will now fallback to use SMTP if settings are available and if Amazon credentials are not set in Settings
- Updated Font Awesome to 3.2.0
- Subscribe API now returns "Invalid list ID" if an invalid list ID is passed in
- Settings now checks if login email already exists in database when saving
- Changing the "i" variable in the URL at the Define Recipients page will now redirect user back to their own brand when logged in as a 'brand' user.
- Checking if 'From email' is verified when creating or editing a brand will only be done if AWS credentials exists in Settings
- Added 'To name' to 'To' field when sending campaigns and autoresponders
- Fixed a bug where autoresponders may not send to 2 or more emails sharing the same date value
- Changed API key generation method on installation
- Use "utf8" character set for newly created tables
- Changed "x clicked" to "x unique clicks" in reports
- Fixed a bug where subscriber's name and email cannot be edited in subscribers info card
- Fixed a bug where emails cannot be sent when not using a cron job for sending newsletters
- Fixed a bug in 22.214.171.124 where 'rn' string is added to
<textarea>fields after saving
- Further enhanced security by escaping ALL inputs for ALL scripts (62 files in total) even if they are protected by authentication
- Validate data POSTed by Amazon to bounces and complaints handling scripts before querying database
- Fixed a bug where recipient count not aren't incrementing when using other SMTP to send campaigns instead of Amazon SES
- Fixed a bug where brand owners aren't able to send emails when using languages other than English
- 'Campaign sent' confirmation email now delivers to both the 'brand user' and 'main account user' as well if a cron job is not setup for sending/scheduling emails
- Re-organized /includes/config.php file
- Sendy sets database character set to utf8 by default. For users who's language requires other types of encoding to display text properly, eg. Chinese, Vietnamese, etc, add this line to /includes/config.php eg.
$charset = 'utf16'.
- Added support for including a line eg.
$server_path = '/path/to/sendy/folder/'in /includes/config.php to fix rare issue with PHP 5.2.17 returning an empty value for
$_SERVER['SCRIPT_FILENAME']that affects importing of CSV via cron
- Use ENT_QUOTES,"UTF-8" flag for htmlentities method
- cURL operations now checks for validity of remote SSL certificates for enhanced security. A CA certificate bundle is also included in this build in case it is not installed on the server by default which will cause certificate validation to fail.
- Escape user inputs for more scripts that are not protected by login authentication
- 'Resume' button will be removed if cron is detected to be setup for sending as sending will automatically resume if sending time out
- Your gravatar now appears beside the 'company name' at the top left
- Updated favicon and AJAX loader gif for retina displays
- Updated Redactor WYSIWYG editor to the latest version (with retina display and mobile support)
- Changed WYSIWYG editor to 'iframe mode' so that your layout looks exactly like how it should
- Switched to Font Awesome for icons (looks great on retina display, or not)
- Added interface icons to some buttons without icons (for consistency)
- All tables are now responsive (for your mobile viewing pleasure)
- Installation page now checks for 'gettext' module
- Converted more text to translatable strings that were previously missed out when translation support was introduced in 1.1.5
- Set database charset to utf8 whenever a connection to the database is established
- Apply 'htmlentities' method for displaying campaign titles
- Check that 'From name' does not contain commas before saving as emails will not send with commas in the 'From name'.
- Escape quotes in translated texts in form validation messages
- Fixed failure to toggle WYSIWYG editor when using languages other than English
$HTTP_RAW_POST_DATAreturns empty value in bounces.php and complaints.php on some servers
- Checking of sending time outs will be stopped in case user clicks "Resume" while already having cron resume sending when sending time out which will eliminate possibilities of sending an email to a recipient more than once.
- Found and fixed the root of the issue with emails containing attachments not being able to send if attachment size is more than 500+ kb.
- Fixed AJAX progress script for campaigns failing when a campaign is 'Preparing to send'
- Fixed subscription confirmation email body content being blank in some cases
- ID encryption now handles openssl_encrypt not able to encrypt IDs, e.g.. if Sendy is accessed via "https"
include_onceerror when Sendy is used in older versions of PHP that may cause subscribe and unsubscribe not to work and newsletter preview in "Define recipients" page to return a 404 error
- Fixed bug where campaign cannot be saved when using apostrophes in the subject title
- Fixed a minor bug where campaigns does not "auto resume" when server times out.
- Fixed a bug where recipients aren't able to unsubscribe on servers without support for 'openssl_encrypt'
- Localization support. You can now translate Sendy into any language. Language can be set for the main account user or any brand account user. See how to translate Sendy.
- You can now import CSVs via cron. With cron, there's no need for your browser window to be opened while importing. Sendy will also automatically resume import if your server timeout. This is especially useful when importing large CSVs as everything will be handled in the background.
- Speed up loading of lists and subscribers
- Shows progress of CSV import in realtime (when importing using cron job)
- Progress of currently sending campaigns can now be viewed in realtime as well (you no longer need to refresh the campaigns page)
- You can now mass unsubscribe users from a list
- You can now print reports with header and sidebar removed. Some font colours have been changed for more legibility in the printed report.
- 'Define recipients' page now checks if 'From email' is verified in your Amazon SES console. If 'From email' is not verified, an instructional message will be displayed and all sending buttons will be disabled
- When creating or editing a brand, your 'From email' will now be checked to see if it's verified in your SES console. Instructional message will be displayed if the 'From email' is not verified.
- Sendy now checks if bounces and complaints have been setup (and will remind you if they're not set up) before sending out your campaign. Checks will only be done once per 'From email' unless bounces or complaints have not been setup for the 'From email' in question.
- You can now export CSVs of recipients who clicked a specific link in the report
- Show which lists were being sent to in reports
- 'Campaign sent' confirmation email will now be sent to both main account user and brand account user
- Soft bounce status of any emails will now be reset if the next email sent to it was successful and did not soft bounce
- Support for specifying a custom database port
- All IDs are now encrypted with AES-256-CBC encryption method (used by the U.S. government to encrypt top secret documents) and hashed with your API key. This makes URLs of web versions, open tracking, link tracking, subscribes and unsubscribes even more secure.
- Emails passed as GET variables in subscribe and unsubscribe URLs are now encrypted with AES-256-CBC encryption method and hashed with your API key as well
- Escape user inputs for scripts that are not protected by login authentication
- Uploads via WYSIWYG editor now includes authentication and checks for allowed file types (jpg, jpeg, png, gif)
- Changed jQuery to version 1.9.1
- If SES quota is unable to be retrieved, an error message will be displayed with a suggestion for the fix
- Checks if any lists were selected when clicking the 'Schedule campaign now' button
- Send "forgot password" email via Amazon SES if AWS credentials is set in Settings
- Show error messages if login details are missing or invalid
- Domain will now be checked right before the installation page is loaded when visiting the installation page
- Displays a helpful instructional message when getting a 404 error after installation
- Additionally check for mysqli, curl_exec and curl_multi_exec during installation
- Fixed a bug where sending emails with an attachment of more than 500kb won't be received
- If two campaigns are scheduled at the same time and date, they will now be sent out one after another
- Various bug fixes and enhancements
- Added support for attachments! You can now attach one or multiple attachments to your campaigns or autoresponders. Refer to supported attachment types appendix.
- Added 'subscription status' API. Check if an email is subscribed, unsubscribed, unconfirmed, bounced, soft bounced or complained from a list.
- Added 'active subscriber count' API. Get the total active subscriber count from any available list.
- You can now edit double opt-in confirmation email subject and content (the email with the confirmation link)
- Replaced original MySQL functions with MySQLi ahead of the latest PHP 5.5.x version (currently in alpha).
mysql_*functions will be deprecated starting from PHP 5.5, this update uses
mysqli_*functions, thus making Sendy future proof.
- Edited the entire codebase to remove PHP warnings and notices as much as possible even though they don't affect functionality.
- Throttle sending to the EXACT amount of microseconds needed.
- Pagination in 'Recent campaigns' and 'Reports' sections
- Save content when switching from HTML to WYSIWYG editor and vice versa (applies to both campaign and autoresponder email editors).
- Redirect to previously attempted URL after login
- Sending and scheduled buttons will be disabled for users logged in as brands when selecting a combination of list with more recipients than Amazon SES quota allows.
- Removed tooltip when hovering over trash icon in subscriber list as it may cause flickering on small screens resulting in difficulty deleting a subscriber.
- Better layout for database and license error messages.
- When new update is available, the 'get updated' link in footer will include user's license so the license field will be pre-populated.
- Clearer placeholder text for setting login email and password on installation page.
- Support for dashes and question marks in custom field names.
- Include a note in sidebar that says sending via your server is not recommended when no AWS credentials is available in settings.
- Added an extra check before sending the 'campaign sent' confirmation email.
- Fixed a small bug where 'Last 10 opened' in report shows two of the same recipients when there are exactly two recipients who currently opened the email.
- Removed an extra IP address generated by some servers when using PHP's getenv() function.
- Trimmed spaces in email when using line import to prevent duplicates from slipping through.
- Set CURLOPT_SSL_VERIFYHOST and CURLOPT_SSL_VERIFYPEER to 0 to prevent sending failure when sending without using cron on some servers.
- Check if function exists for geoip_country_name_by_name() and geoip_country_code_by_name().
- Changed comment in .htaccess from 'Open tracker' to 'Web version'.
- Removes large query string data after setting 'sent' as '1' in the queue for every email sent. This dramatically reduces database size and increases sending speed by 4x.
- Changed queuing method. Each email record in the queue will be marked as sent when sent instead of deleting the email record. The entire queue for a particular campaign will only be deleted once all emails are sent. Also added a conditional statement to check if an email already exist in queue before adding. These measures are to doubly ensure no duplicates will be sent in all cases.
- Re-adjusted multi-threading code so it does not rely on curl_multi_select(). Later versions of PHP like 5.3.18 loops multi-threading code until timeout as it always returns failure code instead of correct number of parallel connections.
- Allow delivery fee and fee per recipient to have up to 3 decimal points instead of 2 so that a value of less than 1 cent can be used
- Fixed a bug where send button is not enabled after being disabled when selecting one or more list that contains more subscribers than SES quota allows
- Handles certificate error for all CURL operations that causes sending to fail on some servers
- Handles plus signs in emails when unsubscribing and subscribing
- Further improved multi-threading code
- Now features 'automatic retry' when any email was not sent through for any reason.
- 'http error code' and 'subscriber id' will be captured in the database for any reason Amazon SES was unable to deliver an email. Also available as a CSV download.
- Removed timezone warnings when sending
- Pause sending for 0.7 second after every burst of emails sent with multi-threading
- Required PHP version is now 5.2 instead of 5.0 because of parallel curls
- Even more robust CSV import. Improved handling of line endings, encoding, etc.
- Added home screen icon for iOS devices
- Improved layout of Sendy when viewed in mobile devices
- You can now edit individual subscribers name, email and all available custom fields when viewing a subscriber card
- Fixed subscriber card showing 'Subscribed' when the user is 'Unconfirmed'
- If list is 'double opt-in' and user was previously subscribed, resubscribing will not mark their status back to 'unconfirmed'
- Fixed a bug where a subscriber re-subscribes to a 'double opt-in' list from an unsubscribe link results in having their name removed
- You can now change your client's login email when editing a brand
- Email preview now displays via lightbox in campaign and autoresponder reports
- Fix a bug where scheduled email title in black rollover tooltip displays list names repeatedly if there're more than one scheduled email
- Fixed a bug where hard bounce wasn't registered after 3 soft bounces.
- Tweaked a line of code in CSV import script that fails to check for duplicates in some situation
- Fixed a problem where 'queue' table was not created in the database of some users for some reason resulting in emails not being sent.
- Fixed a bug where a column responsible for storing SES send rate wasn't added to the respective table
- Also removed a line in cron sending script that redundantly increases the 'currently sent' recipient count
- Fixed a bug where the recipient count did not tally with Amazon SES
If you haven't checked out 1.1.0 released 3 days ago, view the 1.1.0 change log to see what's changed. Multi-threading and auto resume are now supported. Get ready for high speed sending! :) If you've already upgraded to 1.1.0, sorry for releasing an update so soon.
- Optimized multi-threading code
- Tweaked a variable to fix Amazon SES quota showing 'zeros' for some users
- Removed (non critical) duplicate condition in mySQL query when importing CSVs
- Apart from already checking for duplicates, Sendy now checks for invalid emails as well when importing via CSV or per line
- Automatically set timezone of drop down menu in 'Define recipients' page to the timezone set in Settings so you don't have to keep selecting it each time you schedule an email
- Subscribe form and API now returns
Already subscribed.if email is already subscribed and 'active' in the list. You may want to adjust your existing code to handle this new output. If you're worried that the subscribe form and API previously don't check for duplicates, don't worry, it does. Just that it doesn't output
Already subscribed.previously. Now it does!
Multiple emails are sent in parallel according to your SES send rate resulting in huge improvements to sending speed.
- Auto resume
Especially for BIG senders, sending will automatically resume even if your server times out. Just make sure cron is set up.
- SMTP is now supported. Note that Sendy is built for Amazon SES, we built in SMTP so that there's an option. Bounces and complaints won't be registered if emails are sent using SMTP. The same goes for if emails are sent via your server (if AWS credentials is empty in Settings).
- You can now set your timezone via Settings
- Loading of lists is now faster. Query for counting of total subscribers, unsubscribes and bounces are now optimized. Users of huge lists will notice a big difference.
- Subscriber search will now search through custom fields
- Personalization tags are now supported in links.
- 'a href' codes in HTML body does not need to be in a specific order for Sendy to detect it as a link.
<a href="" style="">and
<a style="" href="">both works
- The 'schedule' button will now be disabled if the combined subscriber count of the selected lists exceeds SES daily limit
- Fixed a pagination bug in 'Marked as spam' tab in subscribers where clicking to the next page does not load 'Marked as spam' subscribers
- Fixed a bug where email is not displayed in subject line in autoresponder emails page when [Email] tag is used
- Fixed a bug where saving fails when there are quotes in the subject line when editing a campaign
- Fixed a bug where deleting a campaign fails as a result of quotes in the subject line
- Various fixes & improvements
We are excited to announce - Autoresponders!
You can now create autoresponders. There are 3 types of autoresponders you can create, namely, drip campaigns, emails that sends annually or on a specific date based on a date based custom field.
- You can now personalize email subject with tags just like you would the email body (applies to campaign & autoresponder emails)
- You can now send test emails to multiple recipients separated by comma
- Soft bounces are now handled - If an email 'soft bounced' thrice, it'll be converted to a 'hard bounce' so that future emails will not be sent to them
- If no AWS credentials is available in settings, campaign sending page will not check for SES quota as emails will be sent by the server
- Re-designed 'campaign sent' confirmation email
- Newsletter preview in campaign sending page is now forced to load a fresh copy (prevent loading from browser's cache)
- CSV or line imports will now be scrubbed against previously marked as bounced emails. Emails that have been previously marked as bounced (no matter which list they belong to) will not be imported.
- Improved retrieval of bounce/complaint data from SNS notification
- Resume button's 'id' is now unique in a list of currently sending campaigns
- More secure login
- Fixed bug where sending a test email displays 'Your campaign is now sending'
- Various fixes & improvements
- Custom fields are now supported. This paves the way for list segmentation and auto responders which we're currently working on
- Allow import of CSV with custom fields, adding of subscribers via subscribe form or API supports custom fields as well
- Subscriber info card displays custom fields alongside name & email
- CSV export includes custom fields if available
- You can now add personalization tags in Plain Text & HTML versions when creating/editing a campaign (eg. name, email and custom fields personalization tags)
- Webversion and unsubscribe tags now works in Plain Text version
- Slashes are stripped in Plain text version field when editing a campaign
- Added personalization tag reference when creating a campaign
- Better instructions in CSV import page
- Smarter duplicate checking and data cleaning when importing subscribers
- Remove quotes (if values in CSV were wrapped in quotes)
- Campaigns will now send via CRON if CRON has been set up. If CRON is not set up, a message below the sending button will recommend user to set it up.
- If CRON is not set up, campaigns can still be sent
- 'Schedule this campaign?' button will be hidden from your client if CRON is not set up
- Total recipients will be displayed live as you select lists to send to on campaign sending page
- If the total recipients you're trying to send exceeds your SES daily limit, the send button will be disabled
- If your SES quota is 200 and you try to send a campaign, user will be prompted to request for production access
- If sending campaign to multiple lists, Sendy will check for email duplicates between lists to prevent sending to a recipient more than once
- Trim whitespace from email when unsubscribing even though unsubscribe links already have whitespace trimmed when sending out a campaign
- Unsubscribing will not unsubscribe from all brands but will instead unsubscribe from all lists if "All lists" is selected under unsubscribe settings
- Form validation across the app
- Display missing dollar sign when editing a brand with the currency not set
- Fixed "From email" from disappearing when saving a campaign while logging in as a client
- Eliminate possibility of client changing URL to access reports or subscribers from other brands
- Sendy now handles SNS subscription confirmation for bounces and complaints automatically, there's no need to click a link to confirm an SNS subscription
- CSV export now omits the last extra empty column
- Fixed scheduled emails not respecting timezone in some occasions
- Many other fixes & enhancements
- You can now export subscriber segments from a report! Eg. export CSV of subscribers who clicked, opened, unsubscribed, bounced, marked as spam or subscribers from any country
- Sendy now handles complaints. When a user marks your email as spam, their email will be flagged so no future emails will be sent to them. To enable complaints, please complete Step 8 in the Get Started Guide.
- Able to view (and filter) subscribers who marked your email as spam in subscriber lists (you can export them as well)
- Editing of "From email" is now disabled for your clients to prevent them from changing it to another address that has not been verified at Amazon SES
- Changed displayed currency in brand editing page to what's selected as your PayPal currency
- Set brand's favicon URL to use https and changed default favicon image
- Trimmed whitespace of emails in unsubscribe links so that unsubscribes won't break
- Fixed "adding of subscribers per line" not checking for duplicates
- Fixed bug with incorrect unsubscribe numbers/percentage in report when "unsubscribe from all lists" option is selected in list settings
- "Last 10 opened" in reports now show unique subscribers no matter how many times they open
- Tweaked timezone function for timezone drop down selection when scheduling campaigns
- Decode special characters in links pulled from the database when redirecting users to the actual URL
- Fixed scheduled emails not respecting timezone
- CSV export now omits the last extra empty column
- You can now duplicate campaigns from any brand to any brand
- Added "Resume" button to resume sending of campaign if sending stopped for some reason (eg. due to server timeout especially on shared servers)
- If you chose Double Opt-In as your List Type, you can now set a custom URL for the final confirmation page (after user clicks the confirmation link)
- Subscribes & unsubscribe scripts (via form or API) now handles invalid email addresses
- Installation now checks for existing table name conflicts with Sendy instead of checking for an empty database
- Removed allow_url_fopen requirement
- You can now set list settings for subscribes (double opt in, signup success URL, send email upon successful signup) and unsubscribes (option to unsubscribe from all list, unsubscribe confirmation URL, send email upon user unsubscribe)
- Added filter tabs in subscriber pages, you can now filter subscribers by all, active, unconfirmed, unsubscribed and bounced
- Ability to export subscribers as CSV according to their status (eg. all, active, unconfirmed, unsubscribed, bounced)
- Added icons to sidebar menu
- Added Amazon SES Quota sidebar to edit-brand.php, new-brand.php and settings.php
- Unsubscribe from all lists by default (can be changed in the new list settings)
- Installation file now checks for server compatibility
- Remove attempt to turn allow_url_fopen on and turn errors off
- You can now schedule emails to send at a later time!
- Added subscribe form code in individual list pages
- Clicking on individual user launches a modal window that shows opens and clicks history
- Added subscribe & unsubscribe API based on HTTP POST
- Added "Last 10 Opened" in reports
- Check for new versions of Sendy every 24 hours
- Added timeline graph to subscribers view so that you can see subscriptions over time
- Users can create login password for brand owners, edit currency, delivery fee and cost per recipient
- Enable individual brand owners to login with their account credentials, to manage their own subscribers and send newsletters at a fee set by you
- Brand owners will be required to pay for campaign via PayPal before campaign is sent if you've set a delivery fee and cost per recipient
- You can now set a PayPal account email address in Settings
- Removed "on" when displaying date
- More organized Settings page
- Display API & license key in Settings
- Exclude bounced emails from opens, clicks and unsubscribes percentage calculation
- More helpful error message for database error
- Your company name will now be displayed in login page (at top left)
- Sendy will now check for new versions and display in footer if new versions are available
- Display multi-select list by name ASC
- Return error if user logs in with an empty email or password
- Tweaked method of sending script running in the background thus improving email sending reliability
- Prevent timeout when sending
- htaccess fix for GoDaddy servers
- Improved loading performance for report charts and graphs
- Added WYSIWYG editor with option to turn it ON or OFF per campaign
- Fixed some alignment problems with newsletter composing layout
- Unzip the downloaded zip
/includes/folder in your current Sendy installation to the
/includes/folder in the new build you've just unzipped
- Transfer any language files (except English) from your current Sendy installation to the
/locales/folder in the new build you've just unzipped
- Delete the
/uploads/folder from the new build in order to keep your current
/uploads/folder contents intact on your server
- Delete the
.htaccessfile from the new build if you've previously made any modifications to it on the server
- Upload all files from the new build into your Sendy installation directory replacing all files