E-mail mit Anhang

Naru84

Mitglied
Hallo,
ich möchte mir Hilfe von Java einen E-mail-Versand programmieren, wo auch ein Anhang mitgesendet wird.
Ich hab zwar schon unter galileocomputing.de schon was dazu gefunden, allerdings hilft mir das nicht so recht weiter. Ich kann zwar Mails verschicken, aber es ist kein Anhang dabei. Ich hab also folgendes mit in meinen Quellcode mit eingetragen...

Code:
MimeMultipart multipart = new MimeMultipart();
DataSource fileDataSource = new FileDataSource(dateiname );
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setDataHandler( new DataHandler(fileDataSource) );
messageBodyPart.setFileName("bla.txt");   //Name des Anhangs
multipart.addBodyPart( messageBodyPart );

Also den "MimeMultipart" habe ich so noch extra eingefügt, da ich dachte, dass sich das multipart.addBodyPart(...) darauf beziehen soll.
oder muss ich vielleicht hieran was verändern?

Code:
msg.setContent( message, "text/plain" );

Hier vermute ich, dass ich für text/plain was anderes einsetzen muss, aber was?

Vielleicht kann einer von euch mir weiterhelfen... danke schon mal im Voraus ^^

Naru84
 
Hallo!

Wie wär's denn damit:
Code:
    package de.tutorials;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.util.Properties;
    
    import javax.mail.Message;
    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;
    
    public class SendMailWithAttachmentExample {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) throws Exception {
    		Properties mailProps = new Properties();
    
    		mailProps.put("mail.store.protocol", "pop3");
    		mailProps.put("mail.transport.protocol", "smtp");
    		mailProps.put("mail.user", "foo.bar");
    		mailProps.put("mail.pop3.host", "pop3.someProvider.de");
    		mailProps.put("mail.smtp.host", "smtp.someProvider.de");
    		mailProps.put("User", "foo.bar");
    		mailProps.put("Password", "somePwd");
    		mailProps.put("mail.from", "foo@bar.de");
    
    		Session session = Session.getDefaultInstance(mailProps);
    		Message message = new MimeMessage(session);
    		message.setSubject("Test Nachricht");
    		message.setRecipient(Message.RecipientType.TO, new InternetAddress(
    				"bar.foo@bla.de"));
    MimeMultipart mimeMultipart = new MimeMultipart();
  
  			MimeBodyPart text = new MimeBodyPart();
  			text.setText("ABCDEF");
  			text.setDisposition(MimeBodyPart.INLINE);
  			
 			File file = new File("c:/foo.txt");
  			MimeBodyPart attachement = new MimeBodyPart();
  		    attachement.setDataHandler(new DataHandler(new FileDataSource(file)));
  			attachement.setFileName(file.getName());
  			attachement.setDisposition(MimeBodyPart.ATTACHMENT);
  			mimeMultipart.addBodyPart(text);
  			mimeMultipart.addBodyPart(attachement);
  
  			message.setContent(mimeMultipart);
  			
  			message.saveChanges();
  			Transport.send(message);
    	}
    }

Gruß Tom
 
Hi alle zusammen,

dies sollte auch mit einem Exchange server .
Hatte mal einen ähnlichen code geschrieben und alles ging wunderbar (mit anhang).

Gruss,
Torsten
 
Hallo,

da ja schon einige eine E-Mailanwendung in Java realisiert haben, würde mich mal interesssieren, ob jemand mal seine Erfahrungen mit einer Java-Emailanwendung mitteilen könnte?

Oder ob ich diese E-Mailanwendung mal zu Testzwecken zur Verfügung gestellt bekommen könnte?

Gruß KlaDi.
 
first check your mail with a valid POP3 account

Guten Morgen! :)

Hallo!

Wie wär's denn damit:
Code:
    package de.tutorials;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.util.Properties;
    
    import javax.mail.Message;
    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;
    
    public class SendMailWithAttachmentExample {
    
        /**
         * @param args
         */
        public static void main(String[] args) throws Exception {
            Properties mailProps = new Properties();
    
            mailProps.put("mail.store.protocol", "pop3");
            mailProps.put("mail.transport.protocol", "smtp");
            mailProps.put("mail.user", "foo.bar");
            mailProps.put("mail.pop3.host", "pop3.someProvider.de");
            mailProps.put("mail.smtp.host", "smtp.someProvider.de");
            mailProps.put("User", "foo.bar");
            mailProps.put("Password", "somePwd");
            mailProps.put("mail.from", "foo@bar.de");
    
            Session session = Session.getDefaultInstance(mailProps);
            Message message = new MimeMessage(session);
            message.setSubject("Test Nachricht");
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(
                    "bar.foo@bla.de"));
    MimeMultipart mimeMultipart = new MimeMultipart();
  
              MimeBodyPart text = new MimeBodyPart();
              text.setText("ABCDEF");
              text.setDisposition(MimeBodyPart.INLINE);
              
             File file = new File("c:/foo.txt");
              MimeBodyPart attachement = new MimeBodyPart();
              attachement.setDataHandler(new DataHandler(new FileDataSource(file)));
              attachement.setFileName(file.getName());
              attachement.setDisposition(MimeBodyPart.ATTACHMENT);
              mimeMultipart.addBodyPart(text);
              mimeMultipart.addBodyPart(attachement);
  
              message.setContent(mimeMultipart);
              
              message.saveChanges();
              Transport.send(message);
        }
    }
