Skip to content

Commit ac8a4d0

Browse files
authored
Merge pull request #163 from DirectoryTree/issue-82-message-id-query
Add message ID query helper
2 parents fbe5025 + 4c7dc61 commit ac8a4d0

3 files changed

Lines changed: 26 additions & 0 deletions

File tree

src/Connection/ImapQueryBuilder.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,14 @@ public function header(string $header, string $value): static
270270
return $this->where(ImapSearchKey::Header->value." $header", $value);
271271
}
272272

273+
/**
274+
* Add a where "HEADER Message-ID" clause to the query.
275+
*/
276+
public function messageId(string $messageId): static
277+
{
278+
return $this->header('Message-ID', trim(trim($messageId), '<>'));
279+
}
280+
273281
/**
274282
* Add a where "UID" clause to the query.
275283
*/

tests/Unit/Connection/ImapQueryBuilderTest.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,17 @@ function (ImapQueryBuilder $q) {
221221
expect($builder->toImap())->toBe('FOO bar');
222222
});
223223

224+
test('compiles message id condition', function (string $messageId) {
225+
$builder = new ImapQueryBuilder;
226+
227+
$builder->messageId($messageId);
228+
229+
expect($builder->toImap())->toBe('HEADER MESSAGE-ID "unique-message-id@server.example.com"');
230+
})->with([
231+
'bare message id' => ['unique-message-id@server.example.com'],
232+
'wrapped message id' => ['<unique-message-id@server.example.com>'],
233+
]);
234+
224235
test('converts values from utf-8 to utf-7', function () {
225236
$builder = new ImapQueryBuilder;
226237

tests/Unit/MessageQueryTest.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,13 @@ function query(?Mailbox $mailbox = null): MessageQuery
3333
expect($query)->toBe('SUBJECT "hello"');
3434
});
3535

36+
test('message id forwards to query builder', function () {
37+
$query = query();
38+
39+
expect($query->messageId('unique-message-id@server.example.com'))->toBe($query);
40+
expect($query->toImap())->toBe('HEADER MESSAGE-ID "unique-message-id@server.example.com"');
41+
});
42+
3643
test('destroy', function () {
3744
$stream = new FakeStream;
3845
$stream->open();

0 commit comments

Comments
 (0)