0

Gmailからメールを取得するためにIMAPクライアントに取り組んでいます。私のアプリケーションは、添付ファイルの取得が停止する約1時間前まで正常に機能していました。

接続とメッセージングは​​imapXによって処理されています。

接続はOKAYログインはOKAYフォルダの取得はOKAYメッセージの取得はOKAY

この時点でattachments.Count==0。今日の午後早くに機能していたので、テストをやりすぎて、Googleがしばらくの間コンピューターをブラックリストに登録したのではないかと思います。これが事実かどうか誰かが知っていますか?-おそらく5〜10分に1回、場合によってはそれ以上実行しているため、これはもっともらしい問題である可能性があります。

まったく新しいファイルで新しい電子メールを送信しようとしましたが、それでも添付ファイルは表示されません(ただし、(常に)メッセージ自体は表示されます)。

誰かがこの問題に光を当てることができますか?

編集:ヘッダーには次のタグが含まれています{[X-MS-Has-Attach、yes]}

編集(コード):

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);
        }
    }
4

1 に答える 1

0

添付ファイルデータを取得できるようにする回避策を作成しました。それは機能しますが、私が考えていた解決策ではありません。

単純なファイル名拡張子チェックとそれに続くメッセージデータの変換。

ところで:_encoding = Encoding.GetEncoding(1252);

            if (bodyPart.ContentFilename.EndsWith(".csv"))
            {
                return _encoding.GetString(Convert.FromBase64String(bodyPart.ContentStream));
            }
于 2012-02-15T11:35:11.457 に答える