Gmail IMAP - вложения не отображаются - PullRequest
0 голосов
/ 14 февраля 2012

Я работал над IMAP-клиентом для получения писем из Gmail. Мое приложение работало нормально примерно час назад, когда приложения перестали извлекаться.

Соединение и обмен сообщениями обрабатываются imapX.

Соединение в порядке Логин в порядке Получение папок в порядке Получение сообщений в порядке

На данный момент attachments.Count == 0. Он работал сегодня днем, поэтому мне интересно, прошел ли я тестирование, и Google какое-то время попал в черный список моего компьютера? Кто-нибудь знает, так ли это? - Бегал, наверное, раз в 5-10 минут, а может и чаще, поэтому это может быть правдоподобной проблемой.

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

Может ли кто-нибудь пролить свет на этот вопрос?

РЕДАКТИРОВАТЬ: Заголовок включает в себя следующий тег {[X-MS-Has-Attach, да]}

РЕДАКТИРОВАТЬ (код):

private void PollMailFolders(object state)
    {
        try
        {

            if(_imapClient == null || !_imapClient.IsConnected)
                _imapClient = new ImapClient(_config.Server, _config.Port, true);

            if (_imapClient.Connection())
            {
                if(!_imapClient.IsLogined)
                    _imapClient.LogIn(_config.Username, _config.Password);

                string dateSearch = string.Format(
                    "SINCE {0:d-MMM-yyyy}{1}", DateTime.Today.AddDays(-_config.HistoryOnStartupDays),
                                                  _isFirstTime ? "" : " UNSEEN");

                _isFirstTime = false;

                foreach (Folder folder in _imapClient.Folders["SSForecasts"].SubFolder)
                {
                    var messages = _imapClient.Folders[folder.Name].Search(dateSearch, false);

                    foreach (Message m in messages)
                    {
                        m.Process();

                        foreach (var a in m.Attachments)
                        {
                            SendDataToParser(_encoding.GetString(a.FileData), folder.Name);
                        }
                        m.SetFlag(ImapFlags.SEEN);
                    }
                }
            }
        }
        catch(Exception e)
        {
            _diagnostics.Logger.ErrorFormat("Error in PollMailFolders: {0}", e);
        }
    }

1 Ответ

0 голосов
/ 15 февраля 2012

Я подготовил работу, которая позволяет мне получать данные вложения. Не то решение, которое я имел в виду, хотя оно работает.

Простая проверка расширения имени файла с последующим преобразованием данных сообщения.

Кстати: _encoding = Encoding.GetEncoding (1252);

            if (bodyPart.ContentFilename.EndsWith(".csv"))
            {
                return _encoding.GetString(Convert.FromBase64String(bodyPart.ContentStream));
            }
...