OJS Email Not Sending? Why Authors and Reviewers Never Hear From You
Why OJS emails don’t arrive, how to test delivery, and the settings that fix it in OJS 3.3, 3.4 and 3.5.
On this page
An author submits and hears nothing. A reviewer never sees the invitation. An editor wonders why nobody replies. OJS shows no error, because from its side the email was sent. It just never arrived, or it landed in spam.
This guide helps you find which of the usual causes it is, test it properly, and fix it.
First, is it every email or only some?
| What you see | Most likely cause |
|---|---|
| No OJS emails arrive anywhere, not even in spam | Mail settings, a blocked port, or (OJS 3.4 and 3.5) emails waiting in the job queue |
| Emails arrive, but in spam | Missing or wrong SPF, DKIM or DMARC records, or the server’s IP has a poor reputation |
| Emails reach some providers but not Gmail, Yahoo or Outlook | Authentication (SPF, DKIM, DMARC) or the From address |
| Emails sent “from” an editor’s Gmail address go missing | DMARC: your server isn’t allowed to send as gmail.com |
| Emails arrive hours late | The job queue only runs when someone visits the site |
The common causes
1. OJS is using the server’s built-in mail
Out of the box, OJS sends through the server’s own mail program. On shared hosting that mail is often limited, filtered or blocked, and it rarely passes modern spam checks. Sending through a proper mail account over SMTP fixes most problems on its own.
2. Missing SPF, DKIM or DMARC
These are DNS records that prove your domain allowed the email. Gmail and Yahoo now expect them, and mail without them is far more likely to be filtered. Your email or hosting provider gives you the exact values to add.
3. The From address belongs to someone else’s domain
OJS can send an email “from” the editor who triggered it. If that editor uses a Gmail or Yahoo address, your server is pretending to be gmail.com, and DMARC rules tell inboxes to reject it. OJS has a setting that sends from your own address instead and puts the editor’s address in Reply-To (see the settings below).
4. Emails are waiting in the job queue (OJS 3.4 and 3.5)
Newer OJS puts many emails into a job queue instead of sending them straight away. By default a built-in job runner works through the queue at the end of page visits, so on a quiet site emails can wait until someone opens a page. If the job runner was switched off and nothing else processes the queue, they never go. In OJS 3.4 and later, Administration → Jobs shows what’s waiting.
5. Port or account blocked
Many hosts block outgoing port 25. Gmail and Microsoft 365 no longer accept an ordinary account password for SMTP in most setups; they need an app password or a different sign-in method. A wrong or expired SMTP password fails silently from the user’s point of view.
The mail settings in config.inc.php
Email settings live in the [email] section of config.inc.php on your server. This is how SMTP sending looks in OJS 3.4 and 3.5:
[email]
default = smtp
smtp_server = smtp.your-mail-provider.com
smtp_port = 587
smtp_auth = tls
smtp_username = journal@yourjournal.org
smtp_password = your-app-password
; send from your own domain, with the user's address as Reply-To
default_envelope_sender = journal@yourjournal.org
force_default_envelope_sender = On
force_dmarc_compliant_from = On
dmarc_compliant_from_displayname = '%n via %s'Setting names differ a little between versions: OJS 3.3 uses smtp = On instead of default = smtp. Always compare with the config.TEMPLATE.inc.php file that came with your version. This guide is independent and not endorsed by PKP.
Back up config.inc.php before editing it. A typo can take the whole journal offline. Never paste the real password into a support ticket or email.
How to test delivery properly
- Create a test user with an email address you control at a different provider (for example a personal Gmail).
- Use Forgot your password? for that test user. The reset email is a quick, harmless test.
- For the full workflow, make a test submission as that user and check the confirmation arrives.
- Check the inbox and the spam folder. In Gmail, open the message and choose Show original: SPF, DKIM and DMARC should all say PASS.
- On OJS 3.4 or 3.5, if nothing arrives, look at Administration → Jobs to see whether emails are stuck in the queue.
Free deliverability checkers give you a test address and score the message you send to it. Set that address on your test user and trigger a password reset to see exactly what inboxes think of your journal’s mail.
Why it’s worth fixing now
- Reviewers who never get the invitation can’t accept it, so submissions stall.
- Authors who get no confirmation assume the submission failed, or that the journal isn’t run professionally.
- Automated reminders stop working, so deadlines slip without anyone noticing.
- A server that keeps sending mail which fails checks can end up on blocklists, which makes every later email harder to deliver.
For the bigger picture on spam filtering, read why journal emails go to spam.
Would you rather have it fixed for you? Our OJS support team sets up SMTP, DNS records and the job queue, and tests delivery end to end.
Questions
Why does OJS say the email was sent when nobody received it?
OJS only knows it handed the email over. Whether it arrives depends on the mail server, DNS records and the receiving inbox’s spam checks.
Can I use a Gmail account to send OJS emails?
It can work with an app password, but it isn’t a good long-term setup: sending limits are low and delivery depends on one person’s account. A mailbox on your journal’s domain or a transactional email service is more reliable.
Where do I test email in OJS?
There’s no test button. Trigger a real email instead: a password reset for a test user, or a test submission with your own address.
Why do emails arrive hours late in OJS 3.4 or 3.5?
Emails go through a job queue. With the built-in job runner, the queue is processed when people visit the site, so a quiet site sends late. A cron job or worker processes it on a schedule.
Last updated on October 9, 2026