Always ensure you are up to date with the latest version of Sendy. Older versions are no longer supported as newer versions have lots of fixes and improvements over the old ones. The current version is 6.1.1.
As below are answers to common problems that users may encounter. Hint: Press Cmd + F (Mac) or Ctrl + F (Windows) and type in the keywords to your issue to jump directly to the FAQ if it exists.
Can't find your answer below? Try searching Sendy's support forum, post your question there or email for support. Please note that support is only provided for the latest version of Sendy.
162.243.225.110
and amazonaws.com
.https://your_sendy_installation_url/_compatibility.php?i=1
and make sure curl
and curl_exec
is enabled. If either module is not enabled, please contact your hosting support to install them on your server.session.save_path
is probably set to the /tmp
directory, or a directory that's set to empty itself daily. This directory is emptied by the server daily so when you attempt to login, the cookies that was previously saved in your browser won't match the session data because the session directory is emptied. If you delete cookies in your browser and try logging into Sendy again, you'll realise it will work.session.save_path
to another permanent directory instead of /tmp
(or a directory that's set to empty itself daily). Don't forget to give the new session directory 'write' permissions. Contact your hosting provider if you're unsure how to do this.'http://your_sendy_installation_url' is a dummy placeholder URL for APP_PATH in /includes/config.php
.
You need to set the APP_PATH in /includes/config.php
to your Sendy installation URL.
Eg. if your domain is https://mydomain.com and you uploaded Sendy to /sendy/
folder, your APP_PATH is 'https://mydomain.com/sendy'.
Check Sendy's .htaccess file
Please check the .htaccess file in Sendy's directory on your web server and ensure the following:
Ensure you're installing Sendy on Apache, not Nginx
Please note that Sendy is not officially tested on Nginx. Sendy is only officially supported and tested on Apache as described in the FAQ on Sendy’s website https://sendy.co/#faqs-buy.
However, based on other users who installs Sendy on Nginx, you may need to do a “proxypass over to Apache”. You will also need to change Sendy's .htaccess file to an Nginx compatible web config - some of the following links may help:
Sendy uses URLs without extensions, also known as 'Pretty URLs'. Instead of using URLs that ends like this /login.php
, it uses URLs that ends like this /login
. If you get a 404 error at the login page after installation, check the following list:
RewriteBase /sendy
after the line RewriteEngine On
in Sendy's .htaccess file (if your Sendy URL looks like this https://mydomain.com/sendy). Or add RewriteBase /
if your Sendy URL looks like this https://sendy.mydomain.com.AllowOverride All
is set in your Apache's httpd.conf instead of AllowOverride None
so that Sendy's .htaccess file is not ignored by your server. Remember to reboot Apache after making changes to httpd.conf.Try removing Options +FollowSymLinks
from Sendy’s .htaccess file and try again.
If it does not work, try removing Options -Multiviews
as well.
functions.php
file is present in the /includes/
directory. Some hosts automatically deletes the file thinking that it has malware due to it being obfuscated. If it is missing, re-upload it. Also contact your hosting provider to flag the file as safe so that it won't be automatically deleted again.https://your_sendy_installation_url/_compatibility.php?i=1
(replace https://your_sendy_installation_url
with your own Sendy installation URL) and check that mysqli extension
is installed on your server. If otherwise, contact your hosting support to install mysqli extension
on your server./includes/config.php
. The text or code editor you used to edit the /includes/config.php
file may have converted the apostrophes to non-standard apostrophes causing this issue./includes/config.php
. This will cause a 'headers already sent' error that'll halt the script, preventing it from redirecting you to the installation page.functions.php
file exists in the /includes/
folder and re-upload it if it is missing. Some hosting companies errorneously remove files without your knowledge via anti-virus softwares or scanners. If this is the case, contact your hosting provider to whitelist both /includes/functions.php
and _install.php
files.There's really no other reason why you're getting this error other than the following.
/includes/config.php
. The text or code editor you used to edit the /includes/config.php
file may have converted the apostrophes to non-standard apostrophes causing this issue.username
column in login
table on the first row) have a "space" appended or prepended to it. If so, remove it. Then try logging in again./includes/config.php
to the "www" version of your Sendy URL. For example, try 'http://www.mydomain.com/sendy' instead of 'http://mydomain.com/sendy'./includes/config.php
to the 'http' instead of 'https' version of your Sendy URL. If so, set the APP_PATH to the 'https' version of your Sendy URL. For example 'https://mydomain.com/sendy' instead of 'http://mydomain.com/sendy'.session.save_path
is set correctly and is writable as session variables can't be saved resulting in you not being able to log in.Please ensure your main account login's email address is verified in your Amazon SES console otherwise the 'forgot password' email will fail to send. If you've already done that and the email is still not in your inbox, please check your spam folder.
Alternatively, reset your password in your database directly via phpmyadmin by following these steps → https://sendy.co/forum/discussion/2277/how-can-i-manually-reset-a-password-in-the-database-using-phpmyadmin/p1
domain.com
, setting your custom domain as 'domain.com
' will not work as it is already pointed to your website. Use a sub domain name instead as your custom domain, eg. 'newsletter.domain.com
'.CNAME
record in your custom domain's DNS where it is hosted as instructed in your brand settings. You can check if your CNAME
record have resolved fully to your Sendy installation domain using a DNS propagation checker. If it is not resolving, please contact your DNS hosting provider for help.A
records' for the custom domain you're trying to setup. You only create a CNAME
record as per the instructions.If your CNAME
has been created and fully resolved, but when visiting your Sendy installation with the domain name replaced with your custom domain does not load your Sendy login page, you may need to create an 'Alias' for the custom domain.
If you are using cPanel:
If you are not using cPanel, please contact your hosting provider on how to add an alias.
If you are using a cloud server where you access your server via SSH, you'd need to add a ServerAlias your.custom-domain.com
into your VirtualHost
.
Please see the example below:
<VirtualHost *:80> ServerName your-main-domain.com ServerAlias your.custom-domain.com DocumentRoot /var/www/html ErrorLog /var/log/error_log </VirtualHost>
When you first signup for an AWS account, your Amazon SES account will be in 'Sandbox mode'. In sandbox mode, you can only send emails to email addresses and domains that you've verified in your Amazon SES console. Also, your daily sending limit is only 200 emails per day. Hence, you need to request Amazon to move your Amazon SES account out of sandbox mode, so that you can send emails to a larger number of people and also to any email addresses and domains you want.
The following is a guide on how to fill up the request form.
Visit the 'Request production access' request form.
Mail type: Select either 'Marketing' or 'Transactional'
Website URL: Enter your website's URL. Your website helps Amazon understand what kind of content you plan to send.
Check the checkbox to agree to their terms, then click the 'Submit request' button to submit your request.
You will usually receive a respond back from Amazon asking you for more information about your use case. In your reply, write who you're going to send emails to and how you built your list. Amazon wants to know that you'll only send emails to people who signed up to receive them. The details that gives you a good chance of approval are:
If you already have production access for your Amazon SES account (out of sandbox mode), you can request Amazon to raise your daily sending limit to a larger number if you need.
The following is a guide on how to raise your Amazon SES daily sending limit.
Visit Amazon SES's Service Quotas dashboard.
Select the 'Region' where your Amazon SES account is in production mode.
After you've selected a region, check the radio button next to 'Sending quota'. Then click the 'Request quota increase' button.
A modal window similar to the screenshot below will appear. Enter a number that you want to increase your daily sending limit to. Then submit your request by clicking the 'Request' button at the bottom.
Just like sending performance, the speed and performance of bulk importing subscribers using CSV files is dependant on the capability of the server you are using.
Tip 1
Try increasing the following values in your server's php.ini. Contact your hosting support if you're unsure how to do this.
upload_max_filesize
post_max_size
memory_limit
max_input_time
max_execution_time
(set to 0 so that execution won’t time out indefinitely)Don't forget to reboot Apache after modifying the above values in your server's php.ini so that the changes take effect.
Tip 2
Or add the following lines to your Sendy's .htaccess file after the last line of code. Please note that your server's PHP should run as 'Apache module' and not 'CGI mode' otherwise the following lines will not have any effect. Please contact your web hosting support if you're unsure.
php_value upload_max_filesize 1024M php_value post_max_size 1024M php_value memory_limit 1024M php_value max_execution_time 0 php_value max_input_time 9999
Tip 3
Alternatively, try splitting your huge CSV file into several smaller sized CSV files and import them one after another.
Version 6.0 and above
Simply click the 'Stop' button on the list item to stop the import.
Version 5.2.6 and above
If the list you're currently importing a CSV file into has zero subscribers, you can just delete the list, then re-create the list.
Otherwise, if your list has existing subscribers, do the following to stop a CSV import that's currently importing:
/uploads/csvs/
folderlists
table and change the value of prev_count
, currently_processing
and total_records
to 0
The CSV import will stop.
If your CSV import is stuck at 0%, the cron job that you previously setup for import-csv.php is not working, hence it's not executing the import-csv.php script that in turn starts the CSV import.
You'd need to check that your cron job is setup correctly. To see the cron job setup instructions again for import-csv.php:
https://your_sendy_installation_url/reset-cron.php
to clear the false positive that a cron job has been setup https://your_sendy_installation_url
with your own Sendy installation URL).Alternatively, you don't have to setup a cron job for CSV import. Perform only Step 1 above, then import your CSV.
Your server's firewall
Please check with your host if your server has a firewall blocking incoming connections. If so, request your host to whitelist 'amazonaws.com' in their firewall. If your host needs the IP address to whitelist, here's Amazon's documentation on getting the IP range. The reason why it's showing 'PendingConfirmation' is because Amazon can't execute the /includes/campaigns/bounces.php
and /includes/campaigns/complaints.php
scripts as a result of your server's firewall blocking incoming connections.
Once done, delete the two SNS subscriptions created by Sendy in your Amazon SNS console. When you visit the 'Define recipients' page in Sendy (the page where you select lists to send your campaign to), Sendy will automatically re-create the two SNS subscriptions again. These SNS subscriptions should no longer be in 'PendingConfirmation' status.
mod_security
Your server may have mod_security
turned on and it's falsely triggering when Sendy tries to make connections with Amazon SNS via the API. Please contact your hosting support to turn off mod_security
(entirely or just for your Sendy directory) to resolve this issue.
mod_security
for a single directory. You may be getting a '403 Forbidden Error' or 404 error due to one of the follow reasons:
mod_security
Your server has mod_security
turned on and it's falsely triggered. Please contact your hosting support to turn off mod_security
(entirely or just for your Sendy directory) to resolve this issue.
mod_security
for a single directory. Browser extension inserting code into editor
One of your browser extension may be inserting code into the editor when you were composing your email (example of the most common culprit is 'Grammarly').
If the error message does not appear anymore, then you’d need to track down this browser extension that inserts code into the WYSIWYG editor when you were creating/editing your campaign and disable it.
Wordfence plugin for Wordpress
If you're running Wordpress with 'Wordfence plugin' installed and enabled, disable the 'Wordfence' plugin and try again.
That’s because magic_quotes_gpc
is turned on. Please contact your hosting support to turn it off.
By the way, magic_quotes_gpc
has been deprecated in PHP 5.3 and up.
If your campaign has been in 'Preparing' status for more than 5 minutes, this means that the cron job you've setup previously aren't executing the 'scheduled.php' script to start sending.
Check that your cron job is setup correctly to execute the 'scheduled.php' script every 5 minutes. Contact your hosting support to confirm that your cron job is setup correctly to execute the 'scheduled.php' script every 5 minutes if you're unsure.
Here's what you should do if your campaign is currently stuck in 'Preparing' status:
https://your_sendy_installation_url/reset-cron.php
to clear the false positive that a cron job has been setup https://your_sendy_installation_url
with your own Sendy installation URL). Please check your Amazon SES Reputation Dashboard to see if your account status is 'Healthy':
If it's anything other than 'Healthy', check your email's inbox for Amazon's email for further instructions.
Here's a list of statuses, what they mean and what to do about it
One of your browser extension may be inserting code into the editor when you were composing your email (example of the most common culprit is 'Grammarly').
If you're now able to send your campaign without getting stuck in 'Sending' status, then you’d need to track down this browser extension that inserts code into the WYSIWYG editor when you were creating/editing your campaign and disable it.
The reason why sending stops periodically in the middle of sending is because your server timed out while sending due to CPU or memory exhaustion. Sendy will detect timeouts and will resume sending where it left off within 5 to 10 minutes. Note that the better the spec of your server, the better Sendy performs which means lesser or 'no' timeouts while sending. Sendy is a self hosted software, how well it performs depends on the kind of server you're running Sendy on. If you want little or no time outs, consider using a VPS or cloud server as compared to shared hosting. Also see this related tip on improving sending performance.
Manually resume sending
If you did not previously setup a cron job for sending using the cron job setup instructions found in the 'Define recipients' page, then you'd need to click the 'Resume' button on the campaign item to resume sending.
Auto resume sending with cron job (recommended)
If you had previously setup a cron job for sending, Sendy will automatically resume sending between 5 to 10 minutes time so you don't need to monitor the sending of your campaign by clicking the 'Resume' button manually when sending times out.
To setup a cron job for sending & scheduling of email campaigns, follow the cron job setup instructions note shown at the bottom of the 'Define recipients' page:
Once the cron job has been setup, the cron job will automatically resume sending when your server times out while sending. If sending did not automatically resume, your cron job is not setup correctly. Check with your host that your cron job is setup correctly and it's executing the scheduled.php script every 5 minutes.
Emails are being opened from Gmail or G Suite / Google Workspace. Since January 2014, when emails are opened from Gmail or G Suite / Google Workspace, the country will be registered as USA no matter which country the email is opened from. This is because Gmail and G Suite caches and serves ALL images (including the tracking image) from their US server.
The tracking image that tracks all email activities is opened from Google's US server when the email is opened in Gmail or G Suite / Google Workspace, hence the location is registered as USA.
Apple did the same as well with their new 'Mail Privacy Protection' when they released iOS 15 in September 2021. Apple first routes emails through a proxy server to pre-load message content - including tracking pixels - before serving to readers. Even if readers don’t actually open those emails.
This is the same for all email marketing platforms in the world and not only specific to Sendy. In this time and age, opens tracking needs to be taken with a grain of salt.
The reason why your email goes to spam depends on a multitude of factors.
Emails are sent through Amazon SES. Amazon works day in and out maintaining good relationships with ISPs and constantly weeding out spammers so that deliverability rate is kept at its highest for all users using the service.
If your emails end up in the spam folder, it is likely due to your sender reputation. If the emails you sent has been consistently marked as spam by your recipients, the likelihood of your emails going to the spam folder will be high. If you are sending emails to 'purchased lists' or emails harvested from questionable sources, that explains it.
Spam filters on the receiving end are also very strict in what kind of emails they will put in the inbox. Also note that different ISPs or email service providers have varying levels of spam filtering. Spam filter algorithms varies from providers to providers. Try researching on this topic, eg. google for "spam filters", "how to get pass spam filters" etc.
If you follow email sending best practices, you'll have no problems getting high deliverability rates.
Also, authenticate your sending domain so that the receiving end knows that the email you sent is really from you and not spoofed:
Note: Setting up a custom 'MAIL FROM' domain is optional. If you do setup a custom 'MAIL FROM' domain, then you'd need to setup 'SPF'. Otherwise, you don't need to setup SPF for your sending domain.
Lastly, you can get help from Amazon support representatives with regards to deliverability of your emails at the Amazon SES forums.
You have ONLY_FULL_GROUP_BY
enabled in MySQL. You need to disable it. See this thread for more information.
Sending speed depends on various factors. Before continuing, it is a good idea to update your Sendy installation to the latest version.
Server
Sendy only performs as well as the server it is running on. Sendy is a 'bulk email application', almost everything is performed in bulk, from importing CSVs to sending of emails. The larger your volume, the more server resources it uses.
The better the spec of your server, the faster Sendy will perform and the lesser timeouts will occur.
Although Sendy works on 'shared hosting', consider running Sendy on a 'VPS' or 'cloud server' for better performance or if you have a huge volume of subscribers.
If you can, increase your server's memory_limit
to a number close to what your server physically supports by editing your server's php.ini.
Server location
You have the option to select the Amazon SES region from which to send your emails, such as US East, US West, EU, and more. It is recommended to choose the region that is closest to the physical location of your hosting server where Sendy is installed. When you send a newsletter, Sendy will transfer your emails to Amazon SES, which will then send them out. Opting for a region that is closer to your server's physical location will result in lower latency and faster sending speed.
Database location
Sendy's MySQL database should be hosted on the same server where Sendy's files are hosted. Some users like to use external databases like 'Amazon RDS', however this is not recommended for Sendy.
Users who use external databases like RDS experiences slower sending speeds and unforeseen issues. RDS is good for 'storing' data but not optimized for quick real time data processing like what Sendy needs.
Sending rate
As Sendy transfers your email in bulk to Amazon SES for sending according to your SES send rate, depending on the capability of your server, your server may have trouble processing huge bulks of emails efficiently if your SES send rate is very high. Lowering your send rate may yield better sending speed and stability. You can lower your sending rate in Sendy's main settings.
Lastly, having your 'Sending rate' in settings unintentionally set as '1 email per second' would cause your emails to send very slowly. Do check your 'Sending rate' in settings to make sure it's set at the speed you want.
Size of your email's HTML
The size of your email plays a part in sending speed as well.
Your email’s HTML code is encoded with 'base64' before being transferred in bulk to Amazon SES for delivery. Base64 encoded code is 33% larger than the original code. Multiply this by your SES send rate in which Sendy base the number of emails to transfer per iteration, larger emails will naturally take a longer time to be transferred over to Amazon SES.
Attachments
Attachments slow down email sending speed because of file size. Even though Sendy supports sending of emails with attachments, it is still recommended to upload your attachment to a file hosting service (eg. Dropbox), then include the download link in your email instead of attaching it directly in the email. You'll get better sending speed and your emails are less likely to end up in your recipient's spam folder. In other words, even if you are able to send through your email with the huge attachment, it is pointless if your email end up in your recipient's spam folder.
Queue table
The 'queue' table where Sendy temporarily store records of sent emails when sending a campaign may be filled with lots of outdated records. Try emptying the 'queue' table when no campaigns are currently sending by visiting https://your_sendy_installation_url/clear-queue
(replace https://your_sendy_installation_url
with your own Sendy installation URL).
Also, rebooting your server will help free up server memory which may result in faster sending speeds.
First of all, make sure Sendy's .htaccess file was uploaded to Sendy's directory.
By default all files under /var/www
ignore the .htaccess file. To fix it, change AllowOverride None
to AllowOverride All
in Ubuntu's default config file so that Sendy's .htaccess file is not ignored by Ubuntu. Follow the instructions below:
sudo vim /etc/apache2/sites-available/default
Note: Sometimes this directive is in one of the other site files defined in this directory or in the /etc/apache2/apache2.conf
file.
In the following section change AllowOverride None
to AllowOverride All
.
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all # Uncomment this directive is you want to see apache2's # default start page (in /apache2-default) when you go to / #RedirectMatch ^/$ /apache2-default/ </Directory>
Also, if you need to use rewrite rules you need to enable them first. You do that with the following command.
sudo a2enmod rewrite
Prior to running that command you may get an error similar to the following.
[Tue Apr 14 14:23:34 2009] [alert] [client 127.0.0.1] /var/www/wiki/.htaccess: Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration
Finally, don't forget to restart Apache.
sudo /etc/init.d/apache2 restart
or
sudo systemctl restart apache2
Source: https://www.joeldare.com/wiki/linux:using_.htaccess_on_ubuntu
The solution is to remove ONLY_FULL_GROUP_BY
from 'sql_mode' in MySQL. Please see instructions by 'Zack' on this thread on removing ONLY_FULL_GROUP_BY
from 'sql_mode' in MySQL.
Sendy uses gettext
extension for PHP for translation. On Debian, you need to configure locales for your Debian based server.
Please see this article on configuring locales for your Debian based server → https://people.debian.org/~schultmc/locales.html. Once done, your Sendy installation should be able to load the new language you imported.
Sendy provides you with a subscribe form HTML code you can embed anywhere on your website.
Click 'Subscribe form' at the top right to get the HTML code
You can also subscribe users programmatically via Sendy's 'Subscribe' API.
Click 'Autoresponders' at the top of the screen
Click 'Segments' at the top of the screen
This is due to a webkit issue, only happens in Chrome or Safari.
.sql
file and import it into your new database using phpmyadmin or any other methods you like)/includes/config.php
and update the APP_PATH and MySQL details to reflect the new installationPlease visit the troubleshooting page for help information as well as quick answers to common issues.
View Sendy's API documentation, download example scripts and browse third party resources & integrations.
View our documentation on how to translate Sendy into your own language.