# Email versenden



## bandy (4. Dez 2011)

Hallo ich moechte mit einem Programm aus dem Buch Java ...Insel eine email an ein Hotmail-Konto versenden, ist in dem Code etwas falsch oder veraltet?:bahnhof:
Was ich da auch probierte, ging nicht.


```
import java.util.*;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.*;

public class SendJavaMail{
  public static void postMail( String recipient,
							                 String subject,
							                 String message, String from )
	  throws MessagingException{
		Properties props = new Properties();
		props.put( "mail.smtp.host", "mail.hotmail.com" );

		Session session = Session.getDefaultInstance( props );

		Message msg = new MimeMessage( session );

		InternetAddress addressFrom = new InternetAddress( from );
		msg.setFrom( addressFrom );

		InternetAddress addressTo = new InternetAddress( recipient );
		msg.setRecipient( Message.RecipientType.TO, addressTo );

		msg.setSubject( subject );
		msg.setContent( message, "text/plain" );
		Transport.send( msg );
  }

  public static void main( String[] args ) throws Exception{
    postMail( "meineemail@hotmail.com",
              "Tolles Buch",
              "Wow. Das Buch ist schön zu lesen",
              "info@mailserver.com" );
  }
}
```


Fehlermeldung:

[XML]Exception in thread "main" javax.mail.MessagingException: Could not connect to SMTP host: mail.hotmail.com, port: 25;
  nested exception is:
	java.net.ConnectException: Connection timed out: connect
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)
	at javax.mail.Service.connect(Service.java:295)
	at javax.mail.Service.connect(Service.java:176)
	at javax.mail.Service.connect(Service.java:125)
	at javax.mail.Transport.send0(Transport.java:194)
	at javax.mail.Transport.send(Transport.java:124)
	at SendJavaMail.postMail(SendJavaMail.java:28)
	at SendJavaMail.main(SendJavaMail.java:32)
Caused by: java.net.ConnectException: Connection timed out: connect
	at java.net.DualStackPlainSocketImpl.connect0(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:337)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:198)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
	at java.net.Socket.connect(Socket.java:579)
	at java.net.Socket.connect(Socket.java:528)
	at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:288)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:231)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1900)
	... 8 more
[/XML]


----------



## HoaX (4. Dez 2011)

Weil mail.hotmail.com nicht stimmt?! Der DNS sagt es sei u.A. mx1.hotmail.com.


----------



## bandy (4. Dez 2011)

HoaX hat gesagt.:


> Weil mail.hotmail.com nicht stimmt?! Der DNS sagt es sei u.A. mx1.hotmail.com.




```
mx1.hotmail.com
```

stimmt auch nicht, bringt wieder seine Fehlermeldung


[XML]Exception in thread "main" javax.mail.MessagingException: Could not connect to SMTP host: mx1.hotmail.com, port: 25;
  nested exception is:
	java.net.ConnectException: Connection timed out: connect
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)
	at javax.mail.Service.connect(Service.java:295)
	at javax.mail.Service.connect(Service.java:176)
	at javax.mail.Service.connect(Service.java:125)
	at javax.mail.Transport.send0(Transport.java:194)
	at javax.mail.Transport.send(Transport.java:124)
	at SendJavaMail.postMail(SendJavaMail.java:28)
	at SendJavaMail.main(SendJavaMail.java:32)
Caused by: java.net.ConnectException: Connection timed out: connect
	at java.net.DualStackPlainSocketImpl.connect0(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:337)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:198)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
	at java.net.Socket.connect(Socket.java:579)
	at java.net.Socket.connect(Socket.java:528)
	at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:288)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:231)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1900)
	... 8 more[/XML]


----------



## Der Müde Joe (4. Dez 2011)

ob das noch aktuell ist?
 Posteingangsserver: 	pop3.live.com (SSL; Port 995)
 Postausgangsserver: 	smtp.live.com (STARTTLS; Port 587)

Die prop starttls setzen!

