Email Delivery Issues
If emails sent through the ID Payment Link Generator aren’t being received by recipients, follow this guide to identify and fix the problem. Email delivery issues are almost always related to server mail configuration rather than the plugin itself.
Step 1: Check the Plugin Response
When you click Send Email, the plugin displays a success or error message:
- “Email sent successfully!” — The plugin successfully handed the email to WordPress’s
wp_mail()function, which in turn passed it to your server’s mail system. The issue is downstream (server configuration, spam filters, or recipient-side filtering). - “Failed to send email” — WordPress’s
wp_mail()returnedfalse, meaning the email was rejected before it even left your server. This is a server-side mail configuration problem.
Step 2: Verify the From Email Address
An invalid or suspicious “From” email address is a common cause of delivery failures:
- Go to Payment Links > Settings and check the From Email field.
- Use an email address on your own domain (e.g.,
noreply@yourdomain.comorpayments@yourdomain.com). - Avoid using free email addresses (Gmail, Yahoo, Outlook) as the “From” address — many servers reject these because they fail SPF/DKIM checks.
- Make sure the email address actually exists on your mail server, or at minimum that your domain’s DNS allows your web server to send on its behalf.
Step 3: Check Spam and Junk Folders
HTML emails sent from WordPress are frequently flagged as spam, especially if your server lacks proper email authentication:
- Ask the recipient to check their Spam or Junk folder.
- If found in spam, have them mark it as “Not Spam” to whitelist future emails.
- Check if your domain has proper SPF, DKIM, and DMARC DNS records configured. These are critical for email deliverability.
Step 4: Test WordPress Email Independently
Verify that your server can send email at all by testing wp_mail() directly. Add this temporary code to your theme’s functions.php:
<?php
// TEMPORARY: Remove after testing!
add_action( 'admin_init', function() {
if ( ! isset( $_GET['test_wp_mail'] ) ) {
return;
}
$result = wp_mail(
'your-email@example.com', // Replace with your email
'WordPress Mail Test',
'<p>This is a test email from WordPress.</p>',
array( 'Content-Type: text/html; charset=UTF-8' )
);
wp_die( $result ? 'wp_mail() returned TRUE' : 'wp_mail() returned FALSE' );
} );
Then visit https://yoursite.com/wp-admin/?test_wp_mail=1 and check the result. Remove this code after testing.
- If this test also fails, the problem is with your server’s mail configuration, not the plugin.
- If this test succeeds but the plugin’s emails aren’t arriving, check the email content (subject and body) for spam trigger words.
Step 5: Use an SMTP Plugin
The most reliable solution for WordPress email delivery is to route emails through a dedicated SMTP service instead of relying on your server’s built-in mail() function. Recommended SMTP plugins:
- WP Mail SMTP — The most popular option. Supports Gmail, Outlook, SendGrid, Amazon SES, and generic SMTP.
- Post SMTP — Full-featured with email logging and failure notifications.
- FluentSMTP — Free and lightweight with multiple provider support.
Recommended email services (many have free tiers):
- SendGrid — 100 emails/day free.
- Amazon SES — Very low cost, high deliverability.
- Mailgun — Developer-friendly with detailed analytics.
- Gmail SMTP — Good for low-volume sites (up to 500 emails/day).
Step 6: Check Server Mail Logs
If you have server access, check the mail logs for rejection or bounce messages:
- Linux servers:
/var/log/mail.logor/var/log/maillog - cPanel: Check Email Deliverability in cPanel, or view logs in
/var/log/exim_mainlog - Plesk: Check Mail > Mail Server Settings > Mail Log
Look for entries containing the recipient’s email address around the time you sent the test email. Common rejection reasons include:
550 relay not permitted— Your server isn’t configured to send outbound email.553 sender domain not allowed— The “From” domain doesn’t match your server’s allowed domains.421 too many connections— Rate limiting by the recipient’s mail server.
Step 7: Check the Email Log (Pro)
If you’re using the Pro version, the email log provides detailed status information:
- Go to Payment Links > Log.
- Look for the email in question and check its Status column.
- “Sent” means
wp_mail()returnedtrue— the email was accepted by your server. - “Failed” means
wp_mail()returnedfalse— the email was rejected by your server. - You can click Resend on any log entry to retry the delivery.
Step 8: Validate Your Email HTML
Malformed HTML in the email body can cause delivery issues with certain email providers:
- Ensure all HTML tags are properly closed.
- Avoid using complex CSS or JavaScript in email bodies — most email clients strip these.
- If you’re using custom templates (Pro), test them with a tool like HTML Email Check to validate compatibility.
- Keep the email body under 100KB. Very large HTML emails may be rejected or truncated.
Quick Checklist
| Check | Status |
|---|---|
| Plugin shows “Email sent successfully”? | If no, server can’t send mail |
| From Email uses your domain? | Avoid free email addresses |
| Checked spam/junk folder? | HTML emails often land here |
| SPF/DKIM/DMARC records set up? | Essential for deliverability |
| wp_mail() test works independently? | If no, install SMTP plugin |
| Using SMTP plugin? | Highly recommended for production |
