Javax.Mail: Check this out

timbeau

Gesperrter Benutzer
Hallo zusammen,

ich habe für einen Freund ein Programm zusammengestöpselt aus verschiedenen Funden im Internet und meinem Kopf.

Der Kern des Programms versendet eine Email mittels SMTP. Das klappt auch soweit.
Ein Problem existiert jedoch, er hat unter Windows XP vor dem Betreff und dem Inhalt jeweils ein Fragezeichen stehen. Umlaute gehen jedoch.

Bei mir unter Linux klappt beides korrekt.

Auf meinem Handy sehe ich die Mail-Betreffzeile wiederrum komisch, wenn mein Kumpel sie über sein System an mich verschickt:
=?CP1252?Q?=3F......

Es werden also die Umlaute anders dargestellt. Die gleiche Email ist jedoch im Thunderbird und in Evolution korrekt, bis auf das Fragezeichen.

Die eigentliche Frage ist, ob ich irgendetwas besser machen kann, übersehen habe etc. im Bereich des Versendens und der richtigen Kodierung.

Schonmal vielen Dank.


Hier der Abschnitt der die Mail versendet:

Java:
public boolean sendMail(String recipientsAddress, String password) {
		
		String username = getProperty("username");
		String host = getProperty("mail.smtp.host");
		String port = getProperty("mail.smtp.port");
		String senderAddress = getProperty("senderAddress");
		String text = getTextFile(getProperty("newsTextPath"));
		String subject = getTextFile(getProperty("subjectPath"));
		String attachmentPath = getProperty("attachmentPath");
		File file2send = new File(attachmentPath);
		
		Session session = prepareTechnicalPart(password, username, host, port);

		return technicalPart(recipientsAddress, senderAddress, text, subject, session, file2send);
		
	}

	private Session prepareTechnicalPart(String password, String username,
			String host, String port) {
		MailAuthenticator auth = new MailAuthenticator(username, password);
		Properties properties = new Properties();

		properties.put("mail.smtp.host", host);
		properties.setProperty("mail.smtp.port", port);
		properties.put("mail.smtp.auth", getProperty("mail.smtp.auth"));

		Session session = Session.getDefaultInstance(properties, auth);
		return session;
	}

	private boolean technicalPart(String recipientsAddress, String senderAddress,
			String text, String subject, Session session, File file2send) {
		try {
			
			Message msg = new MimeMessage(session);	

			
			msg.setFrom(new InternetAddress(senderAddress));
			msg.setRecipients(Message.RecipientType.TO,
					InternetAddress.parse(recipientsAddress, false));

			MimeBodyPart textBodyPart = new MimeBodyPart();


			textBodyPart.setText(text);
			textBodyPart.setDisposition(MimeBodyPart.INLINE);

			msg.setSubject(subject);
			msg.setText(text);

			MimeBodyPart attachement = new MimeBodyPart();
			attachement.setDataHandler(new DataHandler(new FileDataSource(
					file2send)));
			attachement.setFileName(file2send.getName());
			attachement.setDisposition(MimeBodyPart.ATTACHMENT);

			MimeMultipart mimeMultipart = new MimeMultipart();
			mimeMultipart.addBodyPart(textBodyPart);
			mimeMultipart.addBodyPart(attachement);

			msg.setContent(mimeMultipart);

			msg.setSentDate(new Date());

			Transport.send(msg);

		} catch (Exception e) {
			System.err.println("Malfunction of sending process. System will exit.");
			e.printStackTrace();
			return false;
		}
		return true;
	}


Hiermit lese ich gespeicherte Textdateien ein.

