使用 C# 向 GMail 发送 IMAP 命令

2024-03-21

我一直在尝试访问我的 GMail 帐户以从我的电子邮件帐户中检索未读电子邮件。但是,我只执行登录...之后的任何操作都不起作用。

首先,我连接到服务器,然后发送登录命令,最后发送检查命令。问题是收到的响应仅涉及连接和登录。之后,它就停止等待从 StreamReader 读取某些内容。

try
        {
            // create an instance of TcpClient
            TcpClient tcpclient = new TcpClient();
            // HOST NAME POP SERVER and gmail uses port number 995 for POP  
            //tcpclient.Connect("pop.gmail.com", 995);
            tcpclient.Connect("imap.gmail.com", 993);
            // This is Secure Stream // opened the connection between client and POP Server
            SslStream sslstream = new SslStream(tcpclient.GetStream());
            // authenticate as client  

            sslstream.AuthenticateAsClient("imap.gmail.com");

            bool flag = sslstream.IsAuthenticated;   // check flag
            // Asssigned the writer to stream
            System.IO.StreamWriter sw = new StreamWriter(sslstream);
            // Assigned reader to stream
            System.IO.StreamReader reader = new StreamReader(sslstream);

            sw.WriteLine("tag LOGIN [email protected] /cdn-cgi/l/email-protection pass");
            sw.Flush();

            sw.WriteLine("tag2 EXAMINE inbox");
            sw.Flush();

            sw.WriteLine("tag3 LOGOUT ");
            sw.Flush();

            string str = string.Empty;
            string strTemp = string.Empty;
            try
            {
                while ((strTemp = reader.ReadLine()) != null)
                {
                    Console.WriteLine(strTemp);
                    // find the . character in line
                    if (strTemp == ".")
                    {
                        //reader.Close();
                        break;
                    }
                    if (strTemp.IndexOf("-ERR") != -1)
                    {
                        //reader.Close();
                        break;
                    }
                    str += strTemp;
                }
            }
            catch (Exception ex)
            {
                string s = ex.Message;
            }
            //reader.Close();

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

我一直在寻找这种“Hello World”示例来帮助我入门。在 dkarp 的回答的帮助下,这是我对 Miguel 的例子的看法:

        static void Main( string[] args ) {
        try {
            TcpClient tcpclient = new TcpClient();
            tcpclient.Connect( "imap.gmail.com", 993 );

            SslStream sslstream = new SslStream( tcpclient.GetStream() );
            sslstream.AuthenticateAsClient( "imap.gmail.com" );

            if ( sslstream.IsAuthenticated ) {
                StreamWriter sw = new StreamWriter( sslstream );
                StreamReader sr = new StreamReader( sslstream );

                sw.WriteLine( "tag LOGIN [email protected] /cdn-cgi/l/email-protection pass" );
                sw.Flush();
                ReadResponse( "tag", sr );

                sw.WriteLine( "tag2 EXAMINE inbox" );
                sw.Flush();
                ReadResponse( "tag2", sr );

                sw.WriteLine( "tag3 LOGOUT" );
                sw.Flush();
                ReadResponse( "tag3", sr );
            }
        }
        catch ( Exception ex ) {
            Console.WriteLine( ex.Message );
        }
    }

    private static void ReadResponse( string tag, StreamReader sr ) {
        string response;

        while ( ( response = sr.ReadLine() ) != null ) {
            Console.WriteLine( response );

            if ( response.StartsWith( tag, StringComparison.Ordinal ) ) {
                break;
            }
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 C# 向 GMail 发送 IMAP 命令 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • 在后台 android 每 5 分钟运行一次截击请求

    我使用 Volley 库来连接我的应用程序中的服务器 现在 当应用程序未运行 被用户杀死 时 我也必须每 5 分钟在后台发送一次请求 我该怎么做呢 有了后台服务 AlarmManager 谷歌表示这对于网络运营来说不是一个好的选择 还是其他
  • 设置 Range.Locked 时出现错误 1004

    当我试图设置Locked http msdn microsoft com en us library bb213550 28v office 12 29 aspxRange 对象的属性 代码如下所示 that goddamn sheet U
  • 如何将项目添加到列表中?

    我想添加一个字符串单词listOfVideosRated 列在我的用户表中 如果您可以发布您的架构 解析器映射模板 我可以提供更具体的建议 但我会尽力用您迄今为止发布的内容来回答这个问题 简单的方法 如果您已经拥有现有项目 则执行此操作的一
  • iOS7 UIWebView 内存泄漏

    我们有一个具有混合模式的综合 iOS 应用程序 UIWebView 在 JS 中保存了 Web 应用程序的主要部分 它在 iOS6 上运行良好 但最近我们发现所有 iOS7 设备 iPad iPhone 4 4S 和 iPhone 5 5C
  • 如何将字符串转换为 BigInteger?

    我正在尝试从标准输入中读取一些非常大的数字并将它们加在一起 但是 要添加到 BigInteger 我需要使用BigInteger valueOf long private BigInteger sum BigInteger valueOf
  • 默认显示所有文件

    有没有办法默认打开 Visual Studio 解决方案资源管理器 显示所有文件 设置 不是 Visual Studio 设置 但如果您使用版本控制 则会有所帮助 在 vcxproj 或解决方案范围的 props 文件中插入以下行
  • 我不明白为什么我的 group by 失败

    SELECT ENAME MAX SAL STORES CITY FROM EMPLOYEES INNER JOIN STORES ON EMPLOYEES STORE ID STORES STORE ID GROUP BY EMPLOYE
  • Pandas DataFrame:使用列的唯一值转换框架

    我有一个以下形式的 pandas dataframe csv date Country Type Val 2013 01 01 USA x 23 2013 01 01 USA y 13 2013 01 01 MX x 11 2013 01
  • 打开 Spyder 时出错: pylsp >=1.7.2,<1.8.0 : 1.7.1 (NOK)

    我尝试升级conda和spyder 但遇到了问题 I tried conda update anaconda conda install spyder 5 4 3 pip install pylsp mypy 我先在spyder终端中使用选
  • Android - 滚动 ListView 时微调器选择消失

    我有一个包含一堆微调器的列表视图 但是当我滚动列表视图时 微调器的值会被重置 有没有办法来解决这个问题 这就是我的 ArrayAdapter 类的样子 公共类 ProductArrayAdapter 扩展 ArrayAdapter 私有最终
  • 使用模板调用重载函数(未解决的重载函数类型编译器错误)[重复]

    这个问题在这里已经有答案了 可能的重复 如何获取重载成员函数的地址 https stackoverflow com questions 705854 how to get the address of an overloaded membe
  • Objective-C 中连接 NSString 的快捷方式

    有没有什么捷径可以到达 stringByAppendingString Objective C 中的字符串连接 或使用的快捷方式NSString一般来说 例如 我想做 NSString myString This NSString test
  • 固定 - 液体 - 固定布局

    我想要一个 固定 液体 固定 跨浏览器兼容的布局 HTML body div col 1 div col 2 div col 3 CSS col 1 width 150px float left col 2 width 100 paddin
  • 如何初始化句柄

    Error Run Time Check Failure 3 The variable TextLabelVar is being used without being initialized 示例代码 HWND VarText char
  • AngularJS:ngRoute 未提供所需的主页

    我不知道为什么我的根目录 主页 无法正确路由 显示 这是我的 ASP Net Core 项目文件目录设置 这是我的MapRoute声明于Startup cs app UseMvc config gt config MapRoute name
  • 无法更新 UITableView

    我有 UITableViewController 作为 RootViewController 我需要根据从 RootViewController 线程启动的另一个线程获取的数据向表中添加行 当我从其他线程返回到 RootViewContro
  • 如何解析MICR线数据?

    我有一台数字支票扫描仪 能够从支票中捕获 MICR 线 它将以字符串形式返回原始格式的 MICR 行 并使用分隔符分隔帐号 路由号码和支票号码 然而 每个银行对该 MICR 行的格式都不同 因此没有标准的方法来解析该数据 我尝试过的一些公司
  • Pandas 更新多索引数据框中的值

    如何编辑多索引数据框的值 如果它是一个非多索引数据框 我知道我可以这样做 df at 0 foo 12 3 另外 这不起作用 df loc 0 foo a 12 3 考虑一个多索引列数据框 colnames foo foo foo po p
  • 启动 spring web mvc 应用程序时出现异常

    当我使用 spring 3 2 9 时 我的 spring 项目工作正常 但如果我将其更改为 4 1 4 则在启动应用程序时会出现以下异常
  • 使用 C# 向 GMail 发送 IMAP 命令

    我一直在尝试访问我的 GMail 帐户以从我的电子邮件帐户中检索未读电子邮件 但是 我只执行登录 之后的任何操作都不起作用 首先 我连接到服务器 然后发送登录命令 最后发送检查命令 问题是收到的响应仅涉及连接和登录 之后 它就停止等待从 S