Your Journal Is Running, but Nobody Is Getting Emails

Your OJS installation looks fine. Submissions are coming in. The review workflow is configured. But your authors aren't receiving submission confirmations. Your reviewers aren't getting invitation emails. Your editors aren't being notified of new assignments.

SponsoredNeed OJS hosting that scales?

Managed OJS hosting with backups, SSL, and priority support for scholarly publishers.

See pricing plans →

OJS email notifications not sending is one of the most disruptive problems a journal can face, because unlike a 500 error that takes the whole site down, broken email is invisible. Your journal appears to be working perfectly. Behind the scenes, your entire editorial communication chain has quietly collapsed.

Authors assume their submission was lost and submit again, creating duplicates. Reviewers miss deadlines because they never received the invitation. Editors don't know new submissions are waiting. The peer review workflow that OJS is designed to automate breaks down entirely, and it all traces back to one misconfigured email setting.

This guide covers every known cause of OJS email notification failures, how to diagnose exactly which one is affecting your journal, and the specific fixes, written by OJS specialists who have resolved this problem across hundreds of installations in 20+ countries.

If you'd rather have an expert configure your OJS email correctly the first time, visit ojsguru.com for a free consultation.

How OJS Sends Email: The Basics

Before diving into causes and fixes, it helps to understand how OJS handles email delivery.

By default, OJS uses PHP's built-in mail() function to send emails through your server's local mail transfer agent (MTA). This works on some servers, but fails silently on many modern hosting environments, particularly shared hosting, cloud VPS instances, and servers where the local MTA is not configured.

The more reliable alternative, and the recommended configuration for production OJS journals, is SMTP (Simple Mail Transfer Protocol), where OJS connects directly to a dedicated mail server or third-party email service like Gmail, SendGrid, Mailgun, or your hosting provider's SMTP server.

Most OJS email failures fall into one of these categories:

  • PHP mail() is disabled or blocked by the server
  • SMTP credentials are incorrect or incomplete
  • The sending email address is not authenticated with the mail server
  • Emails are being sent but caught by spam filters
  • OJS email templates are misconfigured or disabled
  • A plugin is interfering with the email system
  • The server's outgoing port 25, 465, or 587 is blocked

Step 1: Confirm Whether OJS Is Sending Emails at All

The first diagnostic step is to determine whether OJS is attempting to send emails and failing, or not attempting to send them at all.

Use OJS's built-in email test:

  1. Log in as Journal Manager or Site Administrator
  2. Go to Administration → System Information → Email
  3. Use the Send Test Email function if available in your OJS version

If the test email fails with an error message, so that error message is your starting point. Note it exactly and match it to the causes below.

If the test email appears to succeed but never arrives, and the problem is likely on the delivery side: spam filtering, incorrect recipient address, or a sending domain authentication issue.

Check OJS email logs:

OJS logs email activity. Check:

/path-to-ojs/cache/logs/

Look for any error entries related to mail or SMTP connections.

Check your server's mail log:

On Ubuntu/Debian:

sudo tail -f /var/log/mail.log

On CentOS/RHEL:

sudo tail -f /var/log/maillog

These logs will show whether emails are being handed off to the MTA, rejected, or bouncing.

Cause 1: PHP mail() Function Is Disabled or Unreliable

On most modern shared hosting environments and cloud VPS instances, PHP's built-in mail() function is either disabled entirely or severely restricted to prevent spam abuse. When OJS is configured to use mail() and the server doesn't support it, emails simply disappear, with no error, no bounce, no delivery.

How to identify this cause:

Emails appear to send successfully in OJS (no error message shown) but never arrive at the recipient. Your server mail log shows no outgoing activity when OJS sends.

How to fix it:

Stop relying on PHP mail() and configure OJS to use SMTP instead. This is the correct configuration for any production OJS journal. See Cause 2 below for full SMTP setup instructions.

Cause 2: SMTP Not Configured or Incorrectly Configured

This is the most common root cause of OJS email failures. Either SMTP has never been configured, or the credentials are wrong, the port is incorrect, or the encryption setting doesn't match the mail server's requirements.

How to identify this cause:

OJS is using the default mail() setting, or SMTP is configured but credentials have recently changed. Your error log may show SMTP connect() failed, Authentication failed, or Connection refused.

How to fix it: Step by Step:

Step 1: Choose your SMTP provider

