213 / 109 / 46
Регистрация: 12.12.2016
Сообщений: 399
1
.NET 4.x

Прием электронных сообщений, POP3, SSL/TLS

02.01.2017, 14:54. Показов 3329. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, подскажите пожалуйста как реализовать прием писем с почты POP3 + SSL или TLS?
Просто изменить порт на 995 не катит
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
using System;
using System.Text;
using System.Net.Sockets;
using System.Windows.Forms;
 
namespace Pop3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            TcpClient tcpClient = new TcpClient();
            tcpClient.Connect("pop.mail.ru", 110);
            NetworkStream netStrm = tcpClient.GetStream();
            System.IO.StreamReader strRead = new System.IO.StreamReader(netStrm);
            if (tcpClient.Connected)
            {
                MessageBox.Show("connected: " + strRead.ReadLine());
            }
            string login = "USER\r\n";
            byte[] WriteBuffer = new byte[1024];
            ASCIIEncoding en = new System.Text.ASCIIEncoding();
            WriteBuffer = en.GetBytes(login);
            netStrm.Write(WriteBuffer, 0, WriteBuffer.Length);
            MessageBox.Show("response: " + strRead.ReadLine());
            login = "PASSWORD\r\n";
            WriteBuffer = en.GetBytes(login);
            netStrm.Write(WriteBuffer, 0, WriteBuffer.Length);
            MessageBox.Show("response: " + strRead.ReadLine());
 
            login = "LIST\r\n";
            WriteBuffer = en.GetBytes(login);
            netStrm.Write(WriteBuffer, 0, WriteBuffer.Length);
            string resp;
            while (true)
            {
                resp = strRead.ReadLine();
                MessageBox.Show("could resp be .\r\n " + resp);
                if (resp == ".")
                {
                    MessageBox.Show("yes");
                    break;
                }
                else
                {
                    MessageBox.Show("list: " + resp);
                    continue;
                }
            }
 
            login = "QUIT\r\n";
            WriteBuffer = en.GetBytes(login);
            netStrm.Write(WriteBuffer, 0, WriteBuffer.Length);
            MessageBox.Show("response: " + strRead.ReadLine());
        }
 
        private void btnConnect_Click(object sender, EventArgs e)
        {            
            TcpClient tcpClient = new TcpClient();
            txtLog.Text = "I say:\r\nConnect me to " + txtServer.Text + ":" + txtPort.Text + "\r\n\r\n";
            tcpClient.Connect(txtServer.Text, Convert.ToInt32(txtPort.Text));
            NetworkStream netStream = tcpClient.GetStream();
            System.IO.StreamReader strReader = new System.IO.StreamReader(netStream);
            if (tcpClient.Connected)
            {
                txtLog.Text += "Server says:\r\n" + strReader.ReadLine() + "\r\n\r\n";
                byte[] WriteBuffer = new byte[1024];
                ASCIIEncoding enc = new System.Text.ASCIIEncoding();
                WriteBuffer = enc.GetBytes("USER " + txtUser.Text + "\r\n");
                txtLog.Text += "I say:\r\nHere's the username: " + txtUser.Text + "\r\n\r\n";
                netStream.Write(WriteBuffer, 0, WriteBuffer.Length);
                txtLog.Text += "Server says\r\n" + strReader.ReadLine() + "\r\n\r\n";
                WriteBuffer = enc.GetBytes("PASS " + txtPass.Text + "\r\n");
                txtLog.Text += "I say:\r\nHere's the password: " + txtPass.Text + "\r\n\r\n";
                netStream.Write(WriteBuffer, 0, WriteBuffer.Length);
                txtLog.Text += "Server says:\r\n" + strReader.ReadLine() + "\r\n\r\n";
                WriteBuffer = enc.GetBytes("LIST\r\n");
                txtLog.Text += "I say:\r\nPlease list the messages\r\n\r\n";
                netStream.Write(WriteBuffer, 0, WriteBuffer.Length);
                string ListMessage;
                while (true)
                {
                    try
                    {
                        ListMessage = strReader.ReadLine();
                        if (ListMessage == ".")
                        {
                            break;
                        }
                        else
                        {
                            txtLog.Text += "Server says:\r\n" + ListMessage + "\r\n\r\n";
                            continue;
                        }
                    }
                    catch (System.IO.IOException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
                txtLog.Text += "I say:\r\nThanks, we will disconnect now\r\n\r\n";
                WriteBuffer = enc.GetBytes("QUIT\r\n");
                netStream.Write(WriteBuffer, 0, WriteBuffer.Length);
                txtLog.Text += "Server says:\r\n" + strReader.ReadLine();
            }
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.01.2017, 14:54
Ответы с готовыми решениями:

Протокол pop3. Прием электронных сообщений
Добрый вечер, прошу помочь: Было задано написать простой почтовый клиент с принятием и...

Асинхронные сокеты: Как организовать разделение на прием сообщений и прием файлов
Изучив синхронные сокеты, перешел к изучению асинхронных. Столкнулся вот с чем, как, используя...

Ssl/Tls криптография, перехват пакетов
Вообщем, создал свой клиент - серверное приложение и использую Ssl/Tls криптографию. Попробовал...

Ssl/Tls криптография, аутентикация клиента
Здравствуйте, вообщем, создал TcpListener, TcpClient, реализовал криптографию, всё работает, всё...

11
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
02.01.2017, 19:31 2
И сразу вопрос - implicit или explicit SSL?

Добавлено через 49 секунд
+ Почему не используются стандартные классы из .NET Framework, зачем городить велосипед на сокетах?
0
213 / 109 / 46
Регистрация: 12.12.2016
Сообщений: 399
02.01.2017, 21:26  [ТС] 3
I2um1, implicit, наверное...
К сожалению, это старое решение по заданному вопросу
0
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
03.01.2017, 01:11 4
Цитата Сообщение от New Life Посмотреть сообщение
К сожалению, это старое решение по заданному вопросу
Надо использовать SslStream вместо NetworkStream, передав в конструктор netStrm. И вызвать метод AuthenticateAsClient("pop.mail.ru"). Ну~ и понятное дело поменять порт. Хотя лучше использовать любую библиотеку для отправки писем, которая поддерживает SSL, а то код кривоват.
0
213 / 109 / 46
Регистрация: 12.12.2016
Сообщений: 399
03.01.2017, 16:02  [ТС] 5
I2um1, подскажите пожалуйста как исправить ошибки:
"Имя "Interaction" не существует в текущем контексте.",
"Аргумент 1: не удается преобразовать из "string" в "int"."
C#
1
2
3
4
5
6
7
8
private void Form1_Load(object sender, EventArgs e)
        {
            string ProfileName = Interaction.GetSetting("EmailProfiles", "Selected", "Name");
            TxtHost.Text = Interaction.GetSetting("EmailProfiles", ProfileName, "HostName");
            TxtUsrNm.Text = Interaction.GetSetting("EmailProfiles", ProfileName, "userName");
            TxtPass.Text = Interaction.GetSetting("EmailProfiles", ProfileName, "password");
            TxtPort.Text = Interaction.GetSetting("EmailProfiles", ProfileName, "portNo");
        }
C#
1
2
3
4
5
6
7
8
9
10
11
public void getMesgs(int Num_Emails) 
        {
            string List_Resp = null;            
            Cursor = Cursors.WaitCursor;
            List_Resp = SendCommand(m_sslStream, "LIST");
            listBox2.Items.Add(List_Resp);
        }
private void label7_Click(object sender, EventArgs e)
        {
            getMesgs(MsgCount.Text);
        }
Добавлено через 48 минут
GetSetting(); из vb.net
0
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
03.01.2017, 21:21 6
Цитата Сообщение от New Life Посмотреть сообщение
"Имя "Interaction" не существует в текущем контексте.",
В месте, где ругается, возможно пропущен using. Компилятор не знает что такое Interaction.

Цитата Сообщение от New Life Посмотреть сообщение
"Аргумент 1: не удается преобразовать из "string" в "int"."
Где-то в коде идет попытка строковой переменной присвоить целое число, что делать нельзя.

Цитата Сообщение от New Life Посмотреть сообщение
подскажите пожалуйста как исправить ошибки
Мало контекста в коде - слишком много кастомных объектов.

Цитата Сообщение от New Life Посмотреть сообщение
GetSetting(); из vb.net
Это не о чем не говорит, здесь ошибки незнания C#.
0
New Life
03.01.2017, 22:17  [ТС]
  #7

Не по теме:

это лишнее

0
213 / 109 / 46
Регистрация: 12.12.2016
Сообщений: 399
03.01.2017, 22:17  [ТС] 8
I2um1, из vb.net переписывал на c#, не очень вышло...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
using System;
using System.Text;
using System.Windows.Forms;
using System.Net.Security;
using System.Net.Sockets;
using System.IO;
 
namespace EmailCheck
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        string PopHost = null;
        string UserName = null;
        string Password = null;
        int PortNm = 0;
 
        TcpClient POP3 = new TcpClient();
        StreamReader Read_Stream = default(StreamReader);
        NetworkStream Network_Stream = default(NetworkStream);
        SslStream m_sslStream = default(SslStream);
        string server_Command;
        int ret_Val = 0;
        byte[] m_buffer = null;
        string StatResp = null;
        string[] server_Stat = new string[3];
        int Index_Num = 0;
        //string StrRetr = null;
        //string Server_Response = null;
 
        private void label10_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
 
        public string SendCommand(SslStream sslStream, string Server_Command)
        {
            Server_Command = Server_Command + "\r\n";
            m_buffer = Encoding.ASCII.GetBytes(Server_Command.ToCharArray());
            m_sslStream.Write(m_buffer, 0, m_buffer.Length);
            Read_Stream = new StreamReader(m_sslStream);
            var Server_Reponse = Read_Stream.ReadLine();
            return Server_Reponse;
        }
 
        private void CmdDownload_Click(object sender, EventArgs e)
        {
            if (POP3.Connected)
            {
                CloseServer();
                POP3 = new TcpClient(PopHost, int.Parse(TxtPort.Text));
                ret_Val = 0;
            }
            else
            {
                string Server_Command = null;
                PopHost = TxtHost.Text;
                UserName = TxtUsrNm.Text;
                Password = TxtPass.Text;
                PortNm = int.Parse(TxtPort.Text);
 
                Cursor = Cursors.WaitCursor;
                POP3 = new TcpClient(PopHost, int.Parse(TxtPort.Text));
 
                Network_Stream = POP3.GetStream();
                m_sslStream = new SslStream(Network_Stream);
                m_sslStream.AuthenticateAsClient(PopHost);
                Read_Stream = new StreamReader(m_sslStream);
                listBox1.Items.Add(Read_Stream.ReadLine());
 
                server_Command = "USER" + UserName + "\r\n";
                m_buffer = System.Text.Encoding.ASCII.GetBytes(Server_Command.ToCharArray());
                m_sslStream.Write(m_buffer, 0, m_buffer.Length);
                listBox1.Items.Add(Read_Stream.ReadLine());
 
                server_Command = "PASS" + Password + "\r\n";
                m_buffer = System.Text.Encoding.ASCII.GetBytes(server_Command.ToCharArray());
                m_sslStream.Write(m_buffer, 0, m_buffer.Length);
                listBox1.Items.Add(Read_Stream.ReadLine());
 
                server_Command = "STAT" + "\r\n";
                m_buffer = System.Text.Encoding.ASCII.GetBytes(server_Command.ToCharArray());
                m_sslStream.Write(m_buffer, 0, m_buffer.Length);
                listBox1.Items.Add(Read_Stream.ReadLine());
            }
 
            Cursor = Cursors.WaitCursor;
            CmdClose.Enabled = true;
            CmdDownload.Enabled = false;
            label7.Enabled = true;
 
            //StatResp = listBox1.Items(listBox1.Items.Count - 1);
            server_Stat = StatResp.Split();
            MsgCount.Text = server_Stat[2];
            ret_Val = 1;
 
            if (ret_Val == 0)
                listBox2.Items.Add("ur not connected");
        }
 
        public void getMesgs(int Num_Emails)
        {
            string List_Resp = null;
            Cursor = Cursors.WaitCursor;
            List_Resp = SendCommand(m_sslStream, "LIST");
            listBox2.Items.Add(List_Resp);
        }
 
        public void CloseServer()
        {
            StatResp = SendCommand(m_sslStream, "QUIT");
            listBox1.Items.Add(StatResp);
            listBox2.Items.Clear();
            richTextBox1.Text = string.Empty;
            MsgCount.Clear();
            POP3.Close();
            ret_Val = 0;
        }
 
        private void CmdClose_Click(object sender, EventArgs e)
        {
            Cursor = Cursors.Default;
            CmdClose.Enabled = false;
            CmdDownload.Enabled = true;
            label7.Enabled = false;
            TxtHost.Text = "";
            TxtPass.Text = "";
            TxtPort.Text = "";
            TxtUsrNm.Text = "";
            CloseServer();
        }
 
        private void label8_Click(object sender, EventArgs e)
        {
            Form2 form = new Form2();
            form.Show();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            string ProfileName = Interaction.GetSetting("EmailProfiles", "Selected", "Name");
            TxtHost.Text = Interaction.GetSetting("EmailProfiles", ProfileName, "HostName");
            TxtUsrNm.Text = Interaction.GetSetting("EmailProfiles", ProfileName, "userName");
            TxtPass.Text = Interaction.GetSetting("EmailProfiles", ProfileName, "password");
            TxtPort.Text = Interaction.GetSetting("EmailProfiles", ProfileName, "portNo");
        }
 
        private void label7_Click(object sender, EventArgs e)
        {
            getMesgs(MsgCount.Text);
        }
 
        private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            string XX = null;
            string sZTMP = null;
            Cursor.Current = Cursors.WaitCursor;
            try
            {
                richTextBox1.Clear();
                Index_Num = (listBox2.SelectedIndex + 1);//.ToString();
                XX = ("RETR" + Index_Num.ToString() + "\r\n");
                m_buffer = System.Text.Encoding.ASCII.GetBytes(XX.ToCharArray());
                m_sslStream.Write(m_buffer, 0, m_buffer.Length);
                Read_Stream = new StreamReader(m_sslStream);
                Read_Stream.ReadLine();
                sZTMP = Read_Stream.ReadLine() + "\r\n";
                do
                {
                    sZTMP = Read_Stream.ReadLine() + "\r\n";
                    richTextBox1.Text += sZTMP;
                }
                while (Read_Stream.Peek() != -1);
 
                Cursor.Current = Cursors.Default;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
Imports System.IO
Imports System.Net.Sockets
Imports System.Text
Imports System.Net.Security
Imports System.Net
Class Form1
    Dim PopHost As String
    Dim UserName As String
    Dim Password As String
    Dim PortNm As Integer
 
    Dim POP3 As New TcpClient
    Dim Read_Stream As StreamReader
    Dim NetworkS_tream As NetworkStream
    Dim m_sslStream As SslStream
    Dim server_Command As String
    Dim ret_Val As Integer
    Dim m_buffer() As Byte
    Dim StatResp As String
    Dim server_Stat(2) As String
    Dim Index_Num As Integer
    Dim StrRetr As String
    Dim Server_Reponse As String
    Private Sub Label10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label10.Click
        Application.Exit()
    End Sub
    Function SendCommand(ByVal SslStrem As SslStream, ByVal Server_Command As String) As String
        Server_Command = Server_Command & vbCrLf
        m_buffer = System.Text.Encoding.ASCII.GetBytes(Server_Command.ToCharArray())
        m_sslStream.Write(m_buffer, 0, m_buffer.Length)
        Read_Stream = New StreamReader(m_sslStream)
        Server_Reponse = Read_Stream.ReadLine()
        Return Server_Reponse
    End Function
    Private Sub CmdDownload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdDownload.Click
        If POP3.Connected = True Then
            CloseServer()
            POP3 = New TcpClient(PopHost, Integer.Parse(TxtPort.Text))
            ret_Val = 0
            Exit Sub
        Else
            PopHost = TxtHost.Text
            UserName = TxtUsrNm.Text
            Password = TxtPass.Text
            PortNm = Integer.Parse(TxtPort.Text)
 
            Cursor = Cursors.WaitCursor
            POP3 = New TcpClient(PopHost, Integer.Parse(TxtPort.Text))
 
            NetworkS_tream = POP3.GetStream()
            m_sslStream = New SslStream(NetworkS_tream)
            m_sslStream.AuthenticateAsClient(PopHost)
            Read_Stream = New StreamReader(m_sslStream)
            ListBox1.Items.Add(Read_Stream.ReadLine())
 
            server_Command = "USER " + UserName + vbCrLf
            m_buffer = System.Text.Encoding.ASCII.GetBytes(server_Command.ToCharArray())
            m_sslStream.Write(m_buffer, 0, m_buffer.Length)
            ListBox1.Items.Add(Read_Stream.ReadLine())
 
            server_Command = "PASS " + Password + vbCrLf
            m_buffer = System.Text.Encoding.ASCII.GetBytes(server_Command.ToCharArray())
            m_sslStream.Write(m_buffer, 0, m_buffer.Length)
            ListBox1.Items.Add(Read_Stream.ReadLine())
 
            'Send STAT command to get information ie: number of mail and size
            server_Command = "STAT " + vbCrLf
            m_buffer = System.Text.Encoding.ASCII.GetBytes(server_Command.ToCharArray())
            m_sslStream.Write(m_buffer, 0, m_buffer.Length)
            ListBox1.Items.Add(Read_Stream.ReadLine())
 
        End If
 
        Cursor = Cursors.Default
        CmdClose.Enabled = True
        CmdDownload.Enabled = False
        Label8.Enabled = True
 
        'Get Messages count
        StatResp = ListBox1.Items(ListBox1.Items.Count - 1)
        server_Stat = StatResp.Split(" ")
        MsgCount.Text = server_Stat(1)
        ret_Val = 1
        'Get list of E-mails, where E-mail count = msgcount.text (3-Oct-2012)
        If ret_Val = 0 Then
            ListBox2.Items.Add("You are not connected, please connect")
            Exit Sub
        Else
        End If
    End Sub
    Private Sub MinimizeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MinimizeToolStripMenuItem.Click
        If Me.WindowState = FormWindowState.Normal Then
            Me.WindowState = FormWindowState.Minimized
        End If
    End Sub
    Private Sub Form1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
        If e.Button = Windows.Forms.MouseButtons.Right Then
            ContextMenuStrip1.Show(Me, e.Location)
        End If
    End Sub
    Sub getMesgs(ByVal Num_Emails As Integer)
        Dim List_Resp As String
        Dim I As Integer
        Cursor = Cursors.WaitCursor
        ProgressBar1.Value = 0
        ProgressBar1.Maximum = Num_Emails
        ProgressBar1.Step = 1
        Cursor = Cursors.WaitCursor
        For I = 1 To Num_Emails
            ProgressBar1.PerformStep()
            List_Resp = SendCommand(m_sslStream, "LIST " & I.ToString)
            ListBox2.Items.Add(List_Resp)
        Next I
        ProgressBar1.Value = 0
        Label8.Enabled = False
        Cursor = Cursors.Default
    End Sub
    Sub CloseServer()
        StatResp = SendCommand(m_sslStream, "QUIT ") & vbCrLf
        ListBox1.Items.Add(StatResp)
        ListBox2.Items.Clear()
        TextBox1.Text = String.Empty
        MsgCount.Clear()
        POP3.Close()
        ret_Val = 0
    End Sub
    Private Sub CmdClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdClose.Click
        Cursor = Cursors.Default
        CmdClose.Enabled = False
        CmdDownload.Enabled = True
        Label8.Enabled = False
        TxtHost.Text = ""
        TxtPass.Text = ""
        TxtPort.Text = ""
        TxtUsrNm.Text = ""
        CloseServer()
    End Sub
    Private Sub Label9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label9.Click
        _Settings.Show()
    End Sub
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        On Error Resume Next
        'Load last profile selected.
        Dim ProfileName As String = GetSetting("EmailProfiles", "Selected", "Name")
        TxtHost.Text = GetSetting("EmailProfiles", ProfileName, "HostName")
        TxtUsrNm.Text = GetSetting("EmailProfiles", ProfileName, "username")
        TxtPass.Text = GetSetting("EmailProfiles", ProfileName, "password")
        TxtPort.Text = GetSetting("EmailProfiles", ProfileName, "PortNo")
    End Sub
    Private Sub Label8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label8.Click
        If Not IsNumeric(MsgCount.Text) Then
            MsgCount.Text = "error : Restart App."
            Exit Sub
        End If
        getMesgs(MsgCount.Text)
    End Sub
    Private Sub ListBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox2.SelectedIndexChanged
        'Retrieve E-mails by Index
        Dim XX As String
        Dim sZTMP As String
        Cursor.Current = Cursors.WaitCursor
        Try
            TextBox1.Clear()
            Index_Num = (ListBox2.SelectedIndex + 1).ToString
            XX = ("RETR " + Index_Num.ToString & vbCrLf)
            m_buffer = System.Text.Encoding.ASCII.GetBytes(XX.ToCharArray())
            m_sslStream.Write(m_buffer, 0, m_buffer.Length)
            Read_Stream = New StreamReader(m_sslStream)
            Read_Stream.ReadLine()
            sZTMP = Read_Stream.ReadLine + vbCrLf
            Do While Read_Stream.Peek <> -1
                sZTMP = Read_Stream.ReadLine + vbCrLf
                TextBox1.Text += (sZTMP)
            Loop
 
            Cursor.Current = Cursors.Default
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
End Class
'End here
0
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
03.01.2017, 22:46 9
Цитата Сообщение от New Life Посмотреть сообщение
из vb.net переписывал на c#, не очень вышло...
1. Лучше переписать с нуля, а то там велосипед над pop3 и какие-то label8 и labal10 - очень непонятно.
2. Что такое _Settings.Show()?
3. В проект надо подключить:
C#
1
2
using Microsoft.VisualBasic;
using Microsoft.VisualBasic.CompilerServices;
Тогда будет работать Interaction, но просто написать using - не получится, в проект надо добавить ссылки на эти библиотеки VisualBasic в папке References.

Добавлено через 6 минут
Самый простой способ наверное оставить все на VB и подключить код формы как dll к проекту, раз не хочешь переделывать на нормальный код.
0
213 / 109 / 46
Регистрация: 12.12.2016
Сообщений: 399
03.01.2017, 23:13  [ТС] 10
I2um1, _Settings.Show() - второе окно, это можно не трогать
(vb) Label10 - выход из приложения, Label8 - нажимая, выведет "ID" сообщения в listBox2, если нажать на "ID" то в richTextBox выведется текст сообщения.
Подключил, но что-то на шарпе не хочет работать...
А есть какая-нибудь информация относительно приема почты pop3+ssl/tls в c#, желательно с примерами? Сам ничего не нашел... Только этот единственный пример
0
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
04.01.2017, 08:32 11
- SmtpClient, но он не поддерживает implicit SSL.
- SmtpMail, но он устарел.
- Или использовать любую кем-то написанную библиотеку.
1
213 / 109 / 46
Регистрация: 12.12.2016
Сообщений: 399
04.01.2017, 18:58  [ТС] 12
I2um1, присоединяется к серверу "pop.mail.ru", 995;
как прочитать сообщения и в MsgCount вывести их количество, подскажите пожалуйста?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
string PopHost;
        string PortNm;
        string UserName;
        string Password;
        string Message;
        string ServerCommand;
        byte[] m_buffer;
 
        string ListMsg;
 
        TcpClient clientConnect = new TcpClient();
        NetworkStream _networkStream = default(NetworkStream);
        SslStream _sslStream = default(SslStream);
        StreamReader _StreamReader = default(StreamReader);
 
        private void btnConnect_Click(object sender, EventArgs e)
        {
            PopHost = txtHost.Text;
            PortNm = txtPort.Text;
            UserName = txtUsrNm.Text;
            Password = txtPass.Text;
            Message = MsgCount.Text;
 
            clientConnect = new TcpClient(PopHost, int.Parse(txtPort.Text));
            _networkStream = clientConnect.GetStream();
            _sslStream = new SslStream(_networkStream);
            _sslStream.AuthenticateAsClient(PopHost);
            _StreamReader = new StreamReader(_sslStream);
 
            ServerCommand = "USER " + UserName + "\r\n";
            m_buffer = Encoding.ASCII.GetBytes(ServerCommand.ToCharArray());
            _sslStream.Write(m_buffer, 0, m_buffer.Length);
            listBox1.Items.Add(_StreamReader.ReadLine());
 
            ServerCommand = "PASS " + Password + "\r\n";
            m_buffer = Encoding.ASCII.GetBytes(ServerCommand.ToCharArray());
            _sslStream.Write(m_buffer, 0, m_buffer.Length);
            listBox1.Items.Add(_StreamReader.ReadLine());
 
            ServerCommand = "STAT " + "\r\n";
            m_buffer = Encoding.ASCII.GetBytes(ServerCommand.ToCharArray());
            _sslStream.Write(m_buffer, 0, m_buffer.Length);
            listBox1.Items.Add(_StreamReader.ReadLine()); // +OK Welcome!
 
            ServerCommand = "LIST " + "\r\n";
            m_buffer = Encoding.ASCII.GetBytes(ServerCommand.ToCharArray());
            _sslStream.Write(m_buffer, 0, m_buffer.Length);
            listBox1.Items.Add(_StreamReader.ReadLine()); // кол-во сообщений и общий размер      
        }
0
04.01.2017, 18:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.01.2017, 18:58
Помогаю со студенческими работами здесь

Ошибка: не удалось создать защищенный канал ssl tls
Создали сертификат на одной машине. Установил на другую в Личные. Приложением пытаемся подрубиться...

Проблема с кодировкой входящих писем. почтовый клиент. приём почты. POP3.
Скачал класс ( прогу в коде ) POP3 стороннего разработчика для приемё писем. ...

Как работать с POP3 для получения сообщений с сервера?
???

Could not create SSL/TLS secure channel
Добрый день! Следующая проблема: есть служба, есть объект httpwebrequest, создаем TLS соединение и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru