C# Email versenden / abrufen

Hustengutzel

Ensign
Registriert
Juni 2008
Beiträge
214
Hallo zusammen,

nun sitze ich hier seit Stunden und weiß nicht weiter.

Mein Ziel ist es Emails mit Anhang zu versenden und wieder abzurufen.
Versenden klappt soweit. Hier ein ausschnitt aus dem Code:

Code:
 System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();

                string mailAdress = "update@xxxx.de";

                mailMessage.From= new MailAddress(mailAdress.Trim());
                mailMessage.To.Add(GetCostumer());
                mailMessage.Subject = textBox1.Text;


                foreach (var fileInfo in files)
                {
                    Attachment myAttech = new Attachment(fileInfo.FullName);
                    mailMessage.Attachments.Add(myAttech);
                }

                SmtpClient client = new SmtpClient("smtp.1und1.de", Convert.ToInt32("25"));
                client.Credentials = new NetworkCredential(mailAdress.Trim(), "PWXXX");
                client.Send(mailMessage);
                CommitButton.BackColor = Color.Green;

Email Wird auch versendet mit Anhang. Kann sie über den 1und1 Mailbrowser sehen. Soweit Super!:) oder auch nicht.


Nun beim Abrufen der Email erhalte ich eine Exception:
"Die angegebene Zeichenfolge besitzt nicht das für eine E-Mail-Adresse erforderliche Format."


Code für das Abrufen der Mails:
Code:
          private string GetVersions()
          {
            string versions = String.Empty;          
            using (ImapClient client = new ImapClient("imap.1und1.de", Convert.ToInt32("993"), "XXX@XXX.de", "PWXXX", AuthMethod.Auto, true))
            {
                Trace.WriteLine("Connected to Server");
                var uids = client.Search(SearchCondition.All()); 
                foreach (var uid in uids)
                {
                    Trace.WriteLine(uid);
                }
                var messages = client.GetMessages(uids); <----EXCEPTION:freak:

                foreach (var mail in messages)
                {
                    var header = mail.Headers["Subject"];

                    if (header.Contains("Version"))
                    {
                        _uid = mail.Headers["Message-ID"];
                        Trace.WriteLine(header.ToString());
                        versions = header.Trim().Split('n').Last().Trim();
                    }
                }
                return
              }

*Natürlich ist der Code noch nicht Clean. Ich teste gerade mit dem Code ein wenig.

Ich hoffe jemand hat eine Idee und kann mir weiterhelfen.

Schönen Abend euch

Gruß matias
 
Wo ist denn deine Klasse ImapClient definiert? Ich finde sie bei mir nicht in System.Net.Mail (framework 4).

Grüsse,

T.
 
Emails Senden:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Text;
using System.Windows.Forms;
using MailSendLib;


Für Emails Abrufen:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net.Mail;
using System.Text;
using System.Threading;
using S22.Imap; <-----(Nuget Packages gefunden)
 
Ich habe das jetzt mal geladen und ausprobiert.

Code:
        private void MailCheck()
        {
            using (ImapClient client = new ImapClient("imap.gmx.net", Convert.ToInt32("993"), "email@gmx.de", "myPwd", AuthMethod.Auto, true))
            {
                Trace.Write("Connected to Server");
                var uids = client.Search(SearchCondition.SentSince(new DateTime(2013,06,30)));
                var messages = client.GetMessages(uids);

                foreach (var mail in messages)
                {
                    var subject = mail.Subject;
                    Trace.Write(subject.ToString());
                }
            }
        }

Ich bekomme zwar System.ArgumentNull exceptions in client.GetMessages, aber der Code läuft ansonsten durch.
Liegt aber innerhalb der Imap Bibliothek.

Ein paar Ideen:
- Vielleicht mal mit einer manuell gesendeten Mail ausprobieren, dann kannst du schauen, ob es am Mailformat liegt?
- anderer Filter
- anderes Postfach
-...

Grüsse,

T.
 
Per Googlemail Nachricht mit Anhang gesendet hat geklappt.

Allerdings klappt es nicht mit dem oben aufgeführten Mail-Versender.
 
Liegt es am Versenden oder am Empfang?
Hast du mal ausprobiert, manuell eine Email bei 1und1 zu versenden (WebInterface) und dann abzurufen?
 
Am Empfangen der Mails. Er will sie mir nicht als Message zuweisen

Code:
var messages = client.GetMessages(uids);
 
Ich glaube, als ich am Anfang SearchCondition.All() getestet habe, habe ich eine ähnliche Meldung bekommen.
Kannst du mal einen Filter ausprobieren, der dir idealerweise 1 Mail zurückliefert?

Die Exception kommt, wenn der ImapClient den MailMessage parser von System.Net.Mail aufruft.
Es gibt ein paar google hits, aber nicht direkt Zielführendes...
 
Also das Problem müsste darin bestehen, dass die Email die gesendet wird nicht ganz Konform ist.
Nur was? Hast du/ihr eine Idee?

Denn wenn ich von 1und1 oder Googlemail was schicke mit Anhang funktioniert es. Nur aus meinem geschrieben Programm nicht,obwohl die Email ankommt und auch korrekt angezeigt wird im 1und1 mailer.

Ganz komische Konstruktion.
Ergänzung ()

Ich habe mal alle Mails gelöscht bis auf eine(eine die halt von meinem Programm aus versendet wurde),da hat es nicht geklappt. Die selbe Exception.

Fürs nächste mal VisualStudio installieren, auf Englisch(was ja eigt. auch Standard ist fürs Programmieren :D).
 
matias schrieb:
Fürs nächste mal VisualStudio installieren, auf Englisch(was ja eigt. auch Standard ist fürs Programmieren :D).

Full ACK :).
Heute nicht mehr, ich schau morgen nochmal rein.

Grüße,

T.
 
Moin,

Ich vermute vielmehr dass das Format bei Versenden der Mail nicht Konform ist mit irgendeinem Standard und die S22 Bibliothek darauf prüft und mir eben diese Exception ausgibt.
Ich werden heut nochmal das ganze analysieren.
 
Hi,

ich denke, das ist richtig. Gib' bitte Bescheid, falls du etwas rausfindest ;).
 
Ich geb natürlich bescheid, aber jetzt muss erstmal geschaut werden was,denn es wird soweit alles korrekt angezeigt.
Wird noch ein langer Abend. Geh mir mal Kaffee aufsetzten :D
Ergänzung ()

Stacktrace

[6736] System.FormatException: Die angegebene Zeichenfolge besitzt nicht das für eine E-Mail-Adresse erforderliche Format.
[6736] bei System.Net.Mail.MailAddressParser.ReadCfwsAndThrowIfIncomplete(String data, Int32 index)
[6736] bei System.Net.Mail.MailAddressParser.ParseDomain(String data, Int32& index)
[6736] bei System.Net.Mail.MailAddressParser.ParseAddress(String data, Boolean expectMultipleAddresses, Int32& index)
[6736] bei System.Net.Mail.MailAddressParser.ParseMultipleAddresses(String data)
[6736] bei System.Net.Mail.MailAddressCollection.ParseValue(String addresses)
[6736] bei System.Net.Mail.MailAddressCollection.Add(String addresses)
[6736] bei S22.Imap.MessageBuilder.ParseAddressList(String list)
[6736] bei S22.Imap.MessageBuilder.SetAddressFields(MailMessage m, NameValueCollection header)
[6736] bei S22.Imap.MessageBuilder.FromHeader(String text)
[6736] bei S22.Imap.MessageBuilder.FromMIME822(String text)
[6736] bei S22.Imap.ImapClient.GetMessage(UInt32 uid, FetchOptions options, Boolean seen, String mailbox)
[6736] bei S22.Imap.ImapClient.GetMessages(UInt32[] uids, FetchOptions options, Boolean seen, String mailbox)
[6736] bei S22.Imap.ImapClient.GetMessages(UInt32[] uids, Boolean seen, String mailbox)
[6736] bei PullUpdates.PullUpdates.GetVersions() in G:\SmartHeil\SmartHeil\PullUpdates\Program.cs:Zeile 93.
[6736] bei PullUpdates.PullUpdates.DownloadData() in G:\SmartHeil\SmartHeil\PullUpdates\Program.cs:Zeile 54.
Ergänzung ()

Fehler auf Englisch: The specified string is not in the form required for an e-mail address.
Ergänzung ()

So bin dem Problem ein entscheidenes Stück näher gekommen.
Sobald im Anhang eine .exe Datei drin ist, erscheint der Fehler.
Dann wundert mich aber die Exception.

Könntest du das auch mal Prüfen?
Ergänzung ()

Laut einiger Webseiten,

ist die Funktion(System.Net.Mail.MailAddressParser.ReadCfwsAndThrowIfIncomplete()) wie folgt aufgebaut:

Code:
private static int ReadCfwsAndThrowIfIncomplete(string data, int index)
{
    index = WhitespaceReader.ReadCfwsReverse(data, index);
    if (index >= 0)
    {
        return index;
    }
    throw new FormatException(SR.GetString("MailAddressInvalidFormat"));
}

Im Grundegenommen, wird hier nicht geprüft ob da eine .exe Datei mit angefügt wurde.


Ergänzung zum Email versandt

Wenn über 1und1 oder meinem Programm eine Datei mit .exe im Anhang verschickt wird, bekomme ich diese Exception!
 
Zurück
Oben