Gruß Tom

Das hat mir schon mal sehr weitergeholfen! Danke dafür! :)
Leider bekomme ich folgende Exception:
com.sun.mail.smtp.SMTPSendFailedException: 451 4.1.8 To send mail, first check your mail with a valid POP3 account; this prevents unauthorized spam relaying.
...
Was muss ich noch umbauen? Was muss ich an deinem Code noch umbauen?


Danke schon mal! :)
MfG der Gerrit
 
Dein SMTP Server verlangt, dass du dich vorher beim POP3 Server anmeldest um sicherzustellen, dass du auch nen Account auf dem System hast. D.h. du musst die Properties für den POP3 Zugriff noch zusätzlich einrichten und dann sowas in der Art machen:

Java:
Session session = Session.getInstance( props, new javax.mail.Authenticator() {

  @Override 
  protected PasswordAuthentication getPasswordAuthentication() { 
    return new PasswordAuthentication(props.getProperty("mail.pop3.user"),
      props.getProperty("mail.pop3.password")); 
  } 
});

Gruß
Ollie
 
Guten Morgen zusammen :)

Dein SMTP Server verlangt, dass du dich vorher beim POP3 Server anmeldest um sicherzustellen, dass du auch nen Account auf dem System hast.
Das ist mir soweit klar...

D.h. du musst die Properties für den POP3 Zugriff noch zusätzlich einrichten und dann sowas in der Art machen:

java Code:
  1. Session session = Session.getInstance( props, new javax.mail.Authenticator() {
  2. @Override
  3. protected PasswordAuthentication getPasswordAuthentication() {
  4. return new PasswordAuthentication(props.getProperty("mail.pop3.user"),
  5. props.getProperty("mail.pop3.password"));
  6. }
  7. });

Leider bekomme ich das nicht hin.
Ich habe es wie folgt gemacht:
Java:
    private void sendMail(String from, String recipient, String subject, String message , File[] files)
    throws MessagingException {
        Session session = null;
        props = new Properties(); 
        props.put( "mail.smtp.host", Settings.getInstance().getValue("mail.smtp.host") );
        
        // wenn eine Authentifizierung erforderlich ist
        if( Settings.getInstance().getValue("mail.smtp.auth.required").equals("1") ) {
            System.out.println("Authentifcation activated");
            
            props.put("User", Settings.getInstance().getValue("mail.smtp.auth.user"));
            props.put("Password", Settings.getInstance().getValue("mail.smtp.auth.password"));
            session = Session.getInstance( props, new javax.mail.Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    System.out.println("Auth with user: " + props.getProperty("mail.smtp.auth.user"));
                    return new PasswordAuthentication(props.getProperty("mail.smtp.auth.user"),
                            props.getProperty("mail.smtp.auth.password"));
                }
            });
        } else {
            System.out.println("Authentifcation deactivated");
            session = Session.getDefaultInstance( props );
        }
        
        MimeMultipart mimeMultipart = new MimeMultipart();
        
        InternetAddress addressFrom = new InternetAddress( from );
        InternetAddress addressTo = new InternetAddress( recipient ); 
        
        Message msg = new MimeMessage( session ); 
        msg.setFrom( addressFrom ); 
        msg.setRecipient( MimeMessage.RecipientType.TO, addressTo );
        msg.setSubject( subject ); 

        MimeBodyPart text = new MimeBodyPart();
        text.setText(message);
        text.setDisposition(MimeBodyPart.INLINE);
        
        // Mail-Anhänge
        for(File file2send : files) {
            MimeBodyPart attachement = new MimeBodyPart();
            if(file2send != null && file2send.exists() && file2send.canRead()) {
                attachement.setDataHandler(new DataHandler(new FileDataSource(file2send)));
                attachement.setFileName(file2send.getName());
                attachement.setDisposition(MimeBodyPart.ATTACHMENT);
                
                // an EMail anhängen
                mimeMultipart.addBodyPart(attachement);
            }
        }
        
        mimeMultipart.addBodyPart(text);
        msg.setContent(mimeMultipart);
        
        
        // EMail versenden
        Transport.send( msg );
    }
Jedenfalls bekomme ich eine Exception geschmissen:
Code:
com.sun.mail.smtp.SMTPSendFailedException: 451 4.1.8 To send mail, first check your mail with a valid POP3 account; this prevents unauthorized spam relaying.

        at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1515)
        at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1054)
...
Sieht jemand von euch, was ich falsch gemacht habe?
Die Zugangsdaten für Postaus- u. Eingangsserver sind identisch. Das ist richtig so.


Danke schon mal für eure Hilfe!
LG Gerrit
 

Neue Beiträge

Zurück