Autor Beitrag
DevInet
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43

Win XP, Win 7 Prof., Linux Mandriva
C#(VS 2010), Java, php
BeitragVerfasst: Mo 18.04.11 12:27 
Hallo zusammen

Ich arbeite momentan an einem Programm, mit dem ich Mail-Adressen auf ihre gültigkeit überprüfen kann.
Hierzu wird eine liste mit mx-records und eine liste mit möglichen mail-adressen geladen.
Die Überprüfung soll per Telnet ablaufen.


Hier erstmal der Quellcode von mir:
ausblenden volle Höhe C#-Quelltext
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:
using System;
using System.Collections;
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;
using System.Diagnostics;
using WindowsFormsApplication1.Properties;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            StreamReader mxlist = new StreamReader(@"C:\Dokumente und Einstellungen\hes\Eigene Dateien\mx.txt"true);
            {
                string line;
                while ((line = mxlist.ReadLine()) != null)
                {
                    mxBox.Items.Add(line);
                }
            }
            mxlist.Close();

            StreamReader maillist = new StreamReader(@"C:\Dokumente und Einstellungen\hes\Eigene Dateien\mailist1.txt"true);
            {
                string line2;
                while ((line2 = maillist.ReadLine()) != null)
                {
                    mailBox.Items.Add(line2);
                }
            }
            maillist.Close();
        }




        public class telnet
        {            
            private WindowsFormsApplication1.ScriptingTelnet fTelnet;
            private string fUsername;
            int Timeout = 100;

            string servNam = "";
            int port = 25;
            string mFrom = "MAIL FROM:Admin@test.de";

            public telnet()
            {
                fTelnet = new WindowsFormsApplication1.ScriptingTelnet(servNam, port, Timeout);
            }

            
            public bool Connect()
            {
                bool result = fTelnet.Connect();
                if (result)
                {
                    fTelnet.SendAndWait(mFrom, "MAIL FROM:Admin@test.de");
                   
                }
                return result;
            }

            public void SendMessage(string Message)
            {
                Message = "df -m";
            }
        }


        private void button1_Click(object sender, EventArgs e)
        {
            

            foreach (string item in mxBox.Items)
            {
                char[] splitterMain = { '\n' };
                string[] line = item.Split(splitterMain);
                
                string servNam = line[0];
                
                foreach (string item2 in mailBox.Items)
                {
                    char[] splitterMain2 = { '\n' };
                    string[] line2 = item2.Split(splitterMain2);


                    ProcessStartInfo start = new ProcessStartInfo("telnet ");
                    //start.RedirectStandardError = true;
                    start.RedirectStandardOutput = true;
                    start.UseShellExecute = false;
                    

                    Process p = Process.Start(start);

                    List<String> output = new List<String>();
                    List<String> route = new List<String>();

                    

                    while (!p.StandardOutput.EndOfStream)
                    {
                        output.Add(p.StandardOutput.ReadLine());
                        if (output.Last().Contains("220"))
                        {
                            route.Add(output.Last().Remove(0, output.Last().IndexOf("220") + "220".Length));
                        }
                    }


                    

                    StreamWriter schleife1 = new StreamWriter(@"C:\Dokumente und Einstellungen\hes\Eigene Dateien\route.txt"true);
                    foreach (string route1 in route)
                    {
                        schleife1.WriteLine(route1);
                    }
                    schleife1.Close();

                    /*Int32 connect = 220;
                    Int32 from = 250;
                    Int32 to = 250;
                    Int32 daten = 354;
                    string mail = line2[0];

                    Console.WriteLine("telnet " + servNam + port);
                    if (connect == 220)
                    {
                        Console.WriteLine("MAIL FROM:Admin@test.de");
                        if (from == 250)
                        {
                            Console.WriteLine("RCPT TO:" + mail);
                            if (to == 250)
                            {
                                Console.WriteLine("DATA");
                                if (daten == 354)
                                {
                                    validBox.Items.Add(mail + " ist gültig");
                                }
                                else
                                {
                                    return;
                                }
                            }
                            else
                            {
                                return;
                            }
                        }
                        else
                        {
                            return;
                        }
                    }
                    else
                    {
                        return;
                    }*/
                    
                }
            }
        }
    }
}

Nun zum Problem.
Wie sage ich dem Programm, welche commandos es ausführen muss, damit die nötigen eingaben auch gemacht werden und ein vernünftiges Ergebniss(Adresse wurde angenommen) dabei heraus kommt?
Da stehe ich momentan absolut aufm schlauch.

Ich hoffe es kann mir wer dabei helfen.

Mfg DevInet
BlackMatrix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Mo 18.04.11 17:52 
Wieso machst du die Überprüfung nicht mit Regex?
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Mo 18.04.11 21:44 
user profile iconBlackMatrix hat folgendes geschrieben Zum zitierten Posting springen:
Wieso machst du die Überprüfung nicht mit Regex?
Ja, das war auch ein Gedanke von mir.
Aber so wie es aussieht, will user profile iconDevInet nicht nur überprüfen, ob eine mail-Adresse syntaktisch stimmt, sondern ob sie tatsächlich existiert (bzw., ob er da eine mail hinschicken kann).
Und an diesem Punkt frage ich mich, wozu das Ganze?
- was sind das für Adressen bzw. wo hast Du sie her?
- was willst Du den Leuten schicken?
- und was hast Du davon zu wissen, dass eine Adresse nicht existiert??

Für mich sieht das alles ziemlich ... naja, wie soll ich sagen? ... aus. Kann mich aber auch täuschen. Wenn, dann entschuldige ich mich schonmal an dieser Stelle. Aber der erste Eindruck trügt selten.
DevInet Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43

Win XP, Win 7 Prof., Linux Mandriva
C#(VS 2010), Java, php
BeitragVerfasst: Di 19.04.11 10:02 
user profile iconTrashkid2000 hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBlackMatrix hat folgendes geschrieben Zum zitierten Posting springen:
Wieso machst du die Überprüfung nicht mit Regex?
Ja, das war auch ein Gedanke von mir.
Aber so wie es aussieht, will user profile iconDevInet nicht nur überprüfen, ob eine mail-Adresse syntaktisch stimmt, sondern ob sie tatsächlich existiert (bzw., ob er da eine mail hinschicken kann).
Und an diesem Punkt frage ich mich, wozu das Ganze?
- was sind das für Adressen bzw. wo hast Du sie her?
- was willst Du den Leuten schicken?
- und was hast Du davon zu wissen, dass eine Adresse nicht existiert??

Für mich sieht das alles ziemlich ... naja, wie soll ich sagen? ... aus. Kann mich aber auch täuschen. Wenn, dann entschuldige ich mich schonmal an dieser Stelle. Aber der erste Eindruck trügt selten.


Das ganze soll eine Hilfe für unseren Vertrieb sein, da wir in Regelmässigen abständen Kundentage veranstalten und die Vorabinfos per Mail verschicken.
Da wir bis vor kurzem mit einem externen Dienstleister zusammengearbeitet haben und dies nun nicht mehr tun müssen wir unsere Kundendatensätze überprüfen.
Dies würde per Hand zu lange dauern, also hab ich den Auftrag dieses Programm zu schreiben.
Oder möchte jemand von euch ca. 8000 e-mail-adressen einzeln überprüfen? ;)

Mfg
DevInet
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 19.04.11 10:42 
user profile iconDevInet hat folgendes geschrieben Zum zitierten Posting springen:
Das ganze soll eine Hilfe für unseren Vertrieb sein, da wir in Regelmässigen abständen Kundentage veranstalten und die Vorabinfos per Mail verschicken.

Sowas ähnliches gibt es bei uns auch. Ist also durchaus plausibel.

Ich habe zu dem Problem mal Tante Google bemüht: Das Ergebnis scheint vielversprechend zu sein. Ich habs aber nicht getestet.

Vorab sollte aber schon geprüft werden, ob die Adresse überhaupt regulär ist.
DevInet Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43

Win XP, Win 7 Prof., Linux Mandriva
C#(VS 2010), Java, php
BeitragVerfasst: Di 03.05.11 14:18 
Wie ich das über die Konsole, mit einzelnen, wenigen Adressen mache ist kein Problem.
Ich möchte das Programm aber mit einer Liste von Mailadressen und den dazugehörigen MX-Records füttern, damit ich nicht jede Adresse einzeln überprüfen muss.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 03.05.11 16:07 
Da gibt es Leute, die dafür schon Klassen entwickelt haben.
Ich habe einfach Suche bei Google C# TELNET probiert. Da scheinen einige brauchbare Ergebnisse zu sein.
DevInet Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43

Win XP, Win 7 Prof., Linux Mandriva
C#(VS 2010), Java, php
BeitragVerfasst: Di 03.05.11 16:14 
Zum besseren verständnis, gibts hier nochmal ne aktuellere Form des Codes:

ausblenden volle Höhe C#-Quelltext
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:
188:
189:
190:
191:
192:
193:
194:
195:
196:
using System;
using System.Collections;
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;
using System.Diagnostics;
using WindowsFormsApplication1.Properties;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            StreamReader mxlist = new StreamReader(@"C:\Dokumente und Einstellungen\hes\Eigene Dateien\mx.txt"true);
            {
                string line;
                while ((line = mxlist.ReadLine()) != null)
                {
                    mxBox.Items.Add(line);
                }
            }
            mxlist.Close();

            StreamReader maillist = new StreamReader(@"C:\Dokumente und Einstellungen\hes\Eigene Dateien\mailist1.txt"true);
            {
                string line2;
                while ((line2 = maillist.ReadLine()) != null)
                {
                    mailBox.Items.Add(line2);
                }
            }
            maillist.Close();
        }




        public class telnet
        {            
            private WindowsFormsApplication1.ScriptingTelnet fTelnet;
            private string fUsername;
            int Timeout = 100;

            string servNam = "";
            int port = 25;
            string mFrom = "MAIL FROM:Admin@test.de";
            string mTo = "";

            public telnet()
            {
                fTelnet = new WindowsFormsApplication1.ScriptingTelnet(servNam, port, Timeout);
            }

            
            public bool Connect()
            {
                bool result = fTelnet.Connect();
                if (result)
                {
                    fTelnet.SendAndWait(mFrom, "MAIL FROM:Admin@test.de");
                }
                return result;
            }

            public void SendMessage(string Message)
            {
                Message = "df -m";
            }
        }


        private void button1_Click(object sender, EventArgs e)
        {
            

            foreach (string item in mxBox.Items)
            {
                char[] splitterMain = { '\n' };
                string[] line = item.Split(splitterMain);
                
                string servNam = line[0];
                
                foreach (string item2 in mailBox.Items)
                {
                    char[] splitterMain2 = { '\n' };
                    string[] line2 = item2.Split(splitterMain2);


                    ProcessStartInfo start = new ProcessStartInfo("telnet ");
                    //start.RedirectStandardError = true;
                    start.RedirectStandardOutput = true;
                    start.UseShellExecute = false;
                    

                    Process p = Process.Start(start);

                    List<String> output = new List<String>();
                    List<String> route = new List<String>();

                    

                    while (!p.StandardOutput.EndOfStream)
                    {
                        output.Add(p.StandardOutput.ReadLine());
                        if (output.Last().Contains("220"))
                        {
                          fTelnet.SendAndWait("RCPT TO:" + mail);
                          if (output.Last().Contains("250"))
                          {
                                fTelnet.SendAndWait("DATA");
                            if (output.Last().Contains("354"))
                            {
                                  route.Add(output.Last().Remove(0, output.Last().IndexOf("354") + "354".Length));
                            }
                            else
                            {
                              validBox.Items.Add(mail + " nicht gültig");
                              return;
                            }
                      }
                      else
                      {
                           validBox.Items.Add(mail + " nicht gültig");
                           return;
                      }
                    }
                    else
                    {
                      validBox.Items.Add(mail + ":connect nicht möglich");  
                    }
                  }


                    

                    StreamWriter schleife1 = new StreamWriter(@"C:\Dokumente und Einstellungen\hes\Eigene Dateien\route.txt"true);
                    foreach (string route1 in route)
                    {
                        schleife1.WriteLine(route1);
                    }
                    schleife1.Close();

                    /*Int32 connect = 220;
                    Int32 from = 250;
                    Int32 to = 250;
                    Int32 daten = 354;
                    string mail = line2[0];

                    Console.WriteLine("telnet " + servNam + port);
                    if (connect == 220)
                    {
                        Console.WriteLine("MAIL FROM:Admin@test.de");
                        if (from == 250)
                        {
                            Console.WriteLine("RCPT TO:" + mail);
                            if (to == 250)
                            {
                                Console.WriteLine("DATA");
                                if (daten == 354)
                                {
                                    validBox.Items.Add(mail + " ist gültig");
                                }
                                else
                                {
                                    return;
                                }
                            }
                            else
                            {
                                return;
                            }
                        }
                        else
                        {
                            return;
                        }
                    }
                    else
                    {
                        return;
                    }*/
                    
                }
            }
        }
    }
}