0

コンソール アプリケーションを作成しています。アプリの目的は、メールボックスからパラメーターを含む最後のメールを取得することです。たとえば、「example@gmail.com」からのメールで、件名に「test」が含まれている場合は、何かを作成します。つまり、これらの特性を持つ新しい電子メールが受信されるたびに、何かが実行されます。1通のメールにつき1回のみ。

最初に、アプリは既に受信した電子メールの ID をリストに取得します。次に、20 秒ごとに、アプリは新しいメールがあるかどうかを確認し、存在する場合は、必要な特性が含まれているかどうかを確認します。特性がある場合は何かを実行しますが、そうでない場合は、何らかの電子メールが表示されるまでメールボックスをチェックし続けます。

class Program
{
    public class Email
    {
        public string Id { get; set; }
        public string Assunto { get; set; }
        public string De { get; set; }
        public string Para { get; set; }
        public DateTime Data { get; set; }
        public string ConteudoTexto { get; set; }
        public string ConteudoHtml { get; set; }
    }

    private static OpenPop.Pop3.Pop3Client _client = new OpenPop.Pop3.Pop3Client();
    private static List<string> _emailsProcessados = new List<string>();
    private static ManualResetEvent _quitEvent = new ManualResetEvent(false);

    private static void Autenticar()
    {
        if (_client.Connected)
        {

            _client.Disconnect();
        }
        _client.Connect("pop.gmail.com", 995, true);//Faz a conexão ao Gmail               
        _client.Authenticate("email@gmail.com", "password");//Autenticação do utilizador
        Console.WriteLine("Connected");
    }



    static void Main(string[] args)
    {            
        Console.CancelKeyPress += (s, e) => {
            _quitEvent.Set();
        };

        MarcarTodosOsEmailsExistentesComoProcessados();
        var timer = new Timer(ProcessarEmails, null, 0, 20000);
        _quitEvent.WaitOne();                        
    }

    private static void MarcarTodosOsEmailsExistentesComoProcessados()
    {
        Autenticar();
        var messageCount = _client.GetMessageCount();

        for (int i = messageCount; i > 0; i--)
        {
            var uid = _client.GetMessageUid(i);
            if (!_emailsProcessados.Contains(uid))
            {
                _emailsProcessados.Add(uid);
            }
        }
    }

    private static void ProcessarEmails(object p)
    {            
        var messageCount = _client.GetMessageCount();
        for (int i = messageCount; i > 0; i--)
        {
            var headers = _client.GetMessageHeaders(i);
            if (headers.From.Address.Equals("emailsender@gmail.com") && headers.Subject.Contains("test"))
            {
                var uid = _client.GetMessageUid(i);
                if (!_emailsProcessados.Contains(uid))
                {
                    Console.WriteLine("New email received");
                    _emailsProcessados.Add(uid);
                }
            }
        }
    }
}

OpenPop.NET を使用しています。このライブラリはメールボックスを自動的に更新しないため、メールボックスを更新するには再認証が必要です。

誰かが見たい場合は、ここに私のアプリがあります。

皆さんが私を助けてくれることを願っています。ご不明な点がございましたら、お気軽にお問い合わせください。

4

0 に答える 0