Autor |
Beitrag |
DevInet
Beiträge: 43
Win XP, Win 7 Prof., Linux Mandriva
C#(VS 2010), Java, php
|
Verfasst: 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:
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.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();
} } } } } |
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
Beiträge: 243
Erhaltene Danke: 1
|
Verfasst: Mo 18.04.11 17:52
Wieso machst du die Überprüfung nicht mit Regex?
|
|
Trashkid2000
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: Mo 18.04.11 21:44
BlackMatrix hat folgendes geschrieben : | Wieso machst du die Überprüfung nicht mit Regex? |
Ja, das war auch ein Gedanke von mir.
Aber so wie es aussieht, will DevInet 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
Beiträge: 43
Win XP, Win 7 Prof., Linux Mandriva
C#(VS 2010), Java, php
|
Verfasst: Di 19.04.11 10:02
Trashkid2000 hat folgendes geschrieben : | BlackMatrix hat folgendes geschrieben : | Wieso machst du die Überprüfung nicht mit Regex? | Ja, das war auch ein Gedanke von mir.
Aber so wie es aussieht, will DevInet 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
Beiträge: 6388
Erhaltene Danke: 146
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 19.04.11 10:42
DevInet hat folgendes geschrieben : | 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
Beiträge: 43
Win XP, Win 7 Prof., Linux Mandriva
C#(VS 2010), Java, php
|
Verfasst: 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
Beiträge: 6388
Erhaltene Danke: 146
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 03.05.11 16:07
Da gibt es Leute, die dafür schon Klassen entwickelt haben.
Ich habe einfach C# TELNET probiert. Da scheinen einige brauchbare Ergebnisse zu sein.
|
|
DevInet
Beiträge: 43
Win XP, Win 7 Prof., Linux Mandriva
C#(VS 2010), Java, php
|
Verfasst: Di 03.05.11 16:14
Zum besseren verständnis, gibts hier nochmal ne aktuellere Form des Codes:
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.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();
} } } } } |
|
|
|