How to Install Sendy on cPanel: Complete Guide
Before you start
cPanel is one of the easiest environments for a first Sendy installation because the major requirements—PHP, MySQL, File Manager, SSL and cron—are exposed through the control panel. The critical part is not the upload itself; it is making sure the PHP version, database credentials, writable uploads directory and cron commands match your hosting account. Sendy's official setup documentation specifically mentions cPanel for database creation and file upload.
Important: installation instructions can change between software releases. Use the version bundled with your license and compare the vendor's current requirements before copying commands into production. Where this article uses an adapted Caddy or Docker pattern, it is clearly labeled rather than presented as vendor certification.
What you need
- cPanel hosting with PHP and MySQL.
- A domain or subdomain.
- Sendy license/download.
- File Manager or SFTP access.
- MySQL Databases access.
- Cron Jobs access.
- SSL/AutoSSL.
- Amazon SES production access and verified sending identities.
Architecture
Domain → cPanel/Apache → PHP → Sendy → MySQL → Amazon SES
Keeping these layers separate makes troubleshooting easier. If the web dashboard works but campaigns do not send, the problem may be in cron, the queue, the delivery server or the provider rather than in the web server. Conversely, a 502 or 500 error normally belongs to the web/PHP layer.
Step-by-step installation
1. Create the subdomain
Use cPanel Domains/Subdomains to create sendy.example.com. Confirm DNS points to the cPanel server before installing SSL.
2. Select PHP
Use MultiPHP Manager or Select PHP Version to choose a PHP version supported by your Sendy release. Enable the required extensions and avoid changing PHP versions after installation without testing.
3. Create the MySQL database
Use MySQL Databases to create the database and user. Grant the user all privileges on that database and record cPanel's prefixed database/user names.
4. Edit config.php
Open Sendy's includes/config.php and set APP_PATH plus the database credentials. The official guide specifically instructs you to set these values before uploading.
5. Upload and extract
Upload the Sendy ZIP through File Manager and extract it into the desired document root. Make sure the URL matches APP_PATH.
6. Fix uploads permissions
The official Sendy guide requires the uploads directory to be writable for attachments, images and CSV imports. Apply write access to that directory rather than making the entire installation world-writable.
7. Run the installer
Visit the HTTPS Sendy URL and enter your license key and admin details. If the compatibility check reports a missing extension, ask the host to enable it.
8. Configure SSL
Use AutoSSL or your host's certificate manager, then update APP_PATH if necessary so Sendy uses HTTPS. Test the login and public forms after redirecting HTTP to HTTPS.
9. Configure Cron Jobs
Create the scheduled.php and autoresponders.php jobs. cPanel hosts often require the absolute PHP binary path, such as /usr/local/bin/php, rather than simply php. Use the exact path shown by your host.
10. Connect Amazon SES
Create/obtain the appropriate SES credentials, select the region and configure Sendy. Verify your sending domain or email identity and request SES production access before sending normal campaigns.
11. Test the full workflow
Send a test email, schedule a campaign, trigger an autoresponder and inspect SES. Confirm that cron runs without a browser window being open.
Post-install configuration
Once the installer finishes, resist the temptation to immediately import a large list and launch a campaign. First configure the sending layer, domain authentication, bounce handling and unsubscribe behavior. Your application can be perfectly healthy while the email infrastructure is not ready for production.
1. Configure the sending service
Use a delivery service or MTA that is appropriate for your sending volume and compliance requirements. Record the exact SMTP/API endpoint, credentials, region and encryption settings. Never publish credentials in screenshots, tutorials, public repositories or support tickets.
2. Authenticate the sending domain
Publish the SPF, DKIM and DMARC records required by your chosen delivery service. If the provider gives you DKIM CNAME records, use those exact values. Avoid creating multiple conflicting SPF records. Start DMARC in a monitoring mode when you are still mapping legitimate senders, then tighten the policy once authentication is verified.
3. Configure bounces and complaints
A campaign system should not keep treating permanently failing addresses as healthy subscribers. Configure the application's bounce/complaint workflow and monitor the resulting logs. If your provider exposes feedback-loop events, connect them where the application supports it.
4. Test with a small list
Send a controlled test to addresses you own at more than one mailbox provider. Check authentication results, rendering, unsubscribe behavior, tracking, bounce handling and queue processing. Only after the end-to-end workflow passes should you increase campaign volume.
Common mistakes to avoid
- Installing a PHP version without checking the application's current compatibility requirements.
- Using the database root account inside the application.
- Making the entire application directory world-writable.
- Putting passwords or AWS credentials into a public repository.
- Assuming a successful login means scheduled jobs are working.
- Sending a large campaign before SPF/DKIM/DMARC and bounce handling are verified.
- Treating the application as the email delivery server when it actually relies on an external SMTP/API provider.
- Skipping backups before upgrades.
Troubleshooting
Cron says command not found
Use the full PHP binary path supplied by the host. This is a common cPanel cron issue documented in Sendy's community.
500 error
Check cPanel Error Logs, PHP version and extensions.
Upload permission error
Confirm the uploads directory is writable by the web/PHP user.
SES credentials rejected
Check the SES region and credentials; verify that you are using the correct AWS credentials for the configured region.
Scheduled campaign never starts
Check scheduled.php cron execution and the PHP binary path.
Security checklist
- Use SSH keys where possible and disable unnecessary remote access.
- Keep the operating system, PHP runtime and application patched.
- Use a dedicated database account.
- Keep MySQL private unless remote access is explicitly required.
- Use HTTPS for the administration interface.
- Protect application configuration and secret files.
- Back up the database and uploaded/application data.
- Test restoring a backup rather than assuming it is usable.
- Monitor disk, RAM, CPU, queue depth and application logs.
When should you choose this installation method?
Choose cPanel when you prefer a graphical environment and your hosting provider gives you adequate cron and PHP resources. It is particularly convenient for small-to-medium Sendy installations. If your host limits cron to long intervals or restricts PHP processes, a VPS will provide more control.
Final checklist
- ☐ DNS resolves to the server
- ☐ Supported PHP/runtime is installed
- ☐ Database and dedicated user created
- ☐ Application installer completed
- ☐ Correct file permissions applied
- ☐ HTTPS works
- ☐ Cron/worker jobs execute
- ☐ Sending service connected
- ☐ SPF/DKIM/DMARC verified
- ☐ Bounce/complaint processing tested
- ☐ Unsubscribe tested
- ☐ Backup created and restore plan documented
- ☐ Small end-to-end test campaign completed
Related installation guides
- How to Install Sendy on Ubuntu VPS
- How to Install Sendy on Caddy
- How to Install Sendy on Docker
- Browse all self-hosted email software installation guides
- About Abhishek Sharma
Sources & references
This guide uses the following vendor or platform documentation. Where a deployment method is an adaptation rather than vendor documentation, that distinction is stated in the article.