Neetesh Agarwal Ответов: 1

Чтение почты из Gmail с помощью IMAP


Здравствуйте друзья,

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

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

Я использую это




//код
public void mail()
        {
            string date = Convert.ToString(DateTime.Today);

            Imap client = new Imap();
            // connect to server
            client.Connect("imap.gmail.com", 993, SslMode.Implicit);
            // authenticate
            client.Login("abc@gmail.com", "abc123456");
            // select folder
            client.SelectFolder("Inbox");
            ImapMessageCollection messages = client.GetMessageList(ImapListFields.Envelope);
            if (con.State != ConnectionState.Open)
            {
                con.Open();
            }
            
            foreach (ImapMessageInfo message in messages)
            {
               
               // string todaydate = DateTime.Now.ToString("dd/MM/yyyy");
                if (message.Date.LocalTime.ToShortDateString() == DateTime.Now.Date.ToShortDateString())
                {
                    Insert_mail(message.UniqueId, message.Sender.ToString(), message.To.ToString(), message.Subject, message.Date.LocalTime, client.GetMailMessage(message.SequenceNumber).BodyText,message.HasBodyHtml);
                }
                
            }
              if (con.State == ConnectionState.Open)
                {
                    con.Close();
                }
            
        }

public void Insert_mail(string Uid, string from, string to, string subject, DateTime datetime, string message)
    {
       try
       {

                MySqlCommand cmd = new MySqlCommand();
                cmd.Parameters.AddWithValue("@unique_id", Uid);
                cmd.Parameters.AddWithValue("@sender", from);
                cmd.Parameters.AddWithValue("@reciever", to);
                cmd.Parameters.AddWithValue("@subject", subject);
                cmd.Parameters.AddWithValue("@date", datetime);
                cmd.Parameters.AddWithValue("@message", message);
                cmd.Parameters.AddWithValue("@mail_status", "unread");
                cmd.Connection = con;
                string query = "Insert Ignore into gmail_inbox(unique_id,sender,reciever,subject,date,message,mail_status) values (@unique_id,@sender,@reciever,@subject,@date,@message,@mail_status) ";
                cmd.CommandText = query;
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {

            }

    }

Prasad Khandekar

Привет Нитеш,

Вы разместили код для вставки.

Neetesh Agarwal

Да , bcz после чтения почты из IMap мне нужно хранить в базе данных. И я хочу , чтобы его выборка была только текущей, что Почта, я использовал условие IF в начале кода, как вы можете видеть, но я знаю, что это не очень хорошо. Пожалуйста, предложи мне что-нибудь.

1 Ответов

Рейтинг:
8

Prasad Khandekar

Привет Нитеш,

Используйте следующий запрос для чтения электронных писем в порядке убывания. Также убедитесь, что у вас есть индекс в столбце даты.

SELECT * FROM into gmail_inbox ORDER BY date DESC

Если вы хотите получить электронную почту для конкретного получателя, то используйте
SELECT * FROM into gmail_inbox WHERE receiver = @receiver ORDER BY date DESC
Используйте SQLCommand с SQLParameter, чтобы указать значение для @receiver.

С уважением,


Neetesh Agarwal

Здравствуйте, Прасад сэр, Спасибо за ответ, но моя проблема в другом. Я хочу, чтобы в то время как сообщение из gmail его только сканировало текущую дату электронной почты, а не всю почту почтового ящика(bcz там должно быть больше 10000) почты . Так что моя потребность, если есть какой-либо способ, что его читать только текущую дату почты

Prasad Khandekar

Я думаю, что ответил на него в вашем предыдущем посте. http://www.codeproject.com/Questions/574133/Date-time-from-current-time-to-two-days-ago.aspx-да. Используйте фильтры IMAP для поиска почты.

Neetesh Agarwal

Спасибо... Я нашел решение.

Neetesh Agarwal

Это означает, что он может читать почту в обратном порядке.