Skip to content

Commit 81f30cb

Browse files
authored
fix: advertise extended capabilities pre-auth (matches Gmail/Yahoo/Outlook behavior) (#943)
* fix: advertise extended capabilities pre-auth (matches Gmail/Yahoo/Outlook behavior) * fix: fixed protocol test to support both (at least for documentation purposes), mirror XAPPLEPUSHSERVICE being first capability advertised by Apple * fix: remove protocols not supported
1 parent dd7ac46 commit 81f30cb

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

imap-core/lib/imap-tools.js

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,20 @@ module.exports.sendCapabilityResponse = connection => {
739739
capabilities.push('QUOTA');
740740
capabilities.push('XLIST');
741741
capabilities.push('CHILDREN');
742+
743+
// Advertise extended capabilities pre-auth (matches Gmail/Yahoo/Outlook behavior)
744+
capabilities.push('SPECIAL-USE');
745+
capabilities.push('UIDPLUS');
746+
capabilities.push('CONDSTORE');
747+
capabilities.push('UTF8=ACCEPT');
748+
749+
capabilities.push('MOVE');
750+
751+
if (connection._server.options.maxMessage) {
752+
capabilities.push('APPENDLIMIT=' + connection._server.options.maxMessage);
753+
}
754+
755+
742756
} else {
743757
capabilities.push('ID');
744758
capabilities.push('UNSELECT');
@@ -764,14 +778,12 @@ module.exports.sendCapabilityResponse = connection => {
764778
capabilities.push('APPENDLIMIT=' + connection._server.options.maxMessage);
765779
}
766780

767-
if (connection._server.options.aps?.enabled) {
768-
capabilities.push('XAPPLEPUSHSERVICE');
769-
}
770781
}
771782

772783
capabilities.sort((a, b) => a.localeCompare(b));
773784

774-
connection.send('* CAPABILITY ' + ['IMAP4rev1'].concat(capabilities).join(' '));
785+
let protocolCaps = connection._server.options.aps?.enabled ? ['XAPPLEPUSHSERVICE', 'IMAP4rev1'] : ['IMAP4rev1'];
786+
connection.send('* CAPABILITY ' + protocolCaps.concat(capabilities).join(' '));
775787
};
776788

777789
module.exports.validateInternalDate = internaldate => {

imap-core/test/protocol-test.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,9 @@ describe('IMAP Protocol integration tests', function () {
5757
port
5858
},
5959
function (resp) {
60-
expect(/^\* CAPABILITY IMAP4rev1 /m.test(resp.toString())).to.be.true;
61-
expect(/^T1 OK/m.test(resp.toString())).to.be.true;
60+
// CAPABILITY should contain IMAP4rev1 (may be preceded by XAPPLEPUSHSERVICE)
61+
expect(/^\* CAPABILITY .*(XAPPLEPUSHSERVICE )?IMAP4rev1 /m.test(resp.toString())).to.be.true;
62+
expect(/^T1 OK /m.test(resp.toString())).to.be.true;
6263
done();
6364
}
6465
);

0 commit comments

Comments
 (0)