Java:
private String getTextFile(String source) {
		StringBuffer sb = new StringBuffer();
		try {
			Reader fr = new InputStreamReader(new FileInputStream(source), "UTF-8");
			BufferedReader br = new BufferedReader(fr);
			String line;
			while ((line = br.readLine()) != null) {
				sb.append(line);
				sb.append(System.getProperty("line.separator"));
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return sb.toString();

	}

Gibt es da eine gute Möglichkeit um so ein System Windows + Linux kompatibel zu gestalten?

Schönen Gruß, Tim
 

Dekker

Bekanntes Mitglied
Ja, das liegt an der Kodierung. Ist schon bissle her das ich mich damit beschäftigt habe, aber konnte man nicht Programm intern das verwenden von UTF8 einstellen? (Oder war das nicht sogar Standard?). Wie Thunderbird damit umgeht weiß ich nicht, aber Linux und Windows verwenden da beide andere standards. Man konnte aber imho im Email-Header angeben welche Codierung verwendet wurde wenn ich mich grad recht entsinne.
 
Zuletzt bearbeitet:

timbeau

Gesperrter Benutzer
Naja, das Tutorial ist ja gut gemacht, aber über diese Ebene bin ich ja hinweg. Der Versand an sich funktioniert ja. Mein Problem ist das Zusammenspiel: Windows-Konsole - UTF-8 Dateien - Java - Mail(-Server)?


Mir ist auch klar, dass CP1252 DER Windows Zeichensatz ist. Mein Gedanke ist aber auch, innerhalb des Programms komplett auf UTF-8 zu setzen. Ist das so unmöglich?

Hat vielleicht jmd. noch einen Gedanken?
 

timbeau

Gesperrter Benutzer
Hmm,

ich weiß nicht wieweit die CMD da mit eingreift. Dürfte ja eigentlich nicht sein. Es wird nur über das Programm gelesen und geschrieben. Es kann aber natürlich über cmd mittels java -jar usw gestartet werden. War eher eine Vermutung.

Hier übrigens noch die Speicherende Methode:

Java:
public void writeFile(String text, String path){
		String charsetName = "UTF8";
		BufferedWriter bw = null;
		try {
			bw = new BufferedWriter(new OutputStreamWriter(new BufferedOutputStream
					(new FileOutputStream(new File(path)) ), charsetName));
			bw.write(text);
		} catch (IOException e) {
			e.printStackTrace();
		}
		finally {
			if(bw != null){
				try {
					bw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
	}



@TheRealSpike: Das hab ich doch schon längst .. .
 
T

TheRealSpikee

Gast
Ach echt ? Du hast also schon das MIME-Encoding UTF-8 in deiner Mail ? Wo denn bitte ... weil alles was ich sehe ist das du das File mit UTF-8 einliest ... dies aber nirgends in der E-Mail setzt !
 

timbeau

Gesperrter Benutzer
Ahh ok, dann hab ich dich falsch verstanden. Danke.

Ich hab auch noch was anderes entdeckt und gebe gleich nochmal Rückmeldung nach dem Schalkespiel ;)

Sorry, zu müde. Hab lange mit Header Infos rumgespielt ala:

Java:
/msg.setHeader("Content-Transfer-Encoding", "8bit");
			msg.addHeader("Content-Type", "text/plain; charset=ISO-8859-1");
			msg.saveChanges();

und mit utf-8 aber dann sind die Mails völlig vermurkst. Ich bin einen Schritt weitergekommen, dass ich bemerkt habe, dass es an einer Speichermethode lag die nur aufgerufen wird, wenn ich das als Jar exportiere. Diese habe ich abgewandelt und jetzt wird auch, wenn ich das Jar über Windows-Konsole starte, auf meinem Handy alles korrekt angezeigt. Scheint, dass da Thunderbird mehr korrigieren kann als Symbian.

Gute Nacht und ich melde mich die Tage
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
StrikeTom Javax.mail frage(zu code) Java Basics - Anfänger-Themen 17
R Javax.mail wird nicht gefunden Java Basics - Anfänger-Themen 2
C wo ist mein javax.mail? Java Basics - Anfänger-Themen 2
L JavaMail: javax.mail wird nicht gefunden Java Basics - Anfänger-Themen 2
HolyFUT Javax Websocket API implementieren Java Basics - Anfänger-Themen 14
nbergmann Wo ist javax.swing.JOptionPane gespeichert? Java Basics - Anfänger-Themen 4
O Problem mit SOAP / javax.xml importieren Java Basics - Anfänger-Themen 7
J javax.servlet.ServletException: Name is null Java Basics - Anfänger-Themen 7
N javax swing JOptionPane Hilfe Java Basics - Anfänger-Themen 3
pkm javax.script.ScriptException bei der ScriptEngine Java Basics - Anfänger-Themen 9
P JDK installieren javac behauptet Javax.swing existiert nicht Java Basics - Anfänger-Themen 8
B javax.ejb.Timer wieder starten? Java Basics - Anfänger-Themen 0
R Klassen Javax.vecmath.* Java Basics - Anfänger-Themen 5
S timer funktion mit javax panel Java Basics - Anfänger-Themen 3
M Javax.swing - Timer(2 Button) Java Basics - Anfänger-Themen 17
T eclipse findet javax nicht Java Basics - Anfänger-Themen 4
N Erste Schritte import javax.media.3d....; //Fehlermeldung: cannot be resolved Java Basics - Anfänger-Themen 10
c_sidi90 javax.exe beenden nach Programmende Java Basics - Anfänger-Themen 10
L javax.xml.transform.Source Java Basics - Anfänger-Themen 6
N javax.swing.JOptionPane einbauen? Java Basics - Anfänger-Themen 9
D package javax.comm does not exist Java Basics - Anfänger-Themen 5
kulturfenster Problem mit javax.swing.Timer Java Basics - Anfänger-Themen 2
C javax.print.DocPrintJob Java Basics - Anfänger-Themen 17
G Fehler beim builden javax...... Java Basics - Anfänger-Themen 4
J Servlet Interface javax.servlet.Servlet Java Basics - Anfänger-Themen 2
? Konsolenprogramm hat Problem mit java.awt oder javax.swing Java Basics - Anfänger-Themen 7
G NoClassDefFoundError: javax/xml/stream/XMLStreamException Java Basics - Anfänger-Themen 23
A Finde javax.servlet.* nicht Java Basics - Anfänger-Themen 6
M Fehler: package javax.portlet does not exist Java Basics - Anfänger-Themen 2
V Serialisieren einer ShortMessage (javax.sound.midi) Java Basics - Anfänger-Themen 5
alexpetri javax.xml.stream.* nicht gefunden Java Basics - Anfänger-Themen 3
A java.awt und javax.swing verschwunden Java Basics - Anfänger-Themen 2
S import javax.image.io.*; funktioniert nicht Java Basics - Anfänger-Themen 28
L getDuration() von einem javax.media.player objekt problem. Java Basics - Anfänger-Themen 3
K Problem mit javax/servlet/http/HttpServletRequest.java Java Basics - Anfänger-Themen 2
E Wo bekomme ich das javax.swing.* package her? Java Basics - Anfänger-Themen 3
G import javax.servlet cannot be resolved Java Basics - Anfänger-Themen 1
N Probleme mit import von javax.servlet.* Java Basics - Anfänger-Themen 3
B Wo finde ich die Klasse javax.sound.sampled.AudioSystem Java Basics - Anfänger-Themen 7
G wie bekomme ich das javax.jws.* package in den JBuilder ? Java Basics - Anfänger-Themen 7
J javax.comm-API kompilieren Java Basics - Anfänger-Themen 12
F javax.imageio.ImageIO write methode Java Basics - Anfänger-Themen 11
B javax entpacken - aber wohin? Java Basics - Anfänger-Themen 2
M Java Mail Programm Java Basics - Anfänger-Themen 4
Z E-Mail senden mit Bibliotheken Java Basics - Anfänger-Themen 1
I Java Mail Timeout erst nach rund 5 Minuten? Java Basics - Anfänger-Themen 9
T PDF-Formula (XFDF) via Mail - Betreff mit Werten aus PDF-Formular ergänzen Java Basics - Anfänger-Themen 2
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
I Java Mail (IMAP -> Empfangen) und Google Mail Java Basics - Anfänger-Themen 1
K Mail senden, nachdem Anwendung beendet wurde (gleich wie) Java Basics - Anfänger-Themen 4
TimoN11 Mail Programm mit Java? Java Basics - Anfänger-Themen 1
B Java Mail -> Mail senden, ist aber nich in IMAP unter "Gesendet" Java Basics - Anfänger-Themen 3
F String auf E-Mail kürzen Java Basics - Anfänger-Themen 11
B Java Mail: suchen von mehreren Emailadressen Java Basics - Anfänger-Themen 5
B java.mail - Email antworten und Content ausgeben Java Basics - Anfänger-Themen 4
J Mail body verschwindet Java Basics - Anfänger-Themen 2
R Java E-mail versenden. SMTP Port Fehler Java Basics - Anfänger-Themen 8
Henri Mail zu einer Gruppe versenden Java Basics - Anfänger-Themen 10
F Mail empfangen mit JAVA Java Basics - Anfänger-Themen 3
S JavaMail API E-Mail versenden Probleme Java Basics - Anfänger-Themen 5
S E-Mail über Java Java Basics - Anfänger-Themen 9
Mike90 Anhänge einer Mail abrufen Java Basics - Anfänger-Themen 6
T Java-Mail API Java Basics - Anfänger-Themen 11
V JavaApplet versendet keine mail Java Basics - Anfänger-Themen 8
0 Mail Versand Java Basics - Anfänger-Themen 65
A Java Mail 1.4.4 - Email versenden (HOTMAIL SMTP auth) Java Basics - Anfänger-Themen 9
F Java Mail mit Anhang Java Basics - Anfänger-Themen 5
M Java Mail API Java Basics - Anfänger-Themen 7
J Dateien automatisch per Mail versenden Java Basics - Anfänger-Themen 3
F E-Mail Java Basics - Anfänger-Themen 24
M Ist Mail API im Core? Java Basics - Anfänger-Themen 2
L E-Mail Attribute IMAP ändern Java Basics - Anfänger-Themen 4
M Mail-Programm Java Basics - Anfänger-Themen 8
F mail mit anhang Java Basics - Anfänger-Themen 5
F Anhang mi Java Mail Java Basics - Anfänger-Themen 13
F "From" bei Mail ändern Java Basics - Anfänger-Themen 6
F Mail Java Basics - Anfänger-Themen 3
W Mail problem Java Basics - Anfänger-Themen 3
H ist eine "neue Session" für Mail möglich? Java Basics - Anfänger-Themen 3
T E-mail programm Java Basics - Anfänger-Themen 2
M Mail senden - Problem connect to SMTP host Java Basics - Anfänger-Themen 5
F java mail api Java Basics - Anfänger-Themen 4
M Javamail: Mail als separate Datei speichern? Java Basics - Anfänger-Themen 6
G Mehrere E-Mail Adressaten Java Basics - Anfänger-Themen 3
G Mail versenden, wenn Mikrofon einen bestimmten Pegel erreich Java Basics - Anfänger-Themen 3
D Problem beim E-Mail versenden Java Basics - Anfänger-Themen 6
G mail verschicken Java Basics - Anfänger-Themen 3
G Mail Client öffnen Java Basics - Anfänger-Themen 9
D Suchen nach E-Mail Adressen mit RegEx? Java Basics - Anfänger-Themen 14
F E-Mail Programm Java Basics - Anfänger-Themen 4
R JAVA Mail Java Basics - Anfänger-Themen 5
G mail.jar und activation.jar Java Basics - Anfänger-Themen 3
M regulärer Ausdruck zum Parsen einer E-Mail Signatur Java Basics - Anfänger-Themen 16
M Einfache HTML Mail versenden , suche Beispiel Java Basics - Anfänger-Themen 5
L package com.sun.mail does not exist Java Basics - Anfänger-Themen 8
L Import von mail.jar Java Basics - Anfänger-Themen 10
N Header für Mail Java Basics - Anfänger-Themen 5
A E-Mail via SMTP Java Basics - Anfänger-Themen 7
R die /ext klassen nutzen (Mail API) - klassen laden Java Basics - Anfänger-Themen 7
M E-Mail im Netzwerk über Microsoft Exchange Server versenden? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben