温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么用C#实现接收QQ邮件功能

发布时间:2022-08-31 10:56:23 来源:亿速云 阅读:185 作者:iii 栏目:开发技术

这篇文章主要介绍“怎么用C#实现接收QQ邮件功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用C#实现接收QQ邮件功能”文章能帮助大家解决问题。

实现功能

C#获取QQ邮箱内的邮件

开发环境

开发工具: Visual Studio 2013

.NET Framework版本:4.5

实现代码

 static class Program     {           static string mail = "", pwd = "";         static void Main(string[] args)         {             Connect();             Console.WriteLine("结束运行");             Console.ReadKey();         }                 static void Connect()         {               TcpClient tcpClient = new TcpClient("pop.qq.com", 995);             Console.WriteLine("已建立连接");               SslStream sslStream = new SslStream(tcpClient.GetStream(), true);             sslStream.AuthenticateAsClient("pop.qq.com");               //发送邮箱账号             sslStream.SendPop("user " + mail);             Console.WriteLine(sslStream.ReadString().msg);               //发送邮箱密码             sslStream.SendPop("pass " + pwd);             Console.WriteLine(sslStream.ReadString().msg);               //获取邮箱统计数据             sslStream.SendPop("stat");             Console.WriteLine(sslStream.ReadString().msg);               //获取邮件数量和每个邮件的大小             sslStream.SendPop("list");             string listMsg = sslStream.ReadString().msg;             List<string> list = listMsg.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList();             if (list.Count < 2)             {                 Console.WriteLine("未获取到邮件");                 return;             }             list.RemoveAt(0);             list.RemoveAt(list.Count - 1);             for (int i = list.Count - 1; i > -1; i--)             {                 string[] arr = list[i].Split(' ');                 //获取邮件前n行内容                 sslStream.SendPop("top " + arr[0] + " 1");                 Console.WriteLine(list[i]);                 Console.WriteLine(GetHeader(sslStream.ReadString().msg));                 Console.WriteLine();                 Console.WriteLine();             }               //string id = Console.ReadLine();               //sslStream.SendPop("retr " + id);             //Console.WriteLine(GetContext(sslStream.ReadString().msg));               sslStream.Close();             tcpClient.Close();         }           /// <summary>         /// 解析邮件标题         /// </summary>         /// <param name="text"></param>         /// <returns></returns>         static string GetHeader(string text)         {             List<string> list = text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList();             list.RemoveAt(0);             list.RemoveAt(list.Count - 1);             StringBuilder sb = new StringBuilder();             for (int i = 1; i < list.Count; i++)             {                 if (list[i].StartsWith("Date: "))                 {                     sb.AppendLine("发送时间:" + list[i].Substring("Date: ".Length));                 }                 if (list[i].StartsWith("From: "))                 {                     string value = list[i].Substring("From: ".Length);                     sb.AppendLine("发送人:" + GetText(value));                 }                 if (list[i].StartsWith("Subject: "))                 {                     string value = list[i].Substring("Subject: ".Length);                     sb.AppendLine("邮件标题:" + GetText(value));                 }                 if (list[i].StartsWith("Cc: "))                 {                     string value = list[i].Substring("Cc: ".Length);                     sb.AppendLine("抄送:" + GetText(value));                 }               }             return sb.ToString();         }           /// <summary>         /// 解析邮件内容         /// </summary>         /// <param name="text"></param>         /// <returns></returns>         static string GetContext(string text)         {             List<string> list = text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList();             list.RemoveAt(0);             list.RemoveAt(list.Count - 1);             StringBuilder sb = new StringBuilder();             string s = list.Where(a => a.StartsWith("Content-Transfer-Encoding:")).SingleOrDefault();             int index = list.IndexOf(s) + 1;             for (int i = index; i < list.Count - index; i++)             {                 sb.AppendLine(GetText(list[i]));             }               return sb.ToString();         }           /// <summary>         /// 解析原始文本         /// </summary>         /// <param name="value"></param>         /// <returns></returns>         static string GetText(string value)         {             string encoding = "utf-8";             if (value.IndexOf("=?") == 0)             {                 string tag = "";                 if (value.Contains("?B?"))                 {                     tag = "?B?";                     encoding = value.SubStr("=?", tag);                 }                 if (value.Contains("?b?"))                 {                     tag = "?b?";                     encoding = value.SubStr("=?", tag);                 }                 if (value.Contains("?Q?"))                 {                     tag = "?Q?";                     encoding = value.SubStr("=?", tag);                 }                 if (tag != "")                 {                     string last = "";                     int lastIndex = value.LastIndexOf("?=");                     if (lastIndex != value.TrimEnd().Length - 2)                     {                         last = value.Substring(lastIndex + 2);                     }                     string text = value.SubStr(tag, "?=");                     if (tag.ToLower().Contains("b"))                     {                         return Encoding.GetEncoding(encoding).GetString(Convert.FromBase64String(text)) + last;                     }                     else if (tag.ToLower().Contains("q"))                     {                         return DecodeQP(text, encoding) + last;                     }                 }             }             return value;         }         static string SubStr(this string text, string start, string end)         {             try             {                 int s = text.IndexOf(start);                 int e = text.LastIndexOf(end);                 if (s == -1 || e == -1)                 {                     return text;                 }                 string result = text.Substring(s + start.Length, e - s - start.Length);                 return result;             }             catch (Exception ex)             {                 throw ex;             }           }           /// <summary>         /// 发送数据到pop         /// </summary>         /// <param name="sslStream"></param>         /// <param name="text"></param>         /// <param name="isNewLine"></param>         static void SendPop(this SslStream sslStream, string text, bool isNewLine = true)         {             if (isNewLine)             {                 text += "\r\n";             }             sslStream.Write(Encoding.ASCII.GetBytes(text));           }           static dynamic ReadString(this SslStream sslStream)         {             try             {                 byte[] buffer = new byte[2048 * 2048];                 int len = sslStream.Read(buffer, 0, buffer.Length);                 string result = Encoding.UTF8.GetString(buffer, 0, len);                 if (result.StartsWith("-ERR"))                 {                     throw new Exception(result);                 }                 else                 {                     return new { code = 1, msg = result };                 }             }             catch (Exception ex)             {                 return new { code = 0, msg = "读取错误:" + ex.Message };             }         }           //Quoted-Printable 解码(QP解码)         static string DecodeQP(string data, string encoding)         {             char ch;             string ret = "";             byte[] bytes = new byte[data.Length];             int bIdex = 0;               try             {                 for (int rIndex = 0; rIndex < data.Length; rIndex++)                 {                     ch = data[rIndex];                     if (ch == '=')                     {                         rIndex++;                         if (rIndex < data.Length && (Char.IsDigit(data[rIndex]) || Char.IsLetter(data[rIndex])))                         {                             bytes[bIdex++] = Byte.Parse(data.Substring(rIndex++, 2), System.Globalization.NumberStyles.HexNumber);                             continue;                         }                         if (rIndex < data.Length && data[rIndex] == '\r' && (rIndex + 1) < data.Length && data[rIndex + 1] == '\n')                         {                             rIndex++;                             continue;                         }                     }                     if (ch == '\r' || ch == '\n')                         continue;                     bytes[bIdex++] = (byte)ch;                 }                 ret = Encoding.GetEncoding(encoding).GetString(bytes, 0, bIdex);             }             catch (Exception ex)             {                 Console.WriteLine(ex.Message);             }             return ret;         }     }

关于“怎么用C#实现接收QQ邮件功能”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI