Skip to content

CiviMail - Find and fix any missing recipients - #36430

Open
colemanw wants to merge 1 commit into
civicrm:masterfrom
colemanw:queueMissingRecipients
Open

CiviMail - Find and fix any missing recipients#36430
colemanw wants to merge 1 commit into
civicrm:masterfrom
colemanw:queueMissingRecipients

Conversation

@colemanw

@colemanw colemanw commented Aug 6, 2026

Copy link
Copy Markdown
Member

Overview

It has been reported that some recipients may be silently skipped during large CiviMail dispatches. The "why" is unclear, it may be due to deadlocks or concurrency issues. This adds a stopgap to ensure these irregularities are caught, fixed, and hopefully people will report them and help us track down the root cause.

See https://lab.civicrm.org/dev/core/-/work_items/6678

@civibot

civibot Bot commented Aug 6, 2026

Copy link
Copy Markdown

🤖 Thank you for contributing to CiviCRM! ❤️ We will need to test and review this PR. 👷

Introduction for new contributors...
  • If this is your first PR, an admin will greenlight automated testing with the command ok to test or add to whitelist.
  • A series of tests will automatically run. You can see the results at the bottom of this page (if there are any problems, it will include a link to see what went wrong).
  • A demo site will be built where anyone can try out a version of CiviCRM that includes your changes.
  • If this process needs to be repeated, an admin will issue the command test this please to rerun tests and build a new demo site.
  • Before this PR can be merged, it needs to be reviewed. Please keep in mind that reviewers are volunteers, and their response time can vary from a few hours to a few weeks depending on their availability and their knowledge of this particular part of CiviCRM.
  • A great way to speed up this process is to "trade reviews" with someone - find an open PR that you feel able to review, and leave a comment like "I'm reviewing this now, could you please review mine?" (include a link to yours). You don't have to wait for a response to get started (and you don't have to stop at one!) the more you review, the faster this process goes for everyone 😄
  • To ensure that you are credited properly in the final release notes, please add yourself to contributor-key.yml
  • For more information about contributing, see CONTRIBUTING.md.
PR commands & links...
  • /rebase <branch-name> will rebase your branch and change the base of the PR.
  • /squash will combine all commits (keeping only the first commit messsage).
  • /port <branch-name> will create a copy of this PR against a different branch.
  • /lintroll will automatically fix linting errors, amending commits as needed.
  • retest this please will rerun the tests and rebuild the demo site.
  • 📖 Review standards
  • 🗒️ Review template (brief or verbose)

➡️ Online demo of this PR 🔗

@civibot civibot Bot added the master label Aug 6, 2026
Comment thread CRM/Mailing/BAO/MailingJob.php Outdated
WHERE mr.mailing_id = %1
AND queue.email_id IS NULL AND queue.phone_id IS NULL
AND (mr.email_id > 0 OR mr.phone_id > 0)
AND mr.contact_id > 0

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should add mj.is_test = 0 and I would also just flag that we might need to join onto contact becuase when the jobs queue items it calls this function https://github.com/civicrm/civicrm-core/blob/master/CRM/Mailing/BAO/MailingJob.php#L423 which does a final check in case a contact has opted out since the mailing started running https://github.com/civicrm/civicrm-core/blob/master/CRM/Mailing/BAO/MailingRecipients.php#L62

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch. Added that.

Comment thread CRM/Mailing/BAO/MailingJob.php Outdated
LEFT JOIN (
SELECT meq.email_id, meq.phone_id
FROM civicrm_mailing_event_queue meq
JOIN civicrm_mailing_job mj ON meq.job_id = mj.id AND mj.mailing_id = %1 AND mj.job_type = 'child'

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

also do we still need to join to mailing job? can we go off the event_queue.mailing_id?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @seamuslee001! Fixed.

It has been reported that some recipients may be silently skipped during large CiviMail dispatches. The "why" is unclear, it may be due to deadlocks or concurrency issues. This adds a stopgap to ensure these irregularities are caught, fixed, and hopefully people will report them and help us track down the root cause.

See https://lab.civicrm.org/dev/core/-/work_items/6678
@colemanw
colemanw force-pushed the queueMissingRecipients branch from e045539 to c058d04 Compare August 7, 2026 14:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants