# Eigenes Mail-Programm schreiben



## IwiS (20. Feb 2012)

Hallo zusammen,

ich habe mir vorgenommen ein eigenes Mail-Programm zuschreiben. Allerdings habe ich noch kA wie ich das genau angehen soll. Ich möchte, dass ich mit meinem Programm Mails schreiben und vorallem empfangen kann. Könnte mir jemand ein paar Stichpunkte zur Vorgehensweise geben, das würde mir völlig ausreichen.

Vielen Danke im Vorraus,
IwiS


----------



## Marcinek (20. Feb 2012)

Swing, 
IMAP
SMTP

Damit würde ich anfangen.


----------



## irgendjemand (20. Feb 2012)

@Marcinek
POP3 vergessen ... nicht jeder hat den luxus von IMAP

@TO

zum versenden kannst du dir das hier mal reinziehen *ach ja .. lange ist es her*

E-Mails mit JavaMail versenden @ tutorials.de: Tutorials, Forum & Hilfe

empfangen vom POP3/IMAP server geht ähnlich nur anderstrum ... habe dafür aber gerade leider kein sample parat ...


----------



## GUI-Programmer (21. Feb 2012)

Kannst dir ja mal mein E-Mail Programm aus meiner Signatur anschauen, funktioniert halt eben nur für Googlemail Nutzer! Ist aber opensource.


----------



## Marcinek (21. Feb 2012)

irgendjemand hat gesagt.:


> @Marcinek
> POP3 vergessen ... nicht jeder hat den luxus von IMAP



Ich denke das ist eher ein Muss. Ich hoste mein MTA selber aber die meisten Provider bieten das an, weil es weniger Traffic verursacht. Bei Leuten, die POP3 nutzen + Option "lass mail auf server" wird immer overhead für synchronisation verbraucht.  ;D - Oder liefert hier der Server immer alle Mails und der Client entscheidet, was der dann wirklich speichert - Ich weiß es nicht genau  :bahnhof:


----------



## irgendjemand (21. Feb 2012)

@Marcinek
wie gesagt ... nicht jeder hat den luxus ...

nehmen wir mal einen der größten deutschen provider : Web.de ...

will man hier IMAP nutzen so muss man erst "Premium Web.de Club" bezahlen ...

ich kann mir vorstellen das es bei manchen providern ähnliche "fallen" gibt ...

bei g-mail z.b. ist es zwar nicht kostenpflichtig ... muss aber vor erstmaliger verwendung durch den user explizit aktiviert werden ...


du merkst also : auch wenn IMAP immer größere popularität erhält ... so der wirkliche standard ist es immer noch nich ...
außerdem sollte für den anfang POP3 erstmal reichen ... anstatt sich gleich mit IMAP rumzuschlagen


----------



## IwiS (21. Feb 2012)

Guten Tag,

ich habe das Senden eine Mail geschafft, es funktioniert. Jetzt möchte ich mich an das Empfangen der Mails machen. Ich habe dazu folgenden Code:

```
public void Empfangen()
 {
  try
  {
   Properties info = System.getProperties();
   info.put("pop3.mail.host", server);
   info.put("pop3.mail.auth", "true");
   Authenticator auth = new Authenticator();
   Session verbindung = Session.getDefaultInstance(info, auth);
   verbindung.setDebug(false);
   Store store = verbindung.getStore("pop3");
   store.connect();
   Folder folder = store.getFolder("INBOX");
   folder.open(Folder.READ_ONLY);
   Message message[] = folder.getMessages();
   for(int i=0;i<message.length;i++)
   {
    Message m = message[i];
    if( m.isMimeType("text/plain"))
    {
     System.out.println(m.getContent());
    }
   }
  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
 }
```

Dabei bekomme ich die Fehlermeldung von Eclipse bei Authenticatior: 

```
Cannot instantiate the type Authenticator
```

lg IwiS


----------



## irgendjemand (21. Feb 2012)

versuche mal "pop3s" ... gerade bei Web.de und Google-Mail notwendig ...
hier mal ein für g-mail und text/plain messages optimierter code ... dürfte als grundlage reichen


```
import java.io.ByteArrayOutputStream;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
public class GetMailTLS
{
	public static void main(String[] args) throws Exception
	{
		String host="pop.gmail.com";
		int port=995;
		String user="recent:USERNAME@googlemail.com";
		String pass="PASSWORD";
		
		Properties props=new Properties();
		
		Session session=Session.getInstance(props);
		Store store=session.getStore("pop3s");
		store.connect(host, port, user, pass);
		
		Folder inbox=store.getFolder("INBOX");
		if(inbox==null)
		{
			System.out.println("NO INBOX");
			store.close();
			System.exit(1);
		}
		inbox.open(Folder.READ_WRITE);
		
		Message[] messages=inbox.getMessages();
		for(Message message : messages)
		{
			Address[] fromAddresses=message.getFrom();
			for(Address fromAddress : fromAddresses)
			{
				System.out.println("FROM : "+fromAddress.toString());
			}
			Address[] toAddresses=message.getRecipients(Message.RecipientType.TO);
			for(Address toAddress : toAddresses)
			{
				System.out.println("TO : "+toAddress.toString());
			}
			System.out.println("SUBJECT : "+message.getSubject());
			System.out.println("TYPE : "+message.getContentType());
			System.out.println("");
			System.out.println("MESSAGE");
			System.out.println("");
			if(message.getContentType().contains("text/plain"))
				System.out.println((String)message.getContent());
			else
				System.out.println("NO text/plain MESSAGE");
			
			message.setFlag(Flags.Flag.DELETED, true);
		}
		
		inbox.close(true);
		store.close();
	}
}
```


----------



## IwiS (21. Feb 2012)

Hallo,

ich habe jetzt folgenden Code zum Senden der Mail:

```
public void Empfangen()
 {
  try
  {
   Properties info = System.getProperties();
   info.put("imap.mail.host", server);
   info.put("imap.mail.auth", "false");
   Session verbindung = Session.getDefaultInstance(info);
   verbindung.setDebug(false);
   Store store = verbindung.getStore("imaps");
   store.connect(server2, port2, benutzer2, passw2);
   Folder folder = store.getFolder("INBOX");
   folder.open(Folder.READ_ONLY);
   Message message[] = folder.getMessages();
   for(int i=0;i<message.length;i++)
   {
    Message m = message[i];
    if( m.isMimeType("text/plain"))
    {
     System.out.println(m.getContent());
    }
   }
  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
 }
```

Und bekomme jetzt folgende Fehlermeldung:

```
javax.mail.AuthenticationFailedException: authentication failed
	at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:660)
	at javax.mail.Service.connect(Service.java:295)
	at Mail.Empfangen(Mail.java:137)
	at Mail$4.actionPerformed(Mail.java:96)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
```

Was kann ich dagegen tun? 

lg IwiS


----------



## Marcinek (21. Feb 2012)

Etwas anderes programmieren.

Sorry, aber deine Fähigkeiten in Java sind momentan nicht ausgereift genug um sowas schweres, wie einen Mail Client zu bauen. 

---

Ansonsten würde ich noch vorschlagen mehr Eigeninitiative in dieses Projekt zu stecken. Ich meine du bekommst als Fehler "authentification exception" hmmmmmmmmmmmmmmmmmmmmmmmmm. Was könnte das bedeuten?

Und wenn man es nciht weiß, wie könnte man es herausfinden, ohne sofort ein Forenbeitrag zu machen.


----------



## IwiS (21. Feb 2012)

Hallo,

wozu glaubst du, dass das Forum da ist - soll man hier keine Fragen stellen?! Außerdem habe ich nicht gefragt, was das bedeutet, sondern wie man das Problem beheben kann.


----------



## Marcinek (21. Feb 2012)

Auf jedenfall dazu da um Fragen zu stellen, schonmal nicht 100000 mal in allen Formen und Faben durchgekaut worden sind.

GENAU dieses Problem hatte Generic1 vor 3 Tagen oder so.:rtfm:


----------



## IwiS (21. Feb 2012)

Hallo,

ich konnte mit der Forensuche keinerlei Erfolge verzeichnen, daher würde ich dich ersuchen mir zu helfen. Falls du nicht die Möglichkeit oder Lust hast meiner Bitte nachzukommen, habe ich dafür volles Verständnis.

Trotzallem ein Danke im Vorraus,
Mit freundliche Grüßen,
IwiS


----------



## Marcinek (21. Feb 2012)

Ich finde es wichtiger die Methodik beizubringen, statt einfach die Lösung zu posten, damit der TO innerhalb von Sekunden wieder hier ein Posting schreibt mit der gleichen Frage ;D

Wenn man sich nun die Fehlermeldung anschaut: authentication failed

Was bedeutet das? - Naja der Server weiß nicht wessen mails er verschicken soll und da tut er das lieber nicht  - Spart auch Traffic. Aber dafür müsste man sich auch mal mit SMTP und MTA und Protokollen beschäftigen. Nun wir wollen ja nur mails verschicken.

Ich schlage vor du googelst nach "javax Mail Server authentification". 

---

Ich habe erst gerade gesehen, dass da wohl ein auth info dabei ist:    store.connect(server2, port2, benutzer2, passw2);

Da muss man sich fragen, kommt der Code bis dahin oder bricht er schon vorher weg?

sind die Variablen richtig belegt?

Das sind alles Sachen, da braucht man kein Forum für.


----------



## madlion (22. Feb 2012)

Was mir dazu spontan aufgefallen ist...

```
info.put("imap.mail.auth", "false");
```
Das klingt so danach als würde die imap Authentifizierung abgeschaltet werden.

Hat das eigentlich einen Grund weshalb du die System Properties holst, diese veränderst und dann bei der Erzeugung der Session mitgibst?
Erscheint mir etwas eigenartig. Ich hätte ehrer erwartet daß du ein neues Properties erzeugst und dort die benötigten Properties setzt.


----------



## IwiS (22. Feb 2012)

Hallo,

ich habe in Google mit deinem (Marcinek) Vorschlage gesucht, doch leider nur Ergebenisse zum Verschicken von Mails gefunden, und nicht zum Empfangen von Mails, hat mich also leider nicht weitergebracht. Auch die Forensuche hatte nur Ergebnisse zum Verschicken von Mails zu verzeichnen.
Das andere Problem ist, sobald ich in Eclipse bei meinem Code 
	
	
	
	





```
Authenticator auth = new Authenticator();
```
 eingebe, kommt die Fehlermeldung: "Cannot instatiate the type Authenticator". Ich habe aber kA, wie ich das beheben soll, daher habe ich die Authentication auf "false" gesetzt.

lg IwiS


----------



## c_sidi90 (22. Feb 2012)

Ich wäre ja vorsichtig beim herunterladen von Mailclients ohne beigelegtem Source  ohne jemanden etwas unterstellen zu wollen natürlich


----------



## ARadauer (22. Feb 2012)

IwiS hat gesagt.:


> "Cannot instatiate the type Authenticator". Ich habe aber kA, wie ich das beheben soll, daher habe ich die Authentication auf "false" gesetzt.
> 
> lg IwiS



Authenticator ist abstract... 
sogar auf wikipedia findet man ein Beispiel
JavaMail ? Wikipedia


----------



## Marcinek (22. Feb 2012)

IwiS hat gesagt.:


> "Cannot instatiate the type Authenticator". Ich habe aber kA, wie ich das beheben soll, daher habe ich die Authentication auf "false" gesetzt.
> 
> lg IwiS




