Autor Beitrag
sharpx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 51



BeitragVerfasst: Mi 07.01.09 10:17 
Hallo


Folgende Ausgangssituation:
1) Einlesen einer Textdatei mit E-Mail Adressen
2) E-Mail Adressen sind durch , von einander getrennt
3) Versenden von Daten an diese E-Mail Adressen


Mein Code:
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:
public static string[] filter_emails (string email)
    {
      string[] sub = new string[500];
      
      if (email.IndexOf(',') <= 0)
        return sub;
      else
      {
        sub = email.Split(',');
        for (int i=0; i < sub.Length; i++)
        {
          sub[i] = sub[i] + "\r\n";
          sub[i] = sub[i].Trim();
        }
      }
      return sub;
    }

void Button1Click(object sender, EventArgs e)
    {
                        string[] sa = new string[500];
      sa = filter_emails(mail);

if (sa[0] == null// there is only one email address
      {
                               // do the code ... bla bla bla
      }
      else
      {
        // We have got a few emails saved in a array.
        int length = count_elements(sa);
        for (int i=0; i < length; i++)
        {
          send_email (sa[i]);
        }
      }



Die send_email Funktion funktioniert einwandfrei, wenn ich z.b solch eine e-mail übergebe "test@hotmail.com". Nun aber, wenn ich das Programm so laufen lasse, bekomme ich folgenden Fehler:

Zitat:

System.FormatException: Die angegebene Zeichenfolge besitzt nicht das für eine E-Mail-Adresse erforderliche Format.
bei pdfinside.MainForm.write_email(String mailto) in c:\Dokumente und Einstellungen\lipo\Eigene Dateien\SharpDevelop Projects\pdfinside\MainForm.cs:Zeile 174.
bei pdfinside.MainForm.Button1Click(Object sender, EventArgs e) in c:\Dokumente und Einstellungen\lipo\Eigene Dateien\SharpDevelop Projects\pdfinside\MainForm.cs:Zeile 297.
bei System.Windows.Forms.Control.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
bei System.Windows.Forms.Button.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run(Form mainForm)
bei pdfinside.Program.Main(String[] args) in c:\Dokumente und Einstellungen\lipo\Eigene Dateien\SharpDevelop Projects\pdfinside\Program.cs:Zeile 28.



Nun dachte ich mir, okay wahrscheinlich gibts bei dem getrimmten string ein zeichen, welches den string als "invalid email" darstellt. Habe kurz folgenden Code geschrieben:

[cs]
for (int k = 0; k<sa[0].Length; k++)
{
MessageBox.Show(sa[0][k].ToString());
}
[cs]

Die Ausgabe ist folgende:
Zitat:

t
e
s
t
@
t
e
s
t
.
d
e



Sieht alles eigentlich gut aus. (Keine leerzeichen, keine Umbrüche...)
Hoffe jemand kann mir hier weiterhelfen.

Danke!

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


Zuletzt bearbeitet von sharpx am Mi 07.01.09 12:13, insgesamt 1-mal bearbeitet
lothi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 114
Erhaltene Danke: 3



BeitragVerfasst: Mi 07.01.09 10:31 
Hallo

Aber dein String sieht so aus:

test.test.de

in einer E-Mail Adresse sollte doch auch das @ enthalten sein.

Gruss Lothi
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 07.01.09 11:40 
Seit wann wird eine Email-Adresse mit einem Environment.NewLine abgeschlossen?

Unabhängig vom konkreten Problem möchte ich noch darauf hinweisen (dabei gehe ich davon aus, dass die Variable mail keine, eine oder mehrere Email-Adressen mit Komma getrennt enthält):

ausblenden C#-Quelltext
1:
string[] sub = new string[500];					

Das new ist hier 2x eher unnötig. Du benötigst es nur dann, wenn es sich in der filter-Methode um 0 oder 1 Adressen handelt; in allen anderen Fällen wird sub bzw. sa sowieso neu erzeugt.

ausblenden C#-Quelltext
1:
2:
sub[i] = sub[i] + "\r\n";
sub[i] = sub[i].Trim();

Wenn überhaupt, sollte zuerst getrimmt werden. Ich kann aber überhaupt keinen Sinn darin sehen, dass an eine Email-Adresse ein Environment.NewLine angehängt wird (das ist sowieso besser als "\r\n").

Gruß Jürgen

PS. Füge bitte in das Zitat der Fehlermeldung am Ende 2x CR/LF ein, damit der Umbruch besser wird.
sharpx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 51



BeitragVerfasst: Mi 07.01.09 12:12 
Danke euch beiden!

@lothi:
Mein Fehler, natürlich steht da ein @ drinnen, hab mich nur verschrieben.
Im Post ists jetzt ausgebessert.

@Juergen:
DAnke für deine Ratschläge, hat leidern nichts geholfen
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 07.01.09 12:26 
user profile iconsharpx hat folgendes geschrieben Zum zitierten Posting springen:
hat leidern nichts geholfen

Dann musst Du die send_email-Methode in try-catch einbetten, die konkret kritisierte Adresse durch MessageBox anzeigen und genau untersuchen. So können wir nur weiterraten. Jürgen