EDIT:
mail.smtp.starttls.enable

JavaMail API documentation


----------



## irgendjemand (4. Dez 2011)

der wohl typischste fehler

sie dir mal genau an wie du send() aufrufst ...

also STATIC ...

und laut api-doc verwendet diese variante ihre völlig eigenen werte ... heißt : deine schön vorbereitete session ist nutzlos da diese so nicht genutzt wird

ich habe mal auf tut.de ein tut über java-mail gemacht

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

du musst dir von deiner Session ein Transport-objekt holen ... und kein static mit eigenen werten verwenden ...

leider findet man diesen fehler in fast allen tuts die sich mit java-mail auseinander setzen ...


----------



## Der Müde Joe (4. Dez 2011)

Ich mag das mit den Props eh net...Auch nicht das statische Zeugs..drum so:
(Wobei hier die Prop trotzdem noch gesetzt werden muss.)

```
package ch.dmj.faq.mail;
 
import java.io.IOException;
import java.util.Properties;
 
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.URLName;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
 
 
class SimpleMail {
 
    // login data
    private static final String TYPE = "smtp"; // smtps für secure
    private static final String HOST = "localhost";
    private static final String USER = "sysadmin";
    private static final String PASSWD = "password";
    private static final int PORT = 25;
    // send data
    private static final String SENDER = "sysadmin@localhost";
    private static final String RECIPIENT = "test@localhost";
 
    public static void main(String[] args) throws Exception {
        sendMail();
    }
 
    private static void sendMail() throws NoSuchProviderException, MessagingException,
            AddressException, IOException {
        Properties props = new Properties();
        Session session = Session.getDefaultInstance(props);
        session.setDebug(true);
        Transport tr = session.getTransport(new URLName(TYPE, HOST, PORT, null, USER, PASSWD));
        Message message = new MimeMessage(session);
        message.addRecipient(RecipientType.TO, new InternetAddress(RECIPIENT));
        message.addFrom(new InternetAddress[] { new InternetAddress(SENDER) });
        //subject
        message.setSubject("the subject");
        //the multipart
        MimeMultipart multiPart = new MimeMultipart("mixed");
        // a plaintext part
        MimeBodyPart body1 = new MimeBodyPart();
        body1.setContent("blub", "text/plain");
        multiPart.addBodyPart(body1);
        // a html part
        MimeBodyPart body2 = new MimeBodyPart();
        body2.setContent("<b>hallo welt</b>", "text/html");
        multiPart.addBodyPart(body2);
        // a picture
//      MimeBodyPart body3 = new MimeBodyPart();
//      body3.attachFile(new File("/home/user/Desktop/picture"));
//      multiPart.addBodyPart(body3);
        // set the content to the multipart
        message.setContent(multiPart);
        //send
        tr.connect();
        tr.sendMessage(message, message.getAllRecipients());
        tr.close();
    }
}
```


----------



## bandy (8. Dez 2011)

irgendjemand hat gesagt.:


> der wohl typischste fehler
> 
> sie dir mal genau an wie du send() aufrufst ...
> 
> ...




Danke fuers Tutorial, war nuetzlich und funktioniert auch noch

Naja,  Porteinstellung ist sogar nicht notwendig, nur Providerlink


----------



## bandy (15. Dez 2011)

Naja, wuerde gerne noch wissen wie man Anhaenge mit diesem Programm verschicken kann



```
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendMailTLS
{
    public static void main(String[] args) throws Exception
    {
        String host="smtp.gmail.com";
        int port=587;
        String user="username";
        String pass="password";
        
        Properties props=new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        
        Session session=Session.getInstance(props);
        Transport transport=session.getTransport("smtp");
        transport.connect(host, port, user, pass);
        
        Address[] addresses=InternetAddress.parse("recipent@host.tld");
        
        Message message=new MimeMessage(session);
        message.setFrom(new InternetAddress(user));
        message.setRecipients(Message.RecipientType.TO, addresses);
        message.setSubject("TEST SUBJECT");
        
        message.setText("text/plain BODY");
        
        transport.sendMessage(message, addresses);
        System.out.println("SEND");
        
        transport.close();
    }
}
```


Ich habe versucht es so zu erweitern:


```
message.setFileName("C:/Users/x/Desktop/Beans.zip");
```


nun wenn jetzt eine email bei mir ankommt, dann wird dort Anhang angezeigt, aber diser betraegt immer 0,0kb, ist also leer, warum und wie kann mann es beheben? :bahnhof:


----------



## JohannisderKaeufer (15. Dez 2011)

Wenn die Nachricht Anhänge oder Attachments enthalten soll, so benötigt man einen sogenannten javax.mail.MultiPart.

Damit kann man eine MultiPart-Nachricht erstellen. Eine MultiPart Nachricht besteht dann aus ein oder mehreren BodyParts, wobei du für jede Datei einen BodyPart benötigst.

Das sollten mal genug Infos zum recherchieren sein.

Ach ja, das setFileName setzt lediglich den Namen, du kannst ja theoretisch eine Datei die du versenden möchtest onTheFly generieren, ohne sie irgendwo abspeichern zu müssen. Beim empfänger, sollte dann aber ein Dateiname vorhanden sein, damit er was damit anfangen kann. 

setFileName wirft auch keine Exception, wenn die Datei nicht vorhanden ist.
setFileName sollte auch nicht den Pfad (C:/bla/) sondern nur den Dateinamen enthalten (foo.bar).


----------



## irgendjemand (15. Dez 2011)

@TO

mein tutorial war damals auch nur dafür gedacht um zu zeigen wie man einfache text/plain e-mails verschickt ...
geplant war mal eine größere tutorial-serie ... aber da sowohl auf tut.de als auch hier nur getrollt wird und scheinbar der rest der "java-community" probleme mit hat wenn ich gegenüber anderen user meine meinung offen sage *z.B. wiederholtes , aggressives hinweisen auf GooGLe / SuFu , dierekte nennung von eventuellen problemen / sicherheitsrisiken , und auch manchmal ziemlich aggressives aufregen über "n00bz" die einfach nicht in der lage sind sich halbwegsverständlich auszudrücken oder die sich im vorfeld keinerlei gedanken über die umsetzung gemacht haben sondern nur im kopf haben : das will ich mit java umsetzen , egal wie* und ich desshalb sowohl hier als auch "da drüben" mit diversen nicks perm-bans kassiert habe kam es leider nie zu einer fortsetzung dieser tut-reihe

geplant waren unter anderem noch

- mails empfangen via POP3
- attachments *sowohl senden via SMTP als auch empfangen via POP3*
- verwaltung eines e-mail kontos via IMAP
- komprimierung und verschlüsselung

außerdem wollte ich als letztes noch eine zusammfassung hierrüber schreiben
- kleine spielerein welche man mit hilfe der javamail-api noch so umsetzen kann

aber naja ... da wohl niemand bereit ... oder sage ich mal lieber : in der lage dazu ist mit mir umzugehen *oh was ich im RL schon an problemen desswegen hatte* ... kann ich nur sagen : ich für meinen teil habe diese insgesamt 6 verschiedenen punkte soweit implementiert wie ich sie brauche *einiges nur als referezen-impl ... aber voll funktionsfähig* ... diese aber auf grund scheinbar mangeldener interesse oder unlust sich mit meinen threads zu beschäftigen nicht public gemacht habe und diese wahrscheinlich auch nur innerhalb meines freundes-kreises weitergeben werden ...

ich weis ... hilft dir grad wenig ... aber auch dir gegenüber möchte ich erwähnen

sowohl die sufu dieses boards ... als auch die sufu anderer seiten ... sowie GooGLe liefern dir zu

"java mail attachment"

sowas von genug seiten , tuts und sonst was das du dir mit hilfe des codes den du schon lauffähig hast , alles zusammen schreiben könntest ... und das sogar ohne irgendjemanden weiterhin zu fragen wie das oder jenes geht ... man findet zu diesem thema ALLES bei google ... auch wenn vieles nicht mehr ganz aktuell oder gar jemals korrekt war *beliebtester fehler z.b. static-call von Transport.send(Message) ... was du aber mit hilfe meines tut's lösen konntest* ... so kann man durch testen , lesen der api-doc sowie kombination von verschiedenen codes alles lauffähig zusammen bekommen ...


----------



## bandy (15. Dez 2011)

Ihr habt beide so viel geschrieben, aber hat leider nicht viel gebracht:noe:

Ich habe in dieser Nacht und den ganzen Vormittag ca. 25 Quelltexte hierzu gegoogelt und ausprobiert, leider niergendwo etwas funktionsfaehiges. So viele Authoren die ueberzeugend von Dingen schreiben die nicht funktionieren

Naja, nun habe ich von diesem  ganzen  Muell mir etwas zusammen gebastellt was Text-Dateien versenden kann, werde es jetzt testen was fuer Datenformate es noch versenden kann. 

Aber Danke trotzdem.


----------



## Crian (15. Dez 2011)

Wenn du das ausgetestet hast, kannst du ja die fertige Klasse hier vorstellen.


----------



## irgendjemand (15. Dez 2011)

genau ... wenn du es dann hinbekommen hast kannst du doch das ergebnis hier posten ...

dann bist DU der überzeugt davon schreiben kann das es funktioniert =D *grins*


----------



## Jvooy (15. Dez 2011)

:toll:E-Mail versenden mit JavaMail | IT blogging:toll:

Beste Seite für ne Java-Mail .


----------



## Crian (15. Dez 2011)

Die benutzen dort 
	
	
	
	





```
send()
```
 auch static. Hmmm.


----------



## irgendjemand (15. Dez 2011)

Crian hat gesagt.:


> Die benutzen dort
> 
> 
> 
> ...



ich darf mal kurz aus der DOC zitieren



> Note that send is a static method that creates and manages its own connection. Any connection associated with any Transport instance used to invoke this method is ignored and not used. This method should only be invoked using the form Transport.send(msg);, and should never be invoked using an instance variable.



ich weis nicht ob es reicht wenn man eine Session mit AUTH und LOGIN und HOST und sowas alles erstellt ... sich davon eine Message holt ... und diese via Transport.send(Message) abschickt ...

als ich damals mit javamail angefangen habe hat genau DAS zumindest bei g-mail NICHT funktioniert ...

problem resultiert aus der arbeitsweise dieser static-method : das Transport-objekt hat dann keine daten für Server , Port , AUTH , verschlüsselung , login-daten , etc ...
natürlich müsste sich alles via getter über eine lange object-chain holen lassen ... aber ich denke doch das es da irgendwo ein stolperstein gibt ...

bin gerne offen für funktionierende widerlegung ... aber so lange ich die nicht habe kann ich nur von mir sagen : bei g-mail funktioniert das NICHT


----------



## irgendjemand (15. Dez 2011)

Jvooy hat gesagt.:


> :toll:E-Mail versenden mit JavaMail | IT blogging:toll:
> 
> Beste Seite für ne Java-Mail .





> GMX("mail.gmx.net", 25, "login", "passwort", "absender")
> GOOGLEMAIL("smtp.googlemail.com", 25, "login", "passwort", "absender")
> ARCOR("mail.arcor.de", 25, "login", "passwort", "absender")
> WEB("smtp.web.de", 25, "login", "passwort", "absender")
> YAHOO("smtp.mail.yahoo.de", 25, "login", "passwort", "absender")



ich weis nicht wer DA gepennt hat .. aber alleine die ports sind falsch ... und die waren auch 2009 schon nicht so ...
ebenfalls fehlt das ganze AUTH sowie SSLv2 bzw SSLv3/TLSv1 *z.b. bei g-mail und Web.de erforderlich*

DAS soll die beste seite für java-mail sein ... danke ... da stecken mehr fehler drin als wenn ich google dierekt nach einem beispiel frage ...


----------



## bandy (16. Dez 2011)

Crian hat gesagt.:


> Wenn du das ausgetestet hast, kannst du ja die fertige Klasse hier vorstellen.




Wieso, wollt ihr das auch haben?:bahnhof:

Ich wollte eigentlich es von euch haben und die ganze Muehe mir sparen:shock:

Aber gut, helfe euch auch mal.


```
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class EmailWithAttachments{
   private static MimeBodyPart messageBodyPart;

public static void main(String [] args) throws MessagingException{ 
      String pass="meinPasswort";
      String user="absenderemail@gmail.com";
      int port=587;
     
      Properties properties = System.getProperties();
      properties.put("mail.smtp.auth", "true");
      properties.put("mail.smtp.starttls.enable", "true");
      //Empfaenger email
      String to = "empfaenger@hotmail.com";
      String host = "smtp.gmail.com";
      try{
      Session session = Session.getDefaultInstance(properties);
      Transport transport=session.getTransport("smtp");
      transport.connect(host, port, user, pass);
	
      Address[] addresses=InternetAddress.parse(to);
      Message message = new MimeMessage(session);
      message.setFrom(new InternetAddress(user));
      message.addRecipients(Message.RecipientType.TO, addresses);
      message.setSubject("This is the Subject Line!");
      message.setText("This is actual message");
      Multipart multipart = new MimeMultipart();
      messageBodyPart = new MimeBodyPart();
      multipart.addBodyPart(messageBodyPart);
      //Hier Dateiname was angehaengt werden soll eingeben, wenn es im gleichen Ordner wie das Programm evt. den Pfad auch noch
      String filename = "picture.JPG";
      DataSource source = new FileDataSource(filename);
      messageBodyPart.setDataHandler(new DataHandler(source));
      messageBodyPart.setFileName(filename);
      message.setContent(multipart );
      transport.sendMessage(message, addresses);
      System.out.println("Sent message successfully....");
      transport.close();
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}
```



Es werden noch zusaetzlich Librariries mail.jar benoetigt damit es funkt.


----------



## bandy (16. Dez 2011)

deleted


----------



## bandy (16. Dez 2011)

Jvooy hat gesagt.:


> :toll:E-Mail versenden mit JavaMail | IT blogging:toll:
> 
> Beste Seite für ne Java-Mail .



Die Beste Seite fuer Java-Mail mit Anhang. ist mein Quelltext hier gepostet, alle anderen funktionieren nicht mehr, oder taten es zuvor auch nicht.

Gruss:

bandy


----------



## irgendjemand (16. Dez 2011)

na ... so sauber ist dein code aber auch noch nicht ..

1) "throws" und "try-catch"
wenn du innerhalb der methode in einem try-catch block eine exception fängst ... dann musst du diese nicht zusätzlich mit "throws" nach "oben" weiterwerfen ...
throws und try-catch zusammen machen erst sinn wenn es verschiedene exceptions sind
wenn du deinen code sauber formatiert hättest hätte man das auch schneller gesehen *ich hab mich erst über das catch ohne try gewundert ... dann aber das try beim re-formatieren doch gefunden*

2) MimeMessage.setText(String)
da hast du wohl den sinn von MultiPart noch nicht ganz verstanden ...
in deinem code wird der inhalt der e-mail erst mit einem text/plain string gesetzt ... später aber mit dem MultiPart vollständig überschrieben ...
also sendet dein code nur das attachment ... aber keinen text ...
dieser muss ebenfalls in einem BodyPart untergebracht sein und sollte vor dem attachment dem MultiPart-objekt hinzugefügt werden

3) interfaces / abstract super-class vs direct
den MimeMultipart castest du nach außen als "normalen" MultiPart
den MimeBodyPart aber hast du dierekt als diesen typ deklariert
du solltest dich für eine variante entscheiden ... wobei nach java der abstraktere super-typ stets zu bevorzugen ist ... hier also die variable wenn dann nur als BodyPart deklarieren

4) pfad
der pfad hat in setFilename(String) NICHTS zu suchen ...
natürlich ist er wichtig für das laden der datei und muss daher dem konstruktor des DataHandler übergeben werden ... aber auch NUR DA ... nirgends anderst *ich hab nicht ausprobiert was passiert wenn du den pfad mit angibst ... dürfte allerdings zu fehlern führen*
auch sollte der pfad absolut sein *wird spätestens dann wichtig wenn du mit paketen arbeitest und/oder das ganze in ein jar packst*
auch sollte der pfad unabhängig vom OS nur mit "/" geschrieben werden ...
damit später im DataHandler konstruktor kein fehler auftritt muss der pfad außerdem mit einem "/" enden

an sich also eine ganz solide grundlage in der dann doch leider einige fehler stecken

ich hab mir die mühe gemacht und den code nochmals überarbeitet
getestet : von g-mail zu web.de
mit text-part und attachment

*für unsere perfektionisten : ich hab mir mal die mühe gemacht und "saubere" imports verwendet ... wobei der compiler am ende doch nur das hier draus macht :

```
import java.io.PrintStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
```
de-compiled mit JAD ...
*woher plötzlich das java.io.PrintStream kommt weis ich nicht ...
wer mir also noch EIN MAL an den kopf haut von wegen es ist besser wenn man jede klasse einzeln importiert anstatt gleich das ganze paket hat hier den beweis das der compiler es sowieso macht ...
sinn machen würde es erst bei z.b. java.util.Date vs java.sql.Date ...*


code

```
import java.util.Properties;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
public class SendMailTLS
{
	public static void main(String[] args) throws Exception
	{
		String host="smtp.gmail.com";
		int port=587;
		String user="USER@googlemail.com";
		String pass="PASS";
		
		Properties props=new Properties();
		props.put("mail.smtp.auth", "true");
		props.put("mail.smtp.starttls.enable", "true");
		
		Session session=Session.getInstance(props);
		Transport transport=session.getTransport("smtp");
		transport.connect(host, port, user, pass);
		
		Address[] addresses=InternetAddress.parse("TO@web.de");
		
		Message message=new MimeMessage(session);
		message.setFrom(new InternetAddress(user));
		message.setRecipients(Message.RecipientType.TO, addresses);
		message.setSubject("TEST SUBJECT");
		
		Multipart multipart=new MimeMultipart();
		
		BodyPart textBodyPart=new MimeBodyPart();
		textBodyPart.setText("text/plain BODY");
		
		BodyPart attachmentBodyPart=new MimeBodyPart();
		String path="ABSOLUTER PFAD";
		String filename="FILENAME";
		DataSource source=new FileDataSource(path + filename);
		attachmentBodyPart.setDataHandler(new DataHandler(source));
		attachmentBodyPart.setFileName(filename);
		
		multipart.addBodyPart(textBodyPart);
		multipart.addBodyPart(attachmentBodyPart);
		message.setContent(multipart);
		
		transport.sendMessage(message, addresses);
		System.out.println("SEND");
		
		transport.close();
	}
}
```

ich hoffe DARAN hat jetzt wirklich keiner mehr was auszusetzen


----------



## bandy (16. Dez 2011)

irgendjemand hat gesagt.:


> na ... so sauber ist dein code aber auch noch nicht ..
> 
> 1) "throws" und "try-catch"
> 
> ich hoffe DARAN hat jetzt wirklich keiner mehr was auszusetzen




Auch wenn man dran etwas verbessern kann, es funktioniert problemlos im Vergleich zu
alldem was vorgestellt wurde, selbst vom der Tutorial vom Hersteller fukte nicht

....... try und catch waren mir nach all diesen Versuchen so egal, daran dachte ich schon nicht mehr, wichtig war dass es endlich das tut was es soll Es gibt keine Fehler mehr etc. und es ist gut so, welcher Tutorial hat es bis jetzt getan? :bahnhof:


