edit

hook_civicrm_emailProcessorContact

Summary

This hook is called by the Email Processor when deciding to which contact and activity will be attached.

Notes

You can use this hook to choose a different contact or decide whether it should create contacts.

Definition

hook_civicrm_emailProcessorContact( $email, $contactID, &$result )

Parameters

  • @param string $email the email address
  • @param int $contactID the contactID that matches this email address, IF it exists
  • @param array $result (reference) has two fields
  • contactID - the new (or same) contactID
  • action - 3 possible values: - CRM_Utils_Mail_Incoming::EMAILPROCESSOR_CREATE_INDIVIDUAL - create a new contact record
  • CRM_Utils_Mail_Incoming::EMAILPROCESSOR_OVERRIDE

    - use the new contactID

    CRM_Utils_Mail_Incoming::EMAILPROCESSOR_IGNORE - skip this email address\ \

Returns

  • null

Availability

This hook was first available in CiviCRM 4.1.0

Example

function civitest_civicrm_emailProcessorContact( $email, $contactID, &$result ) {
  require_once 'CRM/Utils/Mail/Incoming.php';

  // first split the email into name and domain
  // really simple, definitely wrong implementation
  list($mailName, $mailDomain) = CRM_Utils_System::explode('@', $email, 2);

  // we are doing all our checks based on mailDomain, so if empty
  // return and let EmailProcessor do its own thing
  if (empty($mailDomain)) {
    return;
  }

  define('FILE_TO_ORG_ALWAYS_TAG', 'MyTag1');
  $orgID = _civitest_find_org_with_tag(FILE_TO_ORG_ALWAYS_TAG, $mailDomain);
  if ($orgID) {
    $result = array(
      'contactID' => $orgID,
      'action' => CRM_Utils_Mail_Incoming::EMAILPROCESSOR_OVERRIDE,
    );
    return;
  }

  // if we already have a match, we will
  // return and let EmailProcessor do its own thing
  if ($contactID) {
    return;
  }

  // Orgs with this tag will have same-domain emails filed on them only if it
  // passes through the ALWAYS tag check without finding a match, AND it does
  // not match an individual.
  define('FILE_TO_ORG_INDIVIDUAL_UNMATCHED_TAG', 'MyTag2');
  $orgID = _civitest_find_org_with_tag(FILE_TO_ORG_INDIVIDUAL_UNMATCHED_TAG, $mailDomain);
  if ($orgID) {
    $result = array(
      'contactID' => $orgID,
      'action' => CRM_Utils_Mail_Incoming::EMAILPROCESSOR_OVERRIDE);
    return;
  }

  $result = array('action' => CRM_Utils_Mail_Incoming::EMAILPROCESSOR_CREATE_INDIVIDUAL);
}