Mail Versand

07alex07

Aktives Mitglied
Hallo zusammen,

ich will hier ein Mailversand erstellen das ganze klappt auch schon gut.
Bloß weiß ich nicht, wie ich die mail an mehrere Benutzer auf einmal schicken soll.

Hier die Mailer-Klasse
Java:
public class Mail {

    public static void send(String to, String subject, String inhalt, String from, String anhang) throws AddressException, MessagingException {
        final String host = "xxxxxxxx";     // SMTP-Host
        final int port = 25;                    // SMTP-Port
        final String username = "xxxxxxxx";    // SMTP-Username
        final String passwort = "xxxxxxxx";     // SMTP-Passwort
        
        // Eigenschaften
        Properties props = System.getProperties();
        props.put("mail.smtp.host", true) ;
        
        Session session = Session.getInstance(props, null) ;
        
        // Nachricht erstellen
        try {
            MimeMessage msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(from));
            InternetAddress[] address = {new InternetAddress(to)};
            msg.setRecipients(Message.RecipientType.TO, address);
            msg.setSubject(subject);
            
            // Nachricht erstellen
            MimeBodyPart mbp1 = new MimeBodyPart();
            mbp1.setText(inhalt);
            
            // Anhang
            FileDataSource fds = new FileDataSource(anhang);
            mbp1.setDataHandler(new DataHandler(fds));
            mbp1.setFileName(fds.getName());
            
            // Multipart erstellen
            Multipart mp = new MimeMultipart();
            mp.addBodyPart(mbp1);
            
            // Multipart zur Nachricht
            msg.setContent(mp);
            
            // Header
            msg.setSentDate(new Date());
            
            // Nachricht senden
            final Transport transport = session.getTransport("smtp");
        transport.connect(host, port, username, passwort);
        transport.sendMessage(msg, address);
        transport.close();
        } catch(Exception ex) {
            ex.printStackTrace();
        }
    }

Das ist ein Frame beim klicken soll folgendes gemacht werden.
Java:
try {
            // Nachrichtverschicken
            String to = tfTo.getText();
            String from = tfFrom.getText();
            String cc = tfCC.getText();
            String bcc = tfBCC.getText();
            String inhalt = taNachricht.getText();
            String subject = tfSubject.getText();
            String anhang = "C:\\Test.txt";
        Mail.send(to, subject, inhalt, from, anhang);
        } catch (AddressException ex) {
            Logger.getLogger(Alex.class.getName()).log(Level.SEVERE, null, ex);
        } catch (MessagingException ex) {
            Logger.getLogger(Alex.class.getName()).log(Level.SEVERE, null, ex);
        }

Muss dazu sagen, bin in Java neu.
Ich danke für die Hilfe
 
G

Gast2

Gast
Java:
            InternetAddress[] address = {new InternetAddress(to)};
            msg.setRecipients(Message.RecipientType.TO, address);
Du gibst da einfach mehr als einen Empfänger an.
 
G

Gast2

Gast
Nein, es müsste dann so heißen:
Java:
InternetAddress[] address = {new InternetAddress("bla@bla.de"), new InternetAddress("blub@blub.de")};
 

chalkbag

Bekanntes Mitglied
wie genau gibst du es an, es muss in etwa wie folgt aussehen


Java:
InternetAddress[] address = {new InternetAddress(to),new InternetAddress(to2),new InternetAddress(to3)};

[edit] 2x langsamer, ich stell mich in die Ecke
 

chalkbag

Bekanntes Mitglied
Trau mir gar nicht was zu schreiben, da bestimmt Eike wieder schneller ist.

wie gepostet, die Adressen im Array anlegen


Java:
InternetAddress[] addresses = {new InternetAddress("bla@bla.de"), new InternetAddress("blub@blub.de")};


und dieses dann bei Aufruf wie folgt übergeben.

Java:
msg.setRecipients(Message.RecipientType.TO, addresses);
 

07alex07

