在 C# 中使用 AE.Net.Mail 访问 GMail

Posted

技术标签:

【中文标题】在 C# 中使用 AE.Net.Mail 访问 GMail【英文标题】:Accessing GMail using AE.Net.Mail in C# 【发布时间】:2013-07-22 09:54:02 【问题描述】:

我已经实现了以下示例代码来访问 gmail 并使用 AE.Net.Mail 获取前 10 个邮件主题。

我想知道到底出了什么问题,我反复收到错误

连接尝试失败,因为连接方在一段时间后没有正确响应,或建立连接 失败,因为连接的主机没有响应 173.194.79.108:993

这是代码。

using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using AE.Net.Mail;
using AE.Net.Mail.Imap;
using System.Configuration;

namespace IMAP

    class Program
    
        private static void Main()
        
            var items = ReadMail();
            if (items != null && items.Count > 0)
            
                foreach (var item in items.Take(10))
                
                    Console.WriteLine(item.Subject);
                
            
            Console.ReadLine();
        
        public static List<MailMessage> ReadMail()
        
            List<MailMessage> messages = null;
            try
            
                string userName = "yourname@gmail.com"; // Replace with your actual gmail id
                string passWord = "password"; // Replace with your password

                if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(passWord))
                
                    using (var imapClient = 
                        new ImapClient("imap.gmail.com", userName, passWord,     ImapClient.AuthMethods.Login, 993, true))
                    
                        imapClient.SelectMailbox("INBOX");
                        messages = new List<MailMessage>(imapClient.GetMessageCount());
                        messages = imapClient.GetMessages(0, 100, false, true).ToList();
                        imapClient.Disconnect();
                    
                
                else
                
                    Console.WriteLine("Username or Password is empty!");
                
            
            catch (Exception ex)
            
                Console.WriteLine(ex.Message);
            
            return messages;
        
    

如果有人遇到类似的问题,请告诉我,以及如何解决。

谢谢, 斯里拉姆

【问题讨论】:

小提示:您正在创建一个列表,然后在下一行中丢弃它并使用 .ToList(); 创建一个新列表;如果您想添加到您创建的列表中,您必须使用 AddRange(...)。在您的情况下,您创建了 2 个列表,您只使用第二个列表 【参考方案1】:

我假设您遇到的错误来自尝试连接到远程 IMAP 服务器的ImapClient 构造函数引发的异常。该错误是Winsock error 10060 (Connection timed out.),如果您的连接数据包被阻止或者您尝试连接到错误的主机或错误的端口,通常会发生这种情况。你有几个选择:

ping/traceroute imap.gmail.com 看看是否可达 993 是 IMAP SSL 端口,因此您可以使用openssl s_client -connect imap.gmail.com:993 来检查您是否可以连接到 IMAP 服务器。如果连接成功,您将看到 gmail 的 IMAP 服务器证书和消息 * OK Gimap ready for requests,之后您可以输入 IMAP 登录命令 0 LOGIN username pass。 检查您的代理设置。尝试在不使用代理的情况下进行连接。 检查您的路由器/防火墙设置。端口993 是否开放? 尝试使用imap.googlemail.com 而不是imap.gmail.com

【讨论】:

非常感谢博扬!我会尝试你提到的所有要点!一旦我成功了就会更新你.. 它在我的家庭笔记本中工作。这是如何在我们的工作环境中不工作的。如你所说,993端口没有打开。感谢您的意见!

以上是关于在 C# 中使用 AE.Net.Mail 访问 GMail的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中将非 mime 消息转换为 mime 邮件消息

带有 MimeKit、C# Winforms 和 Google API 的 Gmail 草稿(带附件的 HTML)

C# 访问操作注册表整理

XLua 入门之 C# 访问 Lua

C# WPF 应用程序中的 Keycloak:如何在普通 MVVM WPF 应用程序中访问 C# 中给定用户/密码的角色?

在 c# 中使用 *** 进行活动目录身份验证