- return new CRM_Mailing_MailStore_Imap($dao->server, $dao->username, $dao->password, (bool) $dao->is_ssl, $dao->source, TRUE);
+ return [
+ // For backward compat with pre-release XOAuth2 configurations
+ 'auth' => $protocol === 'IMAP_XOAUTH2' ? 'XOAuth2' : 'Password',
+ // In a simpler world:
+ // 'auth' => 'Password',
+ 'factory' => function($mailSettings) {
+ $useXOAuth2 = ($mailSettings['auth'] === 'XOAuth2');
+ return new CRM_Mailing_MailStore_Imap($mailSettings['server'], $mailSettings['username'], $mailSettings['password'], (bool) $mailSettings['is_ssl'], $mailSettings['source'], $useXOAuth2);
+ },
+ ];