Aktives Mitglied
komm jetzt ganz durcheinander

mail.java
Java:
public class Mail {

    public static void send(String[] to, String subject, String inhalt, String from, String anhang) throws AddressException, MessagingException {
        final String host = "xxxxxxxx";     // SMTP-Host
        final int port = 25;                    // SMTP-Port
        final String username = "xxxxxxxx";    // SMTP-Username
        final String passwort = "xxxxxxxx";     // SMTP-Passwort

        // Eigenschaften
        Properties props = System.getProperties();
        props.put("mail.smtp.host", true) ;
        
        Session session = Session.getInstance(props, null) ;
        
        // Nachricht erstellen
        try {
            MimeMessage msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(from));
            InternetAddress[] address = {new InternetAddress(to)};
            msg.setRecipients(Message.RecipientType.TO, address);
            msg.setSubject(subject);
            
            // Nachricht erstellen
            MimeBodyPart mbp1 = new MimeBodyPart();
            mbp1.setText(inhalt);
            
            // Anhang
            FileDataSource fds = new FileDataSource(anhang);
            mbp1.setDataHandler(new DataHandler(fds));
            mbp1.setFileName(fds.getName());
            
            // Multipart erstellen
            Multipart mp = new MimeMultipart();
            mp.addBodyPart(mbp1);
            
            // Multipart zur Nachricht
            msg.setContent(mp);
            
            // Header
            msg.setSentDate(new Date());
            
            // Nachricht senden
            final Transport transport = session.getTransport("smtp");
        transport.connect(host, port, username, passwort);
        transport.sendMessage(msg, address);
        transport.close();
        } catch(Exception ex) {
            ex.printStackTrace();
        }
    }
Zeile 19. kommt ein Fehler bei mir


alex.java
Java:
public class Alex extends javax.swing.JFrame {

