Track replies and forward replies are ticked for a particular mailing. When someone replies, exactly how does CiviCRM determine the address to forward the mail to. The reply is using VERP. Is this clearly documented somewhere? I have looked at the documentatin on civicrm.org (book, wiki) and cannot find any details.

3 Answers 3


At Administer > CiviMail > Mail Accounts you can configure one or two email inboxes to be automatically processed by CiviCRM. The Bounce Processing inbox handles the processing of replies to emails along with soft and hard bounces, unsubscribe emails and opt out emails.

The VERP information on the return message is used to correlate the incoming email to CiviCRM with the outgoing one from CiviMail.

When Track Replies is enabled for a mailing, and a.reply is received, a copy of the reply is stored as an Activity for the person who had been sent the CiviMail.

If Forward Replies is enabled and CiviCRM receives a reply, it sends a copy of the email to the From address used in the Mailing. The possible From addresses for CiviMail can be configured at Administer > CiviMail > From Addresses.

If you don't want to track replies using VERP, navigate to Administer > CiviMail > Component Settings and disable 'Track replies using VERP in Reply-To header'.

  • Is the value of the VERP address stored in the database? Also, is it possible to do this without VERP by using a catchall mailbox. Our SMTP provider does not seem to be able to set up VERP
    – Vietyank
    Commented May 14, 2015 at 0:17
  • Could you add the question about not using VERP as new, separate questions in Covicrm.stackexchange.com?
    – Joe Murray
    Commented May 14, 2015 at 2:31

CiviCRM uses Variable Envelope Return Path (VERP for short) to track bounces and optionally replies.

This technique assigns a unique, coded address to two aspects of a CiviMail email. Viewing the mail headers, you might see something like

Return-Path:      <[email protected]>
X-Civimail-Bounce: [email protected]
Reply-to:          [email protected]

Here's a breakdown of what you're seeing -

civimail         - the mailbox name of [email protected]
+                - VERP separator
b                - action - (b|bounce|c|confirm|o|optout|r|reply|s|subscribe) etc
1234             - mailing job id
1234567          - mailing queue id
aabbccddeeff1122 - validation hash

SMTP systems understand these headers, so if the message is undeliverable they should return the bounce to the Return-Path address, and if the person hits reply their mail client should use the Reply-To address. This depends on correct behaviour in the MTA and MUA, both of which are outside of control of CiviCRM.

The main place this is used is in the email processor at CRM/Utils/Mail/EmailProcessor.php, where CiviCRM checks for these strings either in the message headers this bounce/reply was delivered to, or in the body of the message (some mail systems don't permit VERP delivery; expect less ideal results without full VERP support).

... That's how it works under the hood! Joe's answer explains this well from the other side of the dashboard :)


Joe wrote above :

When Track Replies is enabled for a mailing, and a.reply is received, a copy of the reply is stored as an Activity for the person who had been sent the CiviMail.

I performed a lot of tests, and I came to the conclusion that this is not so simple. I haven't been able to store easily as an activity the replies sent to the Reply-to address ([email protected] in the above example)

After running the "fetch bounces" scheduled task, Civimail report correctly displays that a response has been received, and that answer is moved under the IMAP subfolder "civimail/processed" of the bounce email account.

BUT NO copy of that email is attached as an activity to the civimail recipient (who sent an answer to the mass mailing).

I had to use the following trick :

  1. in the imap mailbox, create a rule to copy all emails sent to "civimail+r." to a subfolder called "civicrm-answers". All those emails are now duplicated : they appear both in "civimail/processed" (bounce processing) and in "civicrm-answers"
  2. in civicrm, create an additional "email to activity" account, monitoring "civicrm-answers" IMAP folder
  3. after the execution of the task "Process Inbound emails", the reply is now correctly stored as an Activity for the person who had been sent the CiviMail

This is quite complex, and it would be so simpler if the "fetch bounce" task could at the same time store the reply as an activity (and not only increment the amount of replies in the civimail report). Am I doing something wrong ?

  • It sounds like you are asking a question here, but you have posted this as an answer. You are more likely to get a response if you post a new question. If relevant refer to this one. Commented Sep 3, 2022 at 14:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.