马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

C# 接收邮件

  [复制链接]
查看7286 | 回复5 | 2014-7-14 14:34:00 | 显示全部楼层 |阅读模式
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;

namespace 接收邮件2__7_14
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public TcpClient Server;
        public NetworkStream NetStrm;
        public StreamReader RdStrm;//使其以一种特定的编码从字节流中读取字符
        public string Data;
        public byte[] szData;//8位无符号整数
        public string CRLF = "\r\n";

        //Connect按钮的消息响应函数完成了到POP3服务器的连接工作,
        //并根据用户名和密码进行登录。
        //如果一切顺利,则再向服务器发送STAT命令从而获得邮箱中邮件的相关信息:邮件数量和大小,最终完成连接。




        private void button1_Click(object sender, EventArgs e)
        {
            if (PopServer.Text == "" || Username.Text == "" || Password.Text == "")
            {
                MessageBox.Show("请设置邮件服务器信息!", "信息提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
                return;
            }
            //先检查是否为空


            //将光标置为等待状态
            Cursor cr = Cursor.Current;
            Cursor.Current = Cursors.WaitCursor;//获取等待光标,通常为沙漏形状

            //用110端口新建POP3服务器连接
            TcpClient Server = new TcpClient(PopServer.Text, 110);
            Status.Items.Clear();
            if (Server != null)
            {
                try
                {
                    //初始化
                    NetStrm = Server.GetStream();
                    RdStrm = new StreamReader(Server.GetStream());
                    Status.Items.Add(RdStrm.ReadLine());

                    //登录服务器过程
                    Data = "USER: " + Username.Text + CRLF;
                    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
                    //将制定字符数组中的所有字符编码为一个字节序列
                    NetStrm.Write(szData, 0, szData.Length);
                    Status.Items.Add(RdStrm.ReadLine());

                    Data = "PASS " + Password.Text + CRLF;
                    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
                    NetStrm.Write(szData, 0, szData.Length);
                    Status.Items.Add(RdStrm.ReadLine());

                    //向服务器发送STAT命令,从而取得邮箱的相关信息:邮件数量和大小
                    Data = "STAT" + CRLF;
                    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
                    NetStrm.Write(szData, 0, szData.Length);
                    Status.Items.Add(RdStrm.ReadLine());

                    //改变按钮的状态
                    button1.Enabled = false;//表示该控件是否可以对用户交互作出响应
                    button2.Enabled = true;
                    button3.Enabled = true;

                    //将光标置回原来的状态
                    Cursor.Current = cr;

                }

                catch (InvalidOperationException err)
                {
                    Status.Items.Add("Error: " + err.ToString());
                }
            }

        }
        
        //而Disconnect按钮的消息响应函数则通过向服务器发送QUIT命令来终止和邮件服务器的连接
        private void button2_Click(object sender, EventArgs e)
        {
            //将光标置为等待状态
            Cursor cr = Cursor.Current;
            Cursor.Current = Cursors.WaitCursor;

            //向服务器发送QUIT命令从而结束和POP3服务器的会话
            Data = "QUIT" + CRLF;
            szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
            NetStrm.Write(szData, 0, szData.Length);
            Status.Items.Add(RdStrm.ReadLine());

            //断开连接
            NetStrm.Close();
            RdStrm.Close();

            //改变按钮的状态
            button1.Enabled = true;
            button2.Enabled = false;
            button3.Enabled = false;

            //将光标置回原来的状态
            Cursor.Current = cr;
        }
        //Retrieve按钮的消息响应函数则根据用户在邮件编号文本框中的输入来取得相应的邮件,
        //它向服务器发送的命令为RETR,并根据返回的信息判断邮件的有无。
        //若返回信息的第一个字符为"+",则表示+OK,也即成功;若为"-",则表示-ERR,也即为失败。
        //在成功的情况下,若用户选择了"在邮件服务器上保留备份",
        //则收取邮件后不删除服务器上的备份,否则用DELE命令来进行相应的删除。
        private void button3_Click(object sender, EventArgs e)
        {
//将光标置为等待状态
Cursor cr = Cursor.Current;
Cursor.Current = Cursors.WaitCursor;
string szTemp;
richTextBox1.Clear();

try
{
//根据邮件编号从服务器获得相应邮件
Data = "RETR "+ MailNum.Text+CRLF;
szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
NetStrm.Write(szData,0,szData.Length);
szTemp = RdStrm.ReadLine();//从当前流中读取一行字符,并将数据作为字符串返回

if(szTemp[0]!=0)
{
//不断地读取邮件内容,只到结束标志:英文句号
while(szTemp!=".")
{
richTextBox1.Text+= szTemp;//信息 框的表示
szTemp = RdStrm.ReadLine();
}

//若BackupChBox未选中,则收取邮件后,删除保留在服务器上的邮件
if(checkBox1.Checked == false)
{
Data = "DELE" + MailNum.Text + CRLF;
szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
NetStrm.Write(szData,0,szData.Length);
Status.Items.Add(RdStrm.ReadLine());
}
}
else
{
Status.Items.Add(szTemp);
}

//将光标置回原来的状态
Cursor.Current = cr;
}

catch(InvalidOperationException err)
{
Status.Items.Add("Error: "+err.ToString());
}
}

        


        

        

    }
}
接收邮件的代码,为什么运行不出正确结果?请各位大神帮忙指点一下  急!急!
ibcadmin | 2014-7-14 19:06:17 | 显示全部楼层
我刚发完发送邮件教程,你就发接收的问题了。。
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
ibcadmin | 2014-7-14 19:06:31 | 显示全部楼层
报什么错
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
maxiaoyu521 | 2014-7-15 14:29:32 | 显示全部楼层


加入断点执行了一下,是这样的错误

加入断点执行了一下,是这样的错误
ibcadmin | 2014-7-15 15:17:42 | 显示全部楼层
     //将制定字符数组中的所有字符编码为一个字节序列
                    NetStrm.Write(szData, 0, szData.Length);
                    Status.Items.Add(RdStrm.ReadLine());

没有读取到,试这在前面加个判断非空的方法

if(szData !="" ||szData !=null)
{
Status.Items.Add(RdStrm.ReadLine());
}
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
maxiaoyu521 | 2014-7-15 15:56:50 | 显示全部楼层
把收取邮箱信息 下面的                        if ( szData != null)                    {
                        //Status.Items.Add(RdStrm.ReadLine());
                    }
                    注释掉状态栏里会有信息,+Err 提示连接错误 ,但是信息栏里没有相关信息??


CEGNCFRYBW}KA$2OR)AD]X5.jpg
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则