Как переместить электронное письмо в новый почтовый ящик и получить его UID в этом ящике с помощью PHP?

Я перемещаю электронные письма в другой почтовый ящик, используя код, который выглядит примерно так:

function move_email($stream, $uid, $destination) {
    $result = imap_mail_move($stream, $uid, $destination, CP_UID);
    if($result) {
        imap_expunge($stream);
    }
    return $result;

Работает отлично! Но я хотел бы иметь возможность получить это конкретное электронное письмо в будущем.

Насколько я понимаю, UID в новом поле может отличаться/будет отличаться от UID, переданного в функцию. Как получить UID письма из почтового ящика, указанного в $destination?

И вообще, как мне получить письмо по UID? imap_search() имеет многообещающее имя, но, похоже, он не может вернуть электронное письмо по UID.


person jeremiahs    schedule 30.01.2014    source источник
comment
Хм, если сервер не поддерживает UIDPLUS, вы не можете знать UID получателя. Но я не знаю функций PHP. Вы также хотите, чтобы fetch получал сообщения по UID.   -  person Max    schedule 31.01.2014


Ответы (1)


Вы правы, предполагая, что UID в новой папке будет другим. UID сообщения уникален только в этой папке.

Когда вы перемещаете сообщение в новую папку, вы, вероятно, можете предположить, что оно будет последним в этой папке (если только в то же время не будет получено какое-то новое сообщение, но давайте предположим, что этого не происходит). Учитывая это, вы можете использовать следующую команду IMAP для получения последнего сообщения:

UID FETCH * BODY[]

* в IMAP означает последний UID (неинтуитивно, поскольку мы обычно используем его в качестве подстановочного знака в других сценариях). В PHP вы, вероятно, захотите использовать одну из функций imap_fetch и передать это «*» как $sequence.

Примечание. Я не уверен, что * действительно будет работать в PHP, так как я читаю описание $sequence в imap_fetch_overview() и говорит:

Описание последовательности сообщений. Вы можете перечислить нужные сообщения с помощью синтаксиса X, Y или получить все сообщения в пределах интервала с помощью синтаксиса X: Y.

Нет упоминания о *, поэтому вам просто нужно попробовать и посмотреть, работает ли он. Было бы серьезным ограничением PHP, если бы он не позволял вам использовать всю гибкость наборов последовательностей, предоставляемую IMAP.

person Gigi    schedule 31.01.2014