2015-04-08 3 views
1

На самом деле я хотел бы удалить почтовое сообщение по электронной почте уникальный идентификатор (я использую ActiveUp.Net.Mail.Pop3Client)C# Pop3 DeleteMessage не удаляет электронную почту

Чтобы сделать это я использую следующий код:

private void DeleteMessageByUID (string uid , Pop3Client popClient) 
{ 
    for (int i = 1; i <= popClient.MessageCount; i++) 
    { 
      Header email = popClient.RetrieveHeaderObject(i); 

      if (email.MessageId == uid) 
      { 
       popClient.DeleteMessage(i); 
       break; 
      } 
    } 

    popClient.Disconnect(); 
} 

Но примерно через два часа, начиная с того момента, когда я удалю все сообщения (изначально сообщения исчезают из почтового ящика), я смогу их найти (с теми же UID, что и ранее удаленные сообщения).

Я не уверен, была ли причина проблемы в моей программе, я думаю, это ошибка конфигурации почтового ящика, но я был бы уверен в этом, прежде чем я свяжусь с sysadmin.

+0

Код в порядке. Я проверил бы с администратором ваши политики хранения электронной почты. Возможно, вы не можете удалить сообщения, и они должны оставаться на сервере. – ApolloSoftware

ответ

1

Способ, которым работает POP3, заключается в том, что команда DELE, отправленная методом DeleteMessage(), фактически не удаляет сообщение, все, что он делает, указывает на его удаление в будущем, когда клиент POP3 отключается с помощью команды QUIT.

Я не уверен, как работает клиент POP3 ActiveUp, но мое (MailKit) будет посылать команду QUIT, если вы звоните client.Disconnect (true); (true это бросить аргумент).

Кроме того, заголовок идентификатора сообщения FWIW не совпадает с уникальным идентификатором. Будьте осторожны, используя это как свой механизм для идентификации сообщений любым уникальным способом, поскольку идентификаторы сообщений не обязательно уникальны и не являются безопасным способом идентификации сообщений. Клиенты, использующие идентификаторы сообщений таким образом, открыты для DoS-атак, когда хакер может отправить вам электронное письмо с идентичным идентификатором сообщения и заставить его сопоставить его с неправильным сообщением.

+0

У меня есть проверка того, как отключена функция ActiveUp Disconnect и кажется, что она не принимает никаких параметров и всегда отправляет команду «QUIT» на сервер Pop3 (возвращает ответ сервера как строку). Другой вопрос, я не понимаю, является ли проблема с Message-Id, вы можете отправить мне ссылку, где объясняется этот сценарий? Заранее благодарим за помощь. – Skary

+0

Если вы отправляете сообщение электронной почты с идентификатором сообщения «X», и я, как сабакан, хочу подорвать ваше сообщение, я могу отправить другое сообщение, используя тот же Message-Id. Если клиент получателя предполагает, что ваше сообщение является моим дубликатом (мой приход первым), поскольку он имеет тот же идентификатор сообщения, то получатель никогда не увидит ваше сообщение. – jstedfast

+0

спасибо, теперь ясно, в чем проблема, не мой сценарий. Я разрабатываю простой инструмент для автоматического обмена почтой, но он работает на частной сети и между «доверенными» сторонами. Еще раз спасибо за разъяснение. – Skary

Смежные вопросы