C# eMail )) Brauche dringend Hilfe

B

Biofreak

Hallo zusammen, ich schreibe an einem Mail Programm wie Outlook.
Es gibt jedoch ein Problem , welches ich nicht lösen kann. Ich versuche mittels meines codes die Anzahl der vorhandenen Mails auf dem Server zu zeigen . . . Ich habe die Stelle an der das Programm stoppt im Quelltext verdeutlicht. Bei der Kompilierung wird kein Fehler angezeigt.
Leute wär das geil, wenn ihr hier weiter wissen würdet...

Gruss
Til


// Check the no of email messages on the server
input = "list \r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,0,outbytes.Length) ;
mResult = sr.ReadLine();

int nOk = mResult.IndexOf("+OK");
if ( nOk >= 0 )
mResult = mResult.Substring(nOk+4);
mResult.TrimEnd();
mResult.TrimStart();
mResult.Trim();
String[] mList = new String[1];
char[] sh = { ' ' } ;
mList = mResult.Split(sh);
nTotalEmails = int.Parse(mList[0]); //++++ HIER BLEIBT DAS PROGRAMM STEHEN:....
long lTotalSize = 0;
if ( mList[1].IndexOf("Message") == -1 && mList[1].IndexOf("message") ==-1 )
lTotalSize = long.Parse(mList[1]);
else
{
mList[2] = mList[2].Substring(1);
lTotalSize = long.Parse(mList[2]);
}

if ( lTotalSize == 0 )
{
mytcp.Close();
prog_dlg.Dispose();
return

nTotalEmails;
}

long[] mSizeArr = new long[nTotalEmails];
int nsz=0;
while ( true )
{
mResult = sr.ReadLine();
mResult.TrimStart();
mResult.TrimEnd();
if ( mResult.Equals("") || mResult.Equals("."))
break ;

String[] mList1 = new String[2];
mList = mResult.Split(sh);
string mdisplay = mList[0] + "\t\t\t" + mList[1];

long mSize = long.Parse(mList[1]);
// myEmailCollection.AddEmail(mSize);
mSizeArr[nsz] = mSize;
nsz++;
}
_________________
thanx for the time

til
 
Meine c# Kentnisse sind zwar nicht sonderlich hoch da ich erst gerade angefangen habe damit zu programmieren, aber hast du die Variable nTotalEmails auch deklariert? Ich habe bemerkt das c# manchmal keinen Fehler bringt obwohl die Variablen nicht deklariert wurden.

In deinem Code geht nicht hervor welcher Typ nTotalEmails ist. Das braucht c# aber!

Gruß
Fati
 
Hi,

zunächst danke für Deine Hilfe.
Ich schicke dir einmal den gazen Code...
Auf dem im Forum war nicht alles zu sehen.

using System;
using System.IO ;
using System.Data;
using System.Windows.Forms;
using System.ComponentModel;
using System.Net;
using System.Net.Sockets;
using System.Xml;

namespace cyriousX
{
/// <summary>
/// Summary description for POP.
/// </summary>
///
public class POP: System.Object
{
public POP()
{
}

public int POP_RECIEVE(string POP_server , int POP_port , string user , string pass , EmailDataCollection myEmailDataCollection )
{
int nTotalEmails = 0 ;
TcpClient mytcp ;
Byte[] outbytes;
string input;
NetworkStream ns;
StreamReader sr;
try
{
ProgressDialog prog_dlg = new ProgressDialog();
prog_dlg.ShowWindow();
mytcp = new TcpClient(POP_server, POP_port);
prog_dlg.ShowText("Connecting to Server " + POP_server);

try
{
ns = mytcp.GetStream();
sr = new StreamReader(ns);

sr.ReadLine();
//Console.WriteLine(sr.ReadLine() );

prog_dlg.ShowText("Authenticating User..");

input = "user " + user + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,0,outbytes.Length) ;
String mResult = sr.ReadLine();
//Console.WriteLine(sr.ReadLine() );

input = "pass " + pass + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,0,outbytes.Length) ;
mResult = sr.ReadLine();
if ( mResult.IndexOf("-ERR") >=0 )
{
MessageBox.Show("Error Connecting to POP Server " + POP_server + ". ( " + mResult + ")" , "Error in Connect", MessageBoxButtons.OK , MessageBoxIcon.Error);
prog_dlg.Dispose();
return -1;
}

prog_dlg.ShowText("Checking total emails on server..");

// Checkt die Anzahl der mails auf dem Server
input = "list \r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,0,outbytes.Length) ;
mResult = sr.ReadLine();

int nOk = mResult.IndexOf("+OK");
if ( nOk >= 0 )
mResult = mResult.Substring(nOk+4);
mResult.TrimEnd();
mResult.TrimStart();
mResult.Trim();
String[] mList = new String[1];
char[] sh = { ' ' } ;
mList = mResult.Split(sh);
nTotalEmails = int.Parse(mList[0]);
long lTotalSize = 0;
if ( mList[1].IndexOf("Message") == -1 && mList[1].IndexOf("message") ==-1 )
lTotalSize = long.Parse(mList[1]);
else
{
mList[2] = mList[2].Substring(1);
lTotalSize = long.Parse(mList[2]);
}

if ( lTotalSize == 0 )
{
mytcp.Close();
prog_dlg.Dispose();
return nTotalEmails;
}

long[] mSizeArr = new long[nTotalEmails];
int nsz=0;
while ( true )
{
mResult = sr.ReadLine();
mResult.TrimStart();
mResult.TrimEnd();
if ( mResult.Equals("") || mResult.Equals("."))
break ;

String[] mList1 = new String[2];
mList = mResult.Split(sh);
string mdisplay = mList[0] + "\t\t\t" + mList[1];

long mSize = long.Parse(mList[1]);
EmailCollection myEmailCollection = new EmailCollection();
myEmailCollection.AddEmail(mSize);
mSizeArr[nsz] = mSize;
nsz++;
}
int nStep = (int) lTotalSize / nTotalEmails ;
prog_dlg.Init(0 , 100 , 1 );
long mpos =0;

for ( int i=1; i <= nTotalEmails ; i++)
{
ParseEmailMessage parseObj = new ParseEmailMessage();
prog_dlg.ShowText("suche nach mails " + i + " of " + nTotalEmails ) ;

string mNo = i.ToString("0");
input = "retr " + mNo + "\r\n";
outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
ns.Write(outbytes,0,outbytes.Length) ;
string mText ="";
long mailsize = mSizeArr[i-1];
// int pos=0;
char[] str = new char[1024];
// long nBytes =0;
while ( true )
{
mResult= sr.ReadLine();
mText = mText + "\r\n" + mResult ;
// Inbox_Text.Text = mText;
if ( mResult.Equals("."))
break ;
}
parseObj.BeginParse(mText);
EmailData dataObject = new EmailData(parseObj);
myEmailDataCollection.AddMailData(dataObject);
mpos += mailsize ;
mpos = (int) (((float)i / (float)nTotalEmails) * 100.00) ;
prog_dlg.MovePos(mpos);
}
prog_dlg.Dispose();
}
catch(InvalidOperationException ioe)
{
string msg = ioe.Message ;
MessageBox.Show(msg);
Console.WriteLine("Es Konnte keine Verbindung zum Mail-Server erstellt werden.");
prog_dlg.Dispose();
return -1;
}
}
catch(InvalidOperationException ioe)
{
string msg = ioe.Message ;
MessageBox.Show(msg);
Console.WriteLine("Es Konnte keine Verbindung zum Mail-Server erstellt werden.");
return -1;
}
mytcp.Close();
ns.Close();
sr.Close();
return nTotalEmails;
}

}
}

Ich könnte dir auch einen Screenshot der Fehlermelung schicken. Wie gesagt die Fehlermeldung tritt nicht beim Compilieren auf, sondern wärend des Abrufens der MAils auf dem jeweiligen Server.
 
Screenshot :)

Hier der Screenshot des Fehlers.
Man is das ne Action hier...

Hauptsache wir finden den Fehler
 

Anhänge

  • problem16.jpg
    problem16.jpg
    46,7 KB · Aufrufe: 106
Screenshot :)

Wenn Ihr das Bild größer sehen wollt, dann speichert es und vergrössert es. Die Qualität reicht gerade so...
 
Hi
Das hier steht bei mir in der Hilfe:
public static int Parse(
string s,
NumberStyles style
);

style
Eine Kombination aus mindestens einer NumberStyles-Konstanten, die das zulässige Format von s angibt.


Formatzeichen Beschreibung und zugeordnete Eigenschaften
c, C Währungsformat. CurrencyNegativePattern, CurrencyPositivePattern, CurrencySymbol, CurrencyGroupSizes, CurrencyGroupSeparator, CurrencyDecimalDigits, CurrencyDecimalSeparator.
d, D Dezimales Format.
e, E Wissenschaftliches Format (Exponentialformat).
f, F Festkommaformat.
g, G Allgemeines Format.
n, N Zahlenformat. NumberNegativePattern, NumberGroupSizes, NumberGroupSeparator, NumberDecimalDigits, NumberDecimalSeparator.
r, R Schleifenformat, das sicherstellt, dass in Zeichenfolgen konvertierte Zahlen denselben Wert haben, wenn wieder in Zahlen konvertiert werden.
x, X Hexadezimales Format.

Also schreib das ganze doch so:
nTotalEmails = int.Parse(mList[0], "g");

So wird es in ein Allgemeines Format verwandelt. Was das genau ist weiss ich auch nicht...
Versuchs doch einfach mal so. Achja die Funktion int, ist similar (Kann man das so schreiben? Also ich meine gleich.) zu der Funktion Int32.

Grüsse
T&P
 
Also das was ich jetzt lesen kann ( wie gesagt meine Kentnisse sind noch nicht so gut ) würde ich sagen du hast alles richtig gemacht!

hmmm....

Sorry, ich kann dir leider dabei auch nicht helfen! :(

Gruß
Fati
 
Kommen näher

Auf dem Smtp-Server:

Wenn ich ein "LIST" Command an den Server sende, sollte er die aufgelisteten Mails zeigen.
Es ist allerdings so, dass wenn ich einen "List" - Befehl zu meinem Server sende, er keine "LIST" zurück gibt. Er gibt nur einen String mit dem Namen "Message List follows" zurück

Wisst ihr ein Kommando/ Befehl um eine solche Liste von Nachrichten von dem Server anzufordern?

Sorry, dass ich nicht schneller drauf gekommen bin. Aber dennoch HILFE! BITTE!

PS macht Spass mit euch.
 

Neue Beiträge

Zurück