【问题标题】:Mailbridge nonSSL to SSL ServerMailbridge 非 SSL 到 SSL 服务器
【发布时间】:2015-03-18 03:25:31
【问题描述】:

我尝试为不支持 SSL 的旧应用程序编写一个“Mailbridge”(我知道缓冲区对于完整邮件来说太小了)。 (应用程序连接到“localhost”/我的服务器,我的服务器连接到真正的 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);

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

【问题讨论】:

    标签: c# email ssl


    【解决方案1】:

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

    {
                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();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2012-02-25
      • 1970-01-01
      • 2018-08-31
      • 2017-12-15
      • 2019-08-05
      • 2015-05-28
      • 1970-01-01
      • 2016-07-12
      • 2015-09-15
      相关资源
      最近更新 更多