C#实现收发邮件功能

2022-07-15,

一、服务端

    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#实现收发邮件功能的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。

《C#实现收发邮件功能.doc》

下载本文的Word格式文档,以方便收藏与打印。