Du kämpfst hier an zwei Fronten. 1. Java und OO. 2. Gegen nicht 100 % triviale Technologie + fehlender Kenntnisse in IT. Letzteres führt dazu, dass du Quellen aus dem Internet nicht hinsichtlich der Relevanz beurteilen kann.

Mach doch was einfacheres, wie einen Taschenrechner. Wichtig ist hier zu begreifen, was ist OOP und wie wende ich es korrekt an. Hierzu ist weitere Literatur und ein intensiveres Studium dessen notwendig.

Oder noch was einfachers:

Versuch ein Modell auf zwei verschiedenen Art und Weisen zu speichern. Einmal als CSV und einmal als Pro Zeile ein Wert. Und dann diese Möglichkeiten austauschbar machen ohne viel Code zu ändern.


----------



## irgendjemand (22. Feb 2012)

ARadauer hat gesagt.:


> Authenticator ist abstract...
> sogar auf wikipedia findet man ein Beispiel
> JavaMail ? Wikipedia



mal davon abgesehen das das beispiel auch nicht gerade sauber ist *static Transport.send(Message) call -> EVIL !* ...


@TO

vielleicht hilft es dir wenn ich dir sage das es NICHT

[c]imap.mail.*[/c]

heißt ... sondern wenn überhaupt

[c]mail.imap.*[/c]

und genau so falsch ist auch

[c]pop3.mail.*[/c]

auch hier muss es wenn überhaupt

[c]mail.pop3.*[/c]

heißen ...

wenn du dir mal die mühe gemacht hättest in die DOCs zu schauen welche dem zip beiliegen hättest du das auch selbst rausbekommen können ...

denn in der package-description von javax.mail steht eindeutig in der tabelle

mail.protocol.*

wobei protocol durch das protocol *pop3(s), smtp(s), imap(s), etc* zu ersetzen ist ...

so langsam glaub ich das der post von Marcinek einen gewissen wahrheits gehalt hat : wir ballern dich mit antworten zu und du stellst immer wieder die selben fragen weil du immer wieder die selben fehler machst ...

ich schätze du bist wirklich noch nicht so weit dieses projekt umzusetzen ... suche dir lieber etwas anderes und vor allem einfacheres ... sonst endet das nachher darin das wir dir dein programm schreiben ... und darauf hat hier niemand lust *zumindest nicht un-endgeldlich


----------



## IwiS (22. Feb 2012)

Guten Tag zusammen,

nachdem ich mich jetzt dazu entschieden habe mein Vorhaben zu beenden, werde ich mich einem Taschenrechner zuwenden. Vielleicht könnte, sobald er fertig ist, mal jemand von euch drübergucken, ob der Rechner i. O. ist, oder ob man da noch was verbessern könnte, wäre sehr nett.

lg IwiS


----------



## irgendjemand (22. Feb 2012)

hmm ... dazu besteht kein anlass ...

nutze bitte mal die forensuche und zieh dir sämtliche threads zum thema "taschenrechner" rein ...
denn ich denke alle nur erdenklichen fehler die man dabei machen kann wurden hier bereits mehrfach erörtert ... ergo : du hast mit der SuFu hier genug stoff um sämtliche fehler selbst lösen zu können ...
extra über den code drüber schauen würden hier sicher einige machen ... aber entweder verweisen sie dich dann auf die entsprechenden threads oder reagieren wie ich ... nämlich so gut wie garnicht


wenn du wirklich programmieren lernen willst ... speziell java ... dann google dir "java ist auch eine insel" ... lege dir zusätzlich noch 4 oder 5 java bücher zu ... und fang dann ganz unten bei den basics an ... dann irgendwann mal OOP ... und dann alles weitere ...

ich denke der taschenrechner wird dich schon lange genug quälen ... und wir werden da sicher noch einiges von dir zu höhren bekommen auf das man dann eigentlich immer wieder nur mit "SUFU" antworten könnte ...


----------

