package javacodebook.misc.mail_attach; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; import java.util.Date; import java.util.Properties; import java.io.*; /** * Diese Klasse dient zum Versenden einer einfachen Mail. Die Mail hat ein * Attachment, kann aber nicht an Personen im CC oder BCC versendet werden. */ public class AttachmentMailSender { // Die Daten, die zum Versand eine Mail benötigt werden. String recipient = null; String sender = null; String subject = null; String text = null; String host = null; File attachment = null; public AttachmentMailSender() { } public void setHost(String host) { this.host = host; } public void setRecipient(String recipient) { this.recipient = recipient; } public void setSender(String sender) { this.sender = sender; } public void setSubject(String subject) { this.subject = subject; } public void setText(String text) { this.text = text; } public void setAttachment(File attachment) { this.attachment = attachment; } /** * Versendet die Nachricht. Treten dabei Probleme auf, werden diese in Form * einer Exception an die aufrufende Instanz weitergeleitet. */ public void sendMessage() throws AddressException, MessagingException { // Der SMTP-Host, über den die Mails gesendet werden, wird in der Liste // der Porperties angegeben. Properties props = new Properties(); props.put("mail.smtp.host", host); // Es wird eine Mail-Session angelegt. Über diese Session erfolgt der // Versand. Session session = Session.getDefaultInstance(props, null); // Nachricht erzeugen, Adressat, Absender und Betreff angeben. MimeMessage msg = new MimeMessage(session); msg.setFrom(new InternetAddress(sender)); InternetAddress[] address = {new InternetAddress(recipient)}; msg.setRecipients(Message.RecipientType.TO, address); msg.setSubject(subject); msg.setSentDate(new Date()); if (attachment != null) { // Der Text als erster Part MimeBodyPart mbp1 = new MimeBodyPart(); mbp1.setText(text); // Das Attachment als zweiter Part MimeBodyPart mbp2 = new MimeBodyPart(); FileDataSource fds = new FileDataSource(attachment); mbp2.setDataHandler(new DataHandler(fds)); mbp2.setFileName(fds.getName()); // Die beiden Teile als Multipart zusammenfügen Multipart mp = new MimeMultipart(); mp.addBodyPart(mbp1); mp.addBodyPart(mbp2); // Den Multipart an die Nachricht hängen msg.setContent(mp); } else msg.setText(text); // Die Nachricht versenden. Transport.send(msg); } } --- Neue Klasse --- package javacodebook.misc.mail_attach; import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.io.File; public class MailSendFrame extends JFrame implements ActionListener { public static void main(String []args) { (new MailSendFrame()).show(); } public MailSendFrame() { super(); initComponents(); } /** * Das GUI-Layout erzeugen */ private void initComponents() { buttons = new JPanel(); send = new JButton("Senden"); cancel = new JButton("Abbrechen"); main = new JPanel(); labelHost = new JLabel("SMTP-Host:"); labelSender = new JLabel("Absender:"); labelRecipient = new JLabel("Empf\u00e4nger:"); labelSubject = new JLabel("Betreff:"); labelAttachment = new JLabel("Attachment:"); inputHost = new JTextField(); inputSender = new JTextField(); inputRecipient = new JTextField(); inputSubject = new JTextField(); inputAttachment = new JTextField(); inputText = new JTextArea(); scrollText = new JScrollPane(); buttonAttachment = new JButton("..."); main.setLayout(new GridBagLayout()); GridBagConstraints gridBagConstraints; gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.insets = new Insets(2, 5, 3, 5); gridBagConstraints.anchor = GridBagConstraints.WEST; main.add(labelHost, gridBagConstraints); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.insets = new Insets(2, 5, 3, 5); gridBagConstraints.anchor = GridBagConstraints.WEST; main.add(labelSender, gridBagConstraints); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.insets = new Insets(2, 5, 3, 5); gridBagConstraints.anchor = GridBagConstraints.WEST; main.add(labelRecipient, gridBagConstraints); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.insets = new Insets(2, 5, 3, 5); gridBagConstraints.anchor = GridBagConstraints.WEST; main.add(labelSubject, gridBagConstraints); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.insets = new Insets(2, 5, 3, 5); gridBagConstraints.anchor = GridBagConstraints.WEST; main.add(labelAttachment, gridBagConstraints); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new Insets(2, 0, 3, 5); gridBagConstraints.anchor = GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; main.add(inputHost, gridBagConstraints); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new Insets(2, 0, 3, 5); gridBagConstraints.anchor = GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; main.add(inputSender, gridBagConstraints); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 2; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new Insets(2, 0, 3, 5); gridBagConstraints.anchor = GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; main.add(inputRecipient, gridBagConstraints); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 3; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new Insets(2, 0, 3, 5); gridBagConstraints.anchor = GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; main.add(inputSubject, gridBagConstraints); inputAttachment.setEditable(false); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 4; gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new Insets(2, 0, 3, 5); gridBagConstraints.anchor = GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; main.add(inputAttachment, gridBagConstraints); buttonAttachment.setActionCommand("attachment"); buttonAttachment.addActionListener(this); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 4; gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new Insets(2, 0, 3, 5); gridBagConstraints.anchor = GridBagConstraints.WEST; main.add(buttonAttachment, gridBagConstraints); inputText.setLineWrap(true); inputText.setWrapStyleWord(true); inputText.setColumns(40); inputText.setRows(10); scrollText.setViewportView(inputText); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.gridwidth = 3; gridBagConstraints.fill = GridBagConstraints.BOTH; gridBagConstraints.insets = new Insets(0, 5, 0, 5); gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; main.add(scrollText, gridBagConstraints); setTitle("Neue Nachricht"); send.setMnemonic('S'); send.setActionCommand("send"); send.addActionListener(this); buttons.add(send); cancel.setMnemonic('A'); cancel.setActionCommand("cancel"); cancel.addActionListener(this); buttons.add(cancel); getContentPane().add(buttons, BorderLayout.SOUTH); getContentPane().add(main, BorderLayout.CENTER); pack(); } /** * Vesenden der Mail, wenn der Benutzer den "Senden"-Button gedrückt hat, * bzw. Beenden des Programmes, wenn er "Abbrechen" gedrückt hat. */ public void actionPerformed(ActionEvent evt) { if (evt.getActionCommand().equals("send")) { AttachmentMailSender ams = new AttachmentMailSender(); ams.setHost(inputHost.getText()); ams.setRecipient(inputRecipient.getText()); ams.setSender(inputSender.getText()); ams.setSubject(inputSubject.getText()); ams.setText(inputText.getText()); ams.setAttachment(attachment); try { ams.sendMessage(); System.exit(0); } catch (Exception e) { JOptionPane.showMessageDialog( this, "Mail konnte nicht versendet werden!\n" + "Fehler: " + e.getMessage(), "Fehler beim Versenden", JOptionPane.ERROR_MESSAGE ); } } else if (evt.getActionCommand().equals("attachment")) { try { JFileChooser chooser = new JFileChooser(); int returnVal = chooser.showOpenDialog(this); if(returnVal == JFileChooser.APPROVE_OPTION) { attachment = chooser.getSelectedFile(); inputAttachment.setText(attachment.getName()); } } catch (Exception e) {} } else System.exit(0); } // Variablendeklaration private JButton send; private JButton cancel; private JPanel buttons; private JPanel main; private JTextField inputSender; private JTextField inputRecipient; private JTextField inputSubject; private JTextField inputHost; private JTextField inputAttachment; private JScrollPane scrollText; private JTextArea inputText; private JLabel labelHost; private JLabel labelSubject; private JLabel labelSender; private JLabel labelRecipient; private JLabel labelAttachment; private JButton buttonAttachment; private File attachment; }