    /** Creates new form Alex */
    public Alex() {
        initComponents();
        Center alex = new Center(this);
        //frame.setIconImage(new ImageIcon(imgURL).getImage());
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        tfTo = new javax.swing.JTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        taNachricht = new javax.swing.JTextArea();
        jButton1 = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        tfanhang = new javax.swing.JTextField();
        tfSubject = new javax.swing.JTextField();
        tfBCC = new javax.swing.JTextField();
        tfCC = new javax.swing.JTextField();
        tfFrom = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("MailServer 1.0");

        taNachricht.setColumns(20);
        taNachricht.setRows(5);
        jScrollPane1.setViewportView(taNachricht);

        jButton1.setText("Senden");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jLabel1.setText("To:");

        jLabel2.setText("From:");

        jLabel3.setText("CC:");

        jLabel4.setText("BCC:");

        jLabel5.setText("Subject:");

        jLabel6.setText("Attachment:");

        jLabel7.setText("Nachricht:");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jButton1)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel6)
                            .addComponent(jLabel5)
                            .addComponent(jLabel4)
                            .addComponent(jLabel3)
                            .addComponent(jLabel2)
                            .addComponent(jLabel1)
                            .addComponent(jLabel7))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jScrollPane1)
                            .addComponent(tfTo, javax.swing.GroupLayout.DEFAULT_SIZE, 217, Short.MAX_VALUE)
                            .addComponent(tfFrom)
                            .addComponent(tfCC)
                            .addComponent(tfBCC)
                            .addComponent(tfSubject)
                            .addComponent(tfanhang))))
                .addContainerGap(610, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(63, 63, 63)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(tfTo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(tfFrom, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(tfCC, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(tfBCC, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel5)
                    .addComponent(tfSubject, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel6)
                    .addComponent(tfanhang, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel7)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton1)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        try {
            // Nachrichtverschicken
            String[] to = {tfTo.getText()};
            String from = tfFrom.getText();
            String cc = tfCC.getText();
            String bcc = tfBCC.getText();
            String inhalt = taNachricht.getText();
            String subject = tfSubject.getText();
            String anhang = "C:\\Test.txt";
            Mail.send(to, subject, inhalt, from, anhang);
        } catch (AddressException ex) {
            Logger.getLogger(Alex.class.getName()).log(Level.SEVERE, null, ex);
        } catch (MessagingException ex) {
            Logger.getLogger(Alex.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Alex().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea taNachricht;
    private javax.swing.JTextField tfBCC;
    private javax.swing.JTextField tfCC;
    private javax.swing.JTextField tfFrom;
    private javax.swing.JTextField tfSubject;
    private javax.swing.JTextField tfTo;
    private javax.swing.JTextField tfanhang;
    // End of variables declaration
}
 

Suinos

Bekanntes Mitglied
Die Empfänger stehen alle in einem Textfeld?
Dann musst du den String zuerst parsen, alle Adressen in ein Array / eine Liste stecken und dann die Methode entsprechend aufrufen.

Als Hilfestellung eine angepasste Methode, welche erwartet, dass die Empfänger bereits getrennt wurden (du kannst es natürlich auch anders machen):
Java:
// Empfänger als Array
public static void send(String[] to, String subject, String inhalt, String from, String anhang) throws AddressException, MessagingException {

// [...]

InternetAddress[] recipients = new InternetAddress[to.length];

for(int i = 0; i < recipients.length; i++)
{
    recipients[i] = new InternetAddress(to[i]);
}

msg.setRecipients(Message.RecipientType.TO, recipients);
 

07alex07

Aktives Mitglied
so frage ich die adressen ab
Java:
String[] to = {tfTo.getText()};

übergabe an die mail.java
Java:
Mail.send(to, subject, inhalt, from, anhang);

und das ist die mail.java
Java:
public class Mail {

    public static void send(String[] to, String subject, String inhalt, String from, String anhang) throws AddressException, MessagingException {
        final String host = "xxxxxxxx";     // SMTP-Host
        final int port = 25;                    // SMTP-Port
        final String username = "xxxxxxxx";    // SMTP-Username
        final String passwort = "xxxxxxxx";     // SMTP-Passwort

        // Eigenschaften
        Properties props = System.getProperties();
        props.put("mail.smtp.host", true);

        Session session = Session.getInstance(props, null);

        // Nachricht erstellen
        try {
            MimeMessage msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(from));
            InternetAddress[] address = new InternetAddress[to.length] ;
            for (int i = 0; i < address.length; i++) {
                address[i] = address[i];
                System.out.println("mail.java " + address[i]);
            }
            System.out.println(address);
            msg.setRecipients(Message.RecipientType.TO, address);
            
            //InternetAddress[] address = new InternetAddress[to.length];
            //System.out.println("Mail.java " + address);
            //msg.setRecipients(Message.RecipientType.TO, address);
            msg.setSubject(subject);

            // Nachricht erstellen
            MimeBodyPart mbp1 = new MimeBodyPart();
            mbp1.setText(inhalt);

            // Anhang
            FileDataSource fds = new FileDataSource(anhang);
            mbp1.setDataHandler(new DataHandler(fds));
            mbp1.setFileName(fds.getName());

            // Multipart erstellen
            Multipart mp = new MimeMultipart();
            mp.addBodyPart(mbp1);

            // Multipart zur Nachricht
            msg.setContent(mp);

            // Header
            msg.setSentDate(new Date());

            // Nachricht senden
            final Transport transport = session.getTransport("smtp");
            transport.connect(host, port, username, passwort);
            transport.sendMessage(msg, address);
            transport.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

wenn ich in das Textfeld zwei adressen so eingebe test1@test.de;test2@test.de

bekomme ich die Fehlermeldung hier
Code:
java.lang.NullPointerException
	at javax.mail.internet.InternetAddress.toString(InternetAddress.java:461)
	at javax.mail.internet.InternetAddress.toString(InternetAddress.java:426)
	at javax.mail.internet.MimeMessage.setAddressHeader(MimeMessage.java:707)
	at javax.mail.internet.MimeMessage.setRecipients(MimeMessage.java:586)
	at mailserver.Mail.send(Mail.java:80)
	at mailserver.Alex.jButton1ActionPerformed(Alex.java:166)
	at mailserver.Alex.access$000(Alex.java:25)
	at mailserver.Alex$1.actionPerformed(Alex.java:70)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.Component.processMouseEvent(Component.java:6288)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6053)
	at java.awt.Container.processEvent(Container.java:2041)
	at java.awt.Component.dispatchEventImpl(Component.java:4651)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
	at java.awt.Container.dispatchEventImpl(Container.java:2085)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
	at java.awt.EventQueue.access$000(EventQueue.java:84)
	at java.awt.EventQueue$1.run(EventQueue.java:602)
	at java.awt.EventQueue$1.run(EventQueue.java:600)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
	at java.awt.EventQueue$2.run(EventQueue.java:616)
	at java.awt.EventQueue$2.run(EventQueue.java:614)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
 

Miggel

Mitglied
Ich glaub, dass stimmt nicht:
Java:
address[i] = address[i];

Sollte es nicht eher so heissen:
Java:
InternetAddress[] address = new InternetAddress[to.length] ;
  for (int i = 0; i < address.length; i++) {
    address[i] = new InternetAddress(to[i]);

  }
 

07alex07

Aktives Mitglied
Ja hab das geändert.

Krieg die Fehlermeldung hier
Code:
javax.mail.internet.AddressException: Illegal semicolon, not in group in string ``test1@test1.de;test2@test2.de'' at position 25
 

Miggel

Mitglied
Trenne die im Textfeld eingegebenen Adressen mit einem Komma ',' anstatt einem Semikolon...

Gehts dann?

EDIT: Ne, war ein blöder Gedanke, die Adressen sind ja schon im String Array aufgeteilt. Wenn du das String-Array 'to' nacheinander ausgibst, erscheinen da auch jeweils die richtigen Adressen oder ist es einfach nur ein Eintrag?
 

07alex07

Aktives Mitglied
wie gesagt, krieg die Meldung das da ein ";" vorhanden ist, und das darf nicht sein...jetzt weiß ich nicht, wie ich das beheben kann
 

chalkbag

Bekanntes Mitglied
Java:
StringTokenizer eMailAddressTokens = new StringTokenizer("test1@test.de;test2@test.de",";");
		while(eMailAddressTokens.hasMoreTokens()){
			System.out.println(eMailAddressTokens.nextToken());
		}

Ausgabe:

Code:
test1@test.de
test2@test.de
 

faetzminator

Gesperrter Benutzer
Oder - wenn man meinen Link beachtet - mit [c]split()[/c]:
Java:
String accs = "test1@test.de;test2@test.de";
for (String acc : accs.split(";")) {
    System.out.println(acc);
}
 

faetzminator

Gesperrter Benutzer
... :autsch:

Klingt fast so, als würdest du keine Hilfe wollen. Wenn du Hilfe von uns willst, dann musst du genau sagen was, wo (und allenfalls warum -> Exception) irgendwo nicht funktioniert.
 

chalkbag

Bekanntes Mitglied
Es wurde eigentlich schon deutlich erklärt, vielleicht brauchst du eine Pause

Java:
String[] to = {tfTo.getText()};

muss zu

Java:
String[] to = tfTo.getText().split(";");
 

07alex07

Aktives Mitglied
So jetzt mal den ganzen Code nochmal.

Mail.java
Java:
public class Mail {

    public static void send(String to, String subject, String inhalt, String from, String anhang) throws AddressException, MessagingException {
        final String host = "xxxxxxxx";     // SMTP-Host
        final int port = 25;                    // SMTP-Port
        final String username = "xxxxxxxx";    // SMTP-Username
        final String passwort = "xxxxxxxx";     // SMTP-Passwort

        // Eigenschatfen
        Properties props = System.getProperties();
        props.put("mail.smtp.host", host);
        Session session = Session.getInstance(props, null);

        try {
            // Nachricht erstellen
            MimeMessage msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(from));
            InternetAddress[] address = {new InternetAddress(to)};
            msg.setRecipients(Message.RecipientType.TO, address);
            msg.setSubject(subject);

            // Erste Nachrichtenbereich erstellen
            MimeBodyPart mbp1 = new MimeBodyPart();
            mbp1.setText(inhalt);

            // Zweite Nachrichtenbereich erstellen
            MimeBodyPart mbp2 = new MimeBodyPart();

            // Anhang anfügen
            FileDataSource fds = new FileDataSource(anhang);
            mbp2.setDataHandler(new DataHandler(fds));
            mbp2.setFileName(fds.getName());

            // Multipart erstellen und alles zusammenfügen
            Multipart mp = new MimeMultipart();
            mp.addBodyPart(mbp1);
            mp.addBodyPart(mbp2);

            // Multipart zur Nachricht hinzufügen
            msg.setContent(mp);

            // Headerdaten setzen
            msg.setSentDate(new Date());

            // Nachricht versenden
            Transport.send(msg);
        } catch (MessagingException mex) {
            // Wenn das nicht funktioniert hat, soll eine Fehlermeldung erscheinen
            mex.printStackTrace();
            Exception ex = null;
            if ((ex = mex.getNextException()) != null) {
                ex.printStackTrace();
            }
        }
    }

Und hier die Frame seite alex.java
Java:
// Nachrichtverschicken
            String to = tfTo.getText();
            String from = tfFrom.getText();
            String cc = tfCC.getText();
            String bcc = tfBCC.getText();
            String inhalt = taNachricht.getText();
            String subject = tfSubject.getText();
            String anhang = "C:\\Test.txt";
            Mail.send(to, subject, inhalt, from, anhang);

Wo muss ich jetzt was genau umstellen?

- Muss ich beim Abholen von den Daten schon alles in ein Array speichern? alex.java
- Wenn 1. zutrifft, was muss dann in der mail.java passieren?
 

07alex07

Aktives Mitglied
Es wurde eigentlich schon deutlich erklärt, vielleicht brauchst du eine Pause

Java:
String[] to = {tfTo.getText()};

muss zu

Java:
String[] to = tfTo.getText().split(";");

und dann muss ich bei der übergabe bei String noch die []

und was muss ich bei
Code:
InternetAddress[] address = {new InternetAddress(to)};
noch ändern?
 

chalkbag

Bekanntes Mitglied
So wie es suinos geschrieben hatte

Java:
public static void send(String[] to, String subject, String inhalt, String from, String anhang) throws AddressException, MessagingException {
 
// [...]
 
InternetAddress[] recipients = new InternetAddress[to.length];
 
for(int i = 0; i < recipients.length; i++)
{
    recipients[i] = new InternetAddress(to[i]);
}
 
msg.setRecipients(Message.RecipientType.TO, recipients)
 

07alex07

Aktives Mitglied
Ha jetzt noch eine andere Frage:

So frage ich ab, ob eine CC auch geschickt werden soll.

Java:
if(! cc.equals("")) {
                // CC der Mail
                InternetAddress[] addressCc = new InternetAddress[cc.length];
                for(int i = 0; i < addressCc.length; i++) {
                    addressCc[i] = new InternetAddress(cc[i]);
                }
                msg.setRecipients(Message.RecipientType.CC, addressCc);
            }

Wenn ich dann aber die Mail verschicken will, und in CC keine Adresse eintrage, bekomme ich die Fehlermeldung hier:
Code:
javax.mail.internet.AddressException: Illegal address in string ``''

Muss ich das irgendwie anderes abfangen?
 

faetzminator

Gesperrter Benutzer
Täusch ich mich, oder ist [c]cc[/c] nicht ein [c]String[/c] sondern ein [c]String[][/c]? Da musst du natürlich [c]cc.length > 0[/c] verwenden. Zusätzlich wirst wahrscheinlich noch in [c]cc[0][/c] einen leeren String drin haben?
 

faetzminator

Gesperrter Benutzer
Dann hast du momentan wohl [c]cc.length == 1[/c] und [c]cc[0] == null[/c]? [c]String.split()[/c] gibt bei einem leeren String nämlich ein Array der Länge 1 zurück. Also prüf manuell, ob der String leer ist, und setz dann das Array [c]cc[/c] auf [c]null[/c] oder [c]new String[0][/c]. Bei ersterem muss natürlich dann in der Abfrage noch [c]null[/c] abgefragt werden.
 

07alex07

Aktives Mitglied
du meinst das also so?

Java:
if (cc.length == 1 && cc[0] == null) {
                cc = null;
            }
            if (cc != null) {
                // CC der Mail
                InternetAddress[] addressCc = new InternetAddress[cc.length];
                for (int i = 0; i < addressCc.length; i++) {
                    addressCc[i] = new InternetAddress(cc[i]);
                }
                msg.setRecipients(Message.RecipientType.CC, addressCc);
            }
 

faetzminator

Gesperrter Benutzer
Nö, es muss deiner Methode bereits korrekt übergeben werden. Am Besten prüfst die leere Eingabe gleich beim Erstellen des Arrays - also beim split() der Benutzereingabe.
Java:
String[] cc = null;
if (someCCs != null && !someCCs.isEmpty()) {
    cc = someCCs.split(","); // oder ; oder was auch immer...
}
 

07alex07

Aktives Mitglied
Sorry muss nochmal Streßen.

Lese ein Verzeichnis & Datei aus:
Java:
String from = "", subj = "", datei = "";
        String to = "", cc = "", bcc = "";
        File dir = new File("C:/feb/queue/");
        File[] fileList = dir.listFiles();
        ArrayList<String> filename = new ArrayList<String>();

        for (File file : fileList) {
            BufferedReader reader = new BufferedReader(new FileReader(file));
            String zeile;
            zeile = reader.readLine();
            while ((zeile = reader.readLine()) != null) {
                if(zeile.contains("TO ")) {
                    to = zeile.split("TO ")[1];
                }
                if(zeile.contains("FROM ")) {
                    from = zeile.split("FROM ")[1];
                }
                if(zeile.contains("SUBJ ")) {
                    subj = zeile.split("SUBJ ")[1];
                }
                if(zeile.contains("FILE ")) {
                    datei = zeile.split("FILE ")[1];
                }
            }
            System.out.println(from);
            System.out.println(to);
            System.out.println(subj);
            System.out.println(datei);
        }

wie muss ich jetzt die Variablen genau definieren, damit ich mehrere Empfänger usw. kriege.

hab das so versucht
String[] to = null;

Will aber nicht gehen.
 

faetzminator

Gesperrter Benutzer
Ich würde die Zeile zuerst mit einem Limit von 2 nach " " splitten. Dann hast du den Identifier (TO, FILE, ...) von den restlichen Daten getrennt. Danach kannst du die Daten je nach Fall nochmals mit ";" oder "," (oder so) splitten, und du hast dein Array.
Zumindest würde ich das so vorschlagen, wenn ich deinen Dateiinhalt in meiner Glaskugel sehe. Nein im Ernst: du solltest dir gewisse Dinge selbst überlegen und uns ansonsten wenigstens alls wesentlichen Informationen posten. Das Dateiformat ist da ganz grundlegend. Mein Beispiel basiert auf [c]TO foo@bar.com;blah@fff.net[/c].
 

07alex07

Aktives Mitglied
ja so sieht es auch aus
Code:
TO [email]foo@bar.com;blah@fff.net[/email]

Hättest du ein Beispiel, wie das aussehen könnte?
 

07alex07

Aktives Mitglied
wenn ich das so mache

Java:
while ((zeile = reader.readLine()) != null) {
                if(zeile.contains("TO ")) {
                    to = zeile.split("TO ")[1].split(";");
                }
                if(zeile.contains("FROM ")) {
                    from = zeile.split("FROM ")[1];
                }
                if(zeile.contains("SUBJ ")) {
                    subj = zeile.split("SUBJ ")[1];
                }
                if(zeile.contains("FILE ")) {
                    anhang = zeile.split("FILE ")[1];
                }
                if(zeile.contains("MSG ")) {
                    inhalt = zeile.split("MSG ")[1];
                }
}

Bekomme ich die Fehlermeldung hier
Code:
javax.mail.MessagingException: IOException while sending message;
 

faetzminator

Gesperrter Benutzer
Java:
while ((zeile = reader.readLine()) != null) {
    String[] val = zeile.split(" ", 2);
    if (val.length >= 1) {
        String code = val[0];
        if (code.equals("TO")) {
            [...]
        }
        [...]
    }
}
...
 

07alex07

Aktives Mitglied
Versteh nicht, was mit dem Code da gemacht werden soll.

So sieht meiner aus.
Java:
public static void lesen() throws FileNotFoundException, IOException, AddressException, MessagingException {
        String from = "", subj = "", anhang = "", inhalt = "C:\\Test.txt";
        String to = null;
        String[] cc = null, bcc = null;
        File dir = new File("C:/feb/queue/");
        File[] fileList = dir.listFiles();
        ArrayList<String> filename = new ArrayList<String>();

        for (File file : fileList) {
            BufferedReader reader = new BufferedReader(new FileReader(file));
            String zeile;
            while ((zeile = reader.readLine()) != null) {
                if(zeile.contains("TO ")) {
                    to = zeile.split("TO ")[1];
                }
                if(zeile.contains("FROM ")) {
                    from = zeile.split("FROM ")[1];
                }
                if(zeile.contains("SUBJ ")) {
                    subj = zeile.split("SUBJ ")[1];
                }
                if(zeile.contains("FILE ")) {
                    anhang = zeile.split("FILE ")[1];
                }
                if(zeile.contains("MSG ")) {
                    inhalt = zeile.split("MSG ")[1];
                }
            }
    }

Die Adresse könnte so in der Datei aussehen:
Code:
bla@bla.de;bla1@bla1.de;usw

Da ich dann später die Sachen übergeben will an die Methode Mail.senden, die folgendermaßen aufgebaut ist.
Java:
public static void send(String[] to, String from, String[] cc, String[] bcc, String subject, String inhalt, String anhang) throws AddressException, MessagingException {

müsste ich die String[] anders speichern
 

faetzminator

Gesperrter Benutzer
Dann versuchs wenigstens zu verstehen. Helfen könnte auch der Debugger und/oder Konsolenausgaben, welche dir sagen, was sich in den jeweiligen Variablen befinden. Und die API hast du auch noch, welche dir sagt, was welche Methodenaufrufe bewirken und allenfalls zurückgeben. Wenns an den Grundlagen (wie Schleifen etc.) liegt, solltest du dir diese zuerst aneignen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
timbeau Javax.Mail: Check this out Java Basics - Anfänger-Themen 10
T Java-Mail API Java Basics - Anfänger-Themen 11
V JavaApplet versendet keine mail Java Basics - Anfänger-Themen 8
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
StrikeTom Javax.mail frage(zu code) Java Basics - Anfänger-Themen 17
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
R Javax.mail wird nicht gefunden Java Basics - Anfänger-Themen 2
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
C wo ist mein javax.mail? Java Basics - Anfänger-Themen 2
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
L JavaMail: javax.mail wird nicht gefunden Java Basics - Anfänger-Themen 2
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
B Email versand - aber akzeptiert auch falscher Username und Passwort??? Java Basics - Anfänger-Themen 1
M Versand von Nachrichten via Socket (Delay) Java Basics - Anfänger-Themen 21
M Java Email Versand mit freenet Java Basics - Anfänger-Themen 7
G EMail-Versand funktioniert nicht Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben