iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#实现收发邮件功能
  • 268
分享到

C#实现收发邮件功能

2024-04-02 19:04:59 268人浏览 独家记忆
摘要

一、服务端 tcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 13000);//定义监听器

一、服务端

    tcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 13000);//定义监听器
    server.Start();//启动监听器
    byte[] buffer = new byte[1024]; //创建一个容器用于接受数据
    string data = null;
    while (true)
    {
        //等待客户端连接过来
        TcpClient client = server.AcceptTcpClient();

        //Task<TcpClient> task1 = server.AcceptTcpClientAsync();
        //Socket socket = server.AcceptSocket();
        //Task<Socket> task2 = server.AcceptSocketAsync();
        //server.Pending();

        //取得客户端发送过来的数据 
        int len = client.Available;//获取已经从网络流接收且可供读取的数据量
        NetworkStream nstream = client.GetStream(); //返回一个可供读写的网络流
        int bytesRead;
        do
        {
            bytesRead = nstream.Read(buffer, 0, buffer.Length); //接收消息
            data = Encoding.UTF8.GetString(buffer, 0, bytesRead); //先将接收到的数据转化可输出的字符串类型
            Console.WriteLine("收到消息:" + data); 输出收到的信息
            byte[] msg = Encoding.UTF8.GetBytes(data.ToUpper());
            nstream.Write(buffer, 0, buffer.Length);//发送消息
        } while (bytesRead > 0);
        nstream.Close(); //1.先释放流的数据
        client.Close(); //2.再释放客户端的连接数据
    }
    server.Stop(); //3.关闭监听

二、客户端

    TcpClient client = new TcpClient("127.0.0.1", 13000);//连接服务器
    //或者
    //    TcpClient client=new TcpClient();
    //    client.Connect("127.0.0.1", 13000);
    NetworkStream nstream = client.GetStream();
    //---其他同服务端
    nstream.Close(); //1.先释放流的数据
    client.Close(); //2.再释放客户端的连接数据

三、发送邮件

1、使用MailMessage和SmtpClient发送邮件。

在Wince中,可以使用OpenNetCF.net.Mail类发送邮件。

    MailMessage mailMessage = new MailMessage
    {
        //发件人
        From = new MailAddress("***@163.com", "您的朋友", Encoding.UTF8),
        Priority = MailPriority.High,
        //邮件主题
        SubjectEncoding = Encoding.UTF8,
        Subject = "Hello",
    };

    //收件人 可以添加多个收件人
    mailMessage.To.Add(new MailAddress("137***126@qq.com"));

    //mailMessage.CC 获取包含此电子邮件的抄送(CC)收件人的地址集合

    //邮件正文            
    mailMessage.IsBodyhtml = true;//如果要发送html格式的消息,需要设置这个属性
    mailMessage.BodyEncoding = Encoding.UTF8;
    mailMessage.Body = "<p style='color:red;font-size:14px;'>邮件测试</p>";

    //邮件内容即消息正文中中显示图片 ,需要为图片指明src='cid:idname(资源id)'
    AlternateView htmlBody = AlternateView.CreateAlternateViewFromString("<img src='cid:zfp'/>", null, "text/html");
    //然后在LinkedResource加入文件的绝对地址,和ContentType 例如image/gif,text/html...与Http请求的响应报文中的ContentType一致
    LinkedResource lr = new LinkedResource("1.gif", "image/gif");
    //绑定上文中指定的idname
    lr.ContentId = "zfp";
    //添加链接资源
    htmlBody.LinkedResources.Add(lr);
    mailMessage.AlternateViews.Add(htmlBody);

    //发送附件 指明附件的绝对地址
    Attachment attachment = new Attachment("1.txt");
    mailMessage.Attachments.Add(attachment);

    //创建邮件发送客户端
    SmtpClient sendClient = new SmtpClient("smtp.qq.com", 25)
    {
        //指定邮箱账号和密码
        Credentials = new NetworkCredential(fromMail, "xmxyldrmtvnrddfe")
    };

    //指定如何发送电子邮件
    sendClient.DeliveryMethod = SmtpDeliveryMethod.Network;

    //指定使用使用安全套接字ssl加密的链接
    sendClient.EnableSsl = true;
    sendClient.Send(mailMessage);
    //或者可以一步发送
    sendClient.SendAsync(mailMessage, null);

 2、利用TcpClient类收取pop3邮件 

    TcpClient client = new TcpClient("mail.**.com", 443);

    //连接
    NetworkStream ns = client.GetStream();
    StreamReader sr = new StreamReader(ns, Encoding.Default);
    string result = sr.ReadLine(); //返回OK或ER

    //登陆
    StreamWriter sw = new StreamWriter(ns);
    sw.WriteLine("user  b**");
    sw.Flush();
    result = sr.ReadLine();

    sw.WriteLine("pass  **");
    sw.Flush();
    result = sr.ReadLine();
    //获取邮件数量
    sw.WriteLine("stat");
    sw.Flush();
    result = sr.ReadLine();//result.split(' ')[1]表示邮件数量

    //获取邮件信息
    sw.WriteLine("top 1 0 ");
    sw.Flush();
    result = sr.ReadLine();
    while (true)
    {
        result = sr.ReadLine();
        if (result == ".") break;
        if (result.Length > 4 && result.Substring(0, 8) == "Subject:")
        {
            //result为标题,乱码用Base64解码
            Encoding.GetEncoding("gb2312").GetString(Convert.FromBase64String(result));
        }
    }