----------



## irgendjemand (16. Dez 2011)

bandy hat gesagt.:


> wichtig war dass es endlich das tut was es soll [...] welches Tutorial hat es bis jetzt getan?



da muss ich dir allerdings bedingungslos zustimmen *grins*

na gut ... hoffe du kannst mit dem "korrigierten" code was anfangen ...
ich sag ja auch nicht das dein code schlecht ist ... oder gar das meiner besser wäre ...
deiner war nur nachem ersten drübergucken recht ... schräg ... nichts für ungut ...
hab das ganze halt nur so weit "geändert" das es sauber implementiert ist und halt auch noch den teil hinzugefügt der dann auch wirklich n text mitschickt ...

hope it helps =D


----------



## Crian (16. Dez 2011)

[c]The import javax.mail cannot be resolved[/c]

Muss ich da noch eine Bibliothek beschaffen? Ich dachte die javax-Bibliotheken würden schon dabei sein.


----------



## AngryDeveloper (16. Dez 2011)

JavaMail ist eine extra Bibliothek:
JavaMail API



> The JavaMail API is available as an optional package for use with Java SE platform and is also included in the Java EE platform.


----------



## irgendjemand (16. Dez 2011)

Crian hat gesagt.:


> [c]The import javax.mail cannot be resolved[/c]
> 
> Muss ich da noch eine Bibliothek beschaffen? Ich dachte die javax-Bibliotheken würden schon dabei sein.



das hier mal gelesen : E-Mails mit JavaMail versenden @ tutorials.de: Tutorials, Forum & Hilfe ?

da steht deutlich drin das javax.mail eine eigene lib ist die du dir erst von sun laden musst ...


----------



## bandy (17. Dez 2011)

Crian hat gesagt.:


> [c]The import javax.mail cannot be resolved[/c]
> 
> Muss ich da noch eine Bibliothek beschaffen? Ich dachte die javax-Bibliotheken würden schon dabei sein.



Habe doch am Ende des Quelltextes dazu geschrieben, dass Libraries extra hinzugefuegt werden muessen.


----------



## HoaX (17. Dez 2011)

irgendjemand hat gesagt.:


> ich weis nicht wer DA gepennt hat .. aber alleine die ports sind falsch ... und die waren auch 2009 schon nicht so ...
> ebenfalls fehlt das ganze AUTH sowie SSLv2 bzw SSLv3/TLSv1 *z.b. bei g-mail und Web.de erforderlich*
> 
> DAS soll die beste seite für java-mail sein ... danke ... da stecken mehr fehler drin als wenn ich google dierekt nach einem beispiel frage ...



Derjenige, der gepennt hat, bist du! Port 25 ist Standard und wird/muss von allen Anbietern angeboten werden.
Stell dir vor du holst dir einen eigenen Server auf dem die Domain irgendjemand.de. liegt.
Wenn dir jetzt jemand von seinem gmx.de-Account eine Mail sendet, dann verwendet er ja den SMTP-Server von GMX, und dieser leitet die Mail weiter an deinen SMTP-Server. Dein Server erkennt dass die Nachricht für die eigenen Domain bestimmt ist und nimmt die Nachricht an.
Wenn du jetzt Port 25 sperrst, woher soll dann gmx.de wissen wie es dir die Mail zustellen soll? Im DNS liegen mittels MX-Record nur die IPs der SMTP-Server, aber keine Ports. Port 25 ist bei allen offen und funktioniert!


----------



## bandy (17. Dez 2011)

HoaX hat gesagt.:


> Port 25 ist bei allen offen und funktioniert!



Wenn ich den Port von 587 auf 25 aendere, bringt es Fehlermeldung.


[XML]javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 25;[/XML]


Und das auch bei yahoo und hotmail, mit Port 587 geht es bei all diesen Anbietern ohne Probleme.


----------

