c# - Mailbridge 非 SSL 到 SSL 服务器

标签 c# email ssl

我尝试为没有 SSL 支持的旧应用程序编写一个“Mailbridge”(我知道缓冲区对于完整的邮件来说太小了)。 (应用程序连接到“本地主机”/我的服务器,我的服务器连接到真正的 SSL 邮件服务器)我的问题:

{
        TcpClient tcpClient = (TcpClient)client;
        NetworkStream clientStream = tcpClient.GetStream();


        TcpClient sslmail = new TcpClient();
        SslStream sslStream;

            sslmail.Connect(server, sslport);
            sslStream = new SslStream(sslmail.GetStream());

            sslStream.AuthenticateAsClient(server);
            byte[] buffer = new byte[4096];




            int bytes=0;

            while((sslmail.Connected) && (tcpClient.Connected))
            { 

        try
        {

            Array.Clear(buffer, 0, buffer.Length);


              bytes=sslStream.Read(buffer, 0, buffer.Length);

            MessageBox.Show("To Client: "+Encoding.ASCII.GetString(buffer, 0, bytes));

            clientStream.Write(buffer, 0, buffer.Length);
            clientStream.Flush();




             Array.Clear(buffer, 0, buffer.Length);



               bytes=clientStream.Read(buffer, 0, buffer.Length);
               MessageBox.Show("To Server: "+Encoding.ASCII.GetString(buffer, 0, bytes));

            sslStream.Write(buffer, 0, buffer.Length);
            sslStream.Flush();
}
        catch (Exception err)
        {
            MessageBox.Show(err.Message);
        }


                /////////////////////////////////////
            }

            sslmail.Close();
        tcpClient.Close();
    }

连接有效:

To Client: +OK POP server ready H migmx018 0LaT8c-1ZFbyb06RD-00m4N0
To Server: USER xxxxxx
To Client: +OK password required for user "xxxxxx"

就是这样,现在它“挂”在

bytes=clientStream.Read(buffer, 0, buffer.Length);

使用 Windows Live Mail 进行测试,然后我使用自己的简单邮件应用程序,但如果我发送“PASS mypass”,服务器返回“-ERR 未知命令”(使用的服务器:pop.gmx.net) (使用 Windows Livemail 直接连接到服务器工作没有问题)

最佳答案

好的,我解决了问题,下面的代码可以工作,但是对于大邮件来说有点慢,因为超时

{
            TcpClient tcpClient = (TcpClient)client;
            NetworkStream clientStream = tcpClient.GetStream();



            TcpClient sslmail = new TcpClient();
            SslStream sslStream;

                sslmail.Connect(server, sslport);
                sslStream = new SslStream(sslmail.GetStream());

                sslStream.AuthenticateAsClient(server);
            int buffersize=1024;    
            byte[] buffer = new byte[buffersize];




                int bytes=0;

                while((sslmail.Connected) && (tcpClient.Connected))
                { 

            try
            {

                Array.Clear(buffer, 0, buffer.Length);


                try
                {
                    sslStream.ReadTimeout = 100;
                    bytes = sslStream.Read(buffer, 0, buffer.Length);


                    clientStream.Write(buffer, 0, bytes);
                    clientStream.Flush();


                }
                catch (Exception err)
                {
                    //timeout, server is waiting for client     
                }


                Array.Clear(buffer, 0, buffer.Length);



                 try
                 {
                     clientStream.ReadTimeout = 100;
                     bytes = clientStream.Read(buffer, 0, buffer.Length);



                     sslStream.Write(buffer, 0, bytes);
                     sslStream.Flush();
                 }
                 catch (Exception err)
                 {
                 //timeout, client is waiting for Server
                 }
}
            catch (Exception err)
            {
                sslmail.Close();
                tcpClient.Close();
                MessageBox.Show(err.Message);
            }


                    /////////////////////////////////////
                }

                sslmail.Close();
            tcpClient.Close();
        }
    }

关于c# - Mailbridge 非 SSL 到 SSL 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29113624/

相关文章:

c# - Invalidate()将东西留在屏幕上

html - 在VS2010中使用T4创建HTML电子邮件正文

android - 通过 https 的 Volley Request 仅适用于 Wifi (wlan) 但不适用于 3G/GPRS (umts)

c# - Windows 上基于 Gtk 的 Mono.WebBrowser

c# - Autofac:注册异步工厂方法

ruby-on-rails - 验证电子邮件时异常(exception)

objective-c - 无法通过我的应用程序发送电子邮件

security - SSL:客户端如何解密来自服务器的消息

discord.py : ssl. SSLCertVerificationError : certificate verify failed: unable to get local issuer certificate (_ssl. c:1056 上的 Python SSL 错误

c# - Nhibernate CommitAsync 是否等待所有异步 CRUD 操作?