When they search, make sure they find you!

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() returned false, 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:

  1. Go to Payment Links > Settings and check the From Email field.
  2. Use an email address on your own domain (e.g., noreply@yourdomain.com or payments@yourdomain.com).
  3. Avoid using free email addresses (Gmail, Yahoo, Outlook) as the “From” address — many servers reject these because they fail SPF/DKIM checks.
  4. 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.log or /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:

  1. Go to Payment Links > Log.
  2. Look for the email in question and check its Status column.
  3. “Sent” means wp_mail() returned true — the email was accepted by your server.
  4. “Failed” means wp_mail() returned false — the email was rejected by your server.
  5. 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