For most OJS journals, one of these options works well:

ProviderBest ForNotes
Gmail SMTPSmall journals, personal accountsRequires App Password if 2FA enabled
SendGridMedium to large journalsFree tier: 100 emails/day
MailgunHigh-volume journalsReliable, developer-friendly
Hosting SMTPJournals on cPanel hostingEasiest to configure
Institutional SMTPUniversity journalsCheck with your IT department

Step 2: Configure SMTP in OJS

Go to Administration → Site Settings → Email (or in some OJS versions, Settings → Website → Emails) and enter:

Default Email Address: editor@yourjournal.com
Email Signature: [your journal name and URL]
SMTP Server: smtp.gmail.com (or your provider's SMTP host)
SMTP Port: 587 (TLS) or 465 (SSL)
Use SMTP Authentication: Yes
Username: your-email@gmail.com
Password: your-app-password
Encryption: TLS (for port 587) or SSL (for port 465)

Step 3: Configure via config.inc.php (alternative method)

You can also set SMTP directly in OJS's configuration file:

[email]
smtp = On
smtp_server = smtp.gmail.com
smtp_port = 587
smtp_auth = ssl
smtp_username = your-email@gmail.com
smtp_password = your-app-password
allow_envelope_sender = Off
default_envelope_sender = editor@yourjournal.com

Step 4: Test immediately

After saving SMTP settings, use the test email function to confirm delivery. Check your inbox and spam folder.

Cause 3: Gmail-Specific Configuration Issues

Gmail is widely used as an OJS SMTP provider, but it has specific requirements that catch many editors off guard.

Issue A: "Less Secure App Access" is no longer supported: Google removed Less Secure App Access in 2024. If your OJS Gmail configuration was set up before this change, it will now fail silently.

Fix: Generate a Gmail App Password instead:

  1. Go to your Google Account → Security
  2. Enable 2-Step Verification (required)
  3. Go to Security → App Passwords
  4. Generate a new App Password for "Mail"
  5. Use this 16-character password in your OJS SMTP configuration, not your regular Gmail password

Issue B: Incorrect port/encryption combination:

Gmail requires:

  • Port 587 with TLS/STARTTLS, or
  • Port 465 with SSL

Using port 25 with Gmail will always fail.

Issue C: Sending limit: Gmail's free SMTP has a daily sending limit of approximately 500 emails. For journals with high submission volumes, this limit will cause notification failures. Switch to SendGrid or Mailgun for higher volume needs.

Cause 4: Outgoing Port Is Blocked by the Server or Hosting Provider

Many shared hosting providers and cloud providers (AWS, DigitalOcean, Google Cloud) block outgoing connections on port 25 by default to prevent spam. If OJS is trying to connect on port 25 and it's blocked, all emails will fail silently.

How to identify this cause:

Your SMTP credentials are correct but emails still don't send. Your error log shows Connection timed out or Connection refused on port 25.

How to test port availability:

# Test if port 587 is accessible to your SMTP server
telnet smtp.gmail.com 587

# Or using curl
curl -v telnet://smtp.gmail.com:587

If the connection times out, the port is blocked.

How to fix it:

  • Switch from port 25 to port 587 (TLS) or 465 (SSL) in your OJS SMTP settings
  • If on AWS EC2, request outgoing port 25 unblocking through the AWS console, or use Amazon SES on port 587
  • If on DigitalOcean, use port 587 or switch to an external SMTP service like SendGrid

Cause 5: Sending Domain Not Authenticated (SPF, DKIM, DMARC)

Even when OJS is correctly configured and emails are being sent, they may be silently rejected or dropped into spam by recipient mail servers if your sending domain lacks proper email authentication records.

This is increasingly common as major email providers (Gmail, Outlook, Yahoo) have tightened their spam filtering requirements.

The three authentication records you need:

SPF (Sender Policy Framework): Tells recipient mail servers which servers are authorized to send email from your domain.

Add a TXT record to your domain DNS:

v=spf1 include:_spf.google.com ~all

(Replace with your SMTP provider's SPF record, including SendGrid, Mailgun, and others have their own)

DKIM (DomainKeys Identified Mail): Adds a cryptographic signature to outgoing emails that proves they haven't been tampered with.

Your SMTP provider (SendGrid, Mailgun, etc.) will give you a DKIM TXT record to add to your DNS. Follow their specific setup instructions.

DMARC (Domain-based Message Authentication): Tells receiving mail servers what to do with emails that fail SPF or DKIM checks.

Add a TXT record to your domain DNS:

v=DMARC1; p=none; rua=mailto:dmarc@yourjournal.com

Start with p=none (monitoring mode) before moving to p=quarantine or p=reject.

How to check your current authentication status:

Use MXToolbox to check your domain's SPF, DKIM, and DMARC records. This is free and takes 30 seconds.

Cause 6: OJS Email Templates Are Disabled

OJS controls which email notifications are sent through its Email Templates system. If specific templates have been disabled, either accidentally or during a configuration change, and the corresponding notifications will never be sent, even when the email system itself is working correctly.

How to identify this cause:

Some OJS email notifications are working (e.g. password resets) but others are not (e.g. reviewer invitations, submission confirmations). The email system test works fine.

How to fix it:

  1. Go to Workflow Settings → Email → Email Templates
  2. Review the list of templates and check which ones are enabled
  3. Key templates that must be enabled for core workflow notifications:
Template NameTriggers When
SUBMISSION_ACKAuthor submits a new manuscript
REVIEW_REQUESTReviewer is invited to review
REVIEW_CONFIRMReviewer accepts invitation
REVIEW_DECLINEReviewer declines invitation
EDITOR_ASSIGNEditor is assigned to a submission
EDITOR_DECISION_ACCEPTAuthor is notified of acceptance
EDITOR_DECISION_REVISIONSAuthor is asked for revisions
EDITOR_DECISION_DECLINEAuthor is notified of rejection
  1. Re-enable any disabled templates and save

Also check: Go to User Profile → Notifications for your editor account and confirm that email notification preferences are turned on. Individual users can disable their own email notifications, editors who have done this won't receive assignment alerts.

Cause 7: From Address Is Causing Rejection

The email address OJS uses as the sender, set in your journal's contact settings, can itself cause delivery failures if it doesn't match your authenticated sending domain.

Common problem scenarios:

  • OJS is configured to send from editor@yourjournal.com but you're using Gmail SMTP authenticated with yourpersonalemail@gmail.com, and the mismatch causes rejection
  • The from address domain has no SPF record
  • The from address uses a free email domain (Gmail, Yahoo, Hotmail) which has strict DMARC policies that prevent third-party sending

How to fix it:

The from address (set in Journal Settings → Contact → Principal Contact Email) should match the domain you've authenticated with your SMTP provider.

If you're using SendGrid or Mailgun, set up a sending domain (e.g. mail.yourjournal.com) and use an address on that domain as your OJS sender address.

If you're using institutional email, use your institutional address consistently as both the SMTP authentication credential and the OJS from address.

Cause 8: Plugin Conflict Interfering With Email

Third-party OJS plugins, particularly custom notification plugins, workflow automation plugins, or older plugins not updated for your OJS version, can interfere with OJS's core email system and silently suppress outgoing notifications.

How to identify this cause:

Email was working correctly before a plugin was installed or updated. Disabling recently changed plugins restores email functionality.

How to fix it:

  1. Go to Website Settings → Plugins
  2. Disable recently installed or updated plugins one at a time
  3. Test email delivery after each disable
  4. When email resumes, the last disabled plugin is the conflict
  5. Check for an updated version of that plugin or remove it if it's no longer maintained

Cause 9: Emails Sending But Going to Spam

This is a frustrating situation. OJS is configured correctly, emails are being sent, your logs show successful delivery, but recipients never see them because they're landing in spam or being silently discarded.

How to identify this cause:

Ask a colleague or test recipient to check their spam folder. Use an email testing tool like Mail Tester to send a test email and receive a spam score with specific recommendations.

Common reasons OJS emails go to spam:

  • Missing SPF, DKIM, or DMARC records (see Cause 5)
  • Email subject lines contain words that trigger spam filters ("free", "urgent", "no-reply")
  • The sending IP address has a poor reputation (common with new VPS servers)
  • Emails contain no plain-text version (HTML only)
  • The unsubscribe mechanism is missing

How to fix it:

  • Implement SPF, DKIM, and DMARC records on your sending domain
  • Warm up a new sending IP by starting with low email volume
  • Use a reputable SMTP relay (SendGrid, Mailgun) whose IPs have established reputations
  • Avoid "no-reply" as your from address; use a real monitored address
  • Check your sending IP reputation at MXToolbox Blacklist Check

Quick Diagnostic Checklist

Work through this in order to identify your specific problem:

  • Use OJS test email function: does it report success or an error?
  • Check OJS error log at /cache/logs/
  • Check server mail log (/var/log/mail.log or /var/log/maillog)
  • Confirm OJS is configured for SMTP, not PHP mail()
  • Verify SMTP credentials are correct and current
  • Confirm outgoing port 587 or 465 is not blocked
  • Check if Gmail App Password is being used (not regular password)
  • Verify SPF record exists for your sending domain
  • Check all core email templates are enabled in OJS
  • Confirm from address matches authenticated sending domain
  • Check recipient spam folders
  • Disable recently installed plugins and retest

After resolving hundreds of OJS email problems, here is the configuration we recommend for production journals of different sizes:

Small journals (under 50 submissions/month): Gmail SMTP with App Password, which is free, reliable, easy to configure. Use a dedicated journal Gmail account, not a personal one.

Medium journals (50-500 submissions/month): SendGrid free tier (100 emails/day) or paid starter plan. Add SendGrid's SPF and DKIM records to your domain for maximum deliverability.

Large journals (500+ submissions/month): Mailgun or SendGrid paid plan with a dedicated sending IP. Implement full SPF, DKIM, and DMARC authentication. Monitor deliverability with Mailgun's built-in analytics.

University journals: Use your institution's SMTP server, using credentials from your IT department. This gives you the best sender reputation since university domains are well-established. Confirm with IT that bulk notification emails are permitted.

When to Call in a Professional

OJS email configuration is one of the most technically layered problems in journal management; it touches your server configuration, your DNS records, your SMTP provider, your OJS settings, and your email templates all at once. A problem in any one layer can silently break the entire chain.

Consider professional help when:

  • You've worked through this checklist and emails still aren't sending
  • Your journal is mid-review-cycle with reviewers missing deadlines due to missing notifications
  • You're on a university server where you don't have access to DNS or server settings
  • Email was working and stopped after a server change your hosting provider made
  • You need a full SMTP setup with domain authentication from scratch

OJS Guru configures OJS email and SMTP as a standalone service. We handle the full setup, including SMTP credentials, DNS authentication records, OJS template configuration, and delivery testing, so your editorial team receives every notification, every time.

👉 Get a free consultation at ojsguru.com

Preventing OJS Email Failures Going Forward

Once your email is correctly configured, these practices keep it working reliably:

Document your SMTP credentials. Store your SMTP server, port, username, and password in a secure location accessible to your journal manager. When credentials expire or change, you'll know exactly what to update.

Use a dedicated sending email address. Don't use a personal Gmail account. Create a dedicated address like editor@yourjournal.com or notifications@yourjournal.com used exclusively for OJS email.

Monitor your sending domain's reputation. Set up DMARC reporting so you receive alerts if your domain is being spoofed or if emails are failing authentication checks.

Test email after every OJS upgrade. OJS upgrades occasionally reset email settings or introduce configuration changes. Send a test email immediately after every upgrade to confirm delivery.

Check email templates after workflow changes. Any time you modify your editorial workflow in OJS, verify that the corresponding email templates are still enabled and correctly configured.

Summary

OJS email notifications not sending is a multi-layered problem, but every cause is identifiable and fixable. The nine causes covered in this guide account for the vast majority of OJS email failures in production:

  1. PHP mail() function disabled or unreliable
  2. SMTP not configured or incorrectly configured
  3. Gmail-specific configuration issues
  4. Outgoing port blocked by server or hosting provider
  5. Sending domain not authenticated (SPF, DKIM, DMARC)
  6. OJS email templates disabled
  7. From address mismatch causing rejection
  8. Plugin conflict interfering with email
  9. Emails sending but going to spam

Work through the diagnostic checklist, identify your specific cause, and apply the relevant fix. In most cases, the problem resolves within an hour of correct SMTP configuration.

If your journal's editorial workflow is being disrupted by missing email notifications and you need it fixed quickly and correctly, contact OJS Guru at ojsguru.com. We configure OJS email systems every day and we'll have yours working reliably.

OJS Guru is a professional Open Journal Systems service provider specializing in OJS installation, customization, migration, and technical support for research journal publishers in 20+ countries. Visit ojsguru.com to request a free consultation.