到此这篇关于C#实现收发邮件功能的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C#实现收发邮件功能

本文链接: https://www.lsjlt.com/news/148757.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c语言怎么计算字符串长度
    在C语言中,可以使用内置的strlen()函数来计算字符串的长度。该函数位于string.h头文件中。以下是一个示例代码: #inc...
    99+
    2024-05-14
    c语言
  • c语言怎么判断三个数的大小
    可以通过比较三个数之间的大小关系来判断它们的大小。以下是一个示例代码: #include <stdio.h> int ...
    99+
    2024-05-14
    c语言
  • c++排序函数sort怎么使用
    在C++中,使用sort函数对容器中的元素进行排序,可以按照默认的升序排列,也可以自定义排序规则。 下面是一个简单的例子,对一个ve...
    99+
    2024-05-14
    c++
  • c++中string的compare函数怎么使用
    在C++中,可以使用string的compare函数来比较两个string对象的大小。该函数的原型如下: int compare(c...
    99+
    2024-05-14
    c++
  • c++中string的compare函数有什么用
    c++中string的compare函数用于比较两个字符串的大小关系。该函数返回一个整数值,表示两个字符串的比较结果。 具体来说,如...
    99+
    2024-05-14
    c++
  • c++中print函数的功能有哪些
    在C++中,通常使用std::cout来进行输出操作,而不是使用print函数。std::cout是C++标准库中的一个输出流对象,...
    99+
    2024-05-14
    c++
  • c语言数据结构怎么使用
    在C语言中,数据结构可以通过定义结构体来实现。以下是一些常见的数据结构的使用方法示例: 链表: #include <std...
    99+
    2024-05-14
    c语言
  • c++中print函数的用法是什么
    在C++中没有内置的print函数,但可以使用cout来输出内容到控制台。cout是C++标准库中的一个输出流对象,可以使用<...
    99+
    2024-05-14
    c++
  • c++中concept的用法是什么
    在C++20中,Concept是一种新的语言特性,用于定义类型要求和约束。Concept可以被用来约束函数模板、类模板和普通函数的参...
    99+
    2024-05-14
    c++
  • c++中concept的作用是什么
    在C++中,concept的作用是定义一种通用的约束,用于限制模板参数的类型范围。通过使用concept,可以在编译时对模板参数进行...
    99+
    2024-05-14
    c++
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作