JavaMail: Automatisches Email Versand (mehrere Empfänger)

Status
Nicht offen für weitere Antworten.
L

Louis2

Gast
Hallo,

also bisher habe ich ein GUI als Applet (Swing) programmiert (From/To/Subject/SMTP Server) Felder. Das Programm holt sich den Absender und SMTP Server aus einer .ini Datei, fügt sich in den Textfelder ein und sperrt diese 2 Felder mit .setEditable(false).

So nun was ich noch machen will:
1. Beim drücken von einem Button "Send Message" sollen die mails an allen Empfängern abgeschickt werden, also automatisch. Also sozusagen alle Empfänger durcharbeiten, die Liste durchgehen.
2. Falls es möglich ist, eine Art Statusbalken, wo angezeigt wird, wieviel mails bisher verschickt wurden.

So nun mein Code was bisher auch o.p läuft:
Code:
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;

public class SammelMailGUI_Swing extends JFrame 
{
    private JButton sendButton = new JButton("Send Message");
    private JLabel fromLabel = new JLabel("From: ");
    private JLabel toLabel = new JLabel("To: ");
    private JLabel hostLabel = new JLabel("SMTP Server: ");
    private JLabel subjectLabel = new JLabel("Subject: ");
    private JTextField fromField = new JTextField(40);
    private JTextField toField = new JTextField(40);
    private JTextField hostField = new JTextField(40);
    private JTextField subjectField = new JTextField(40);
    private JTextArea message = new JTextArea(40,40);
    private JScrollPane jsp = new JScrollPane(message);
    String INIEmailFrom;
    String INIHost;
    BufferedReader b; 
    String line; 
    String Mailline;
    String[] tmp = null;
    int counter=0;
    
    public SammelMailGUI_Swing() 
    {
        super("SammelMailGUI_Swing");
        
        try 
        { 
            File Data = new File("C:/Data.ini"); 
            b = new BufferedReader(new InputStreamReader(new FileInputStream(Data)));  
            while ((line = b.readLine()) != null) 
            { 
                tmp = line.split(":");  
                
                if (counter==0)
                INIEmailFrom=tmp[1];
                else if (counter==1)
                INIHost=tmp[1]; 
                    
                counter++;
            } 
                b.close(); 
        } 
        catch (IOException e) 
        { 
            System.out.println("Error during data reading"); 
        } 
        
        try 
        { 
            File MailData = new File("C:/MailSend.ini"); 
            b = new BufferedReader(new InputStreamReader(new FileInputStream(MailData)));  
            while ((Mailline = b.readLine()) != null) 
            { 
                message.append(Mailline+ " \n");
            } 
                b.close(); 
               
        } 
        catch (IOException e) 
        { 
            System.out.println("Error during data reading"); 
        } 
        
        
        Container contentPane = this.getContentPane();
        contentPane.setLayout(new BorderLayout());
        
        JPanel labels = new JPanel();
        labels.setLayout(new GridLayout(4,1));
        labels.add(hostLabel);
        
        JPanel fields = new JPanel();
        fields.setLayout(new GridLayout(4,1));
        
        hostField.setText(INIHost);
        hostField.setEditable(false);
        fields.add(hostField);
        
        labels.add(toLabel);
        fields.add(toField);
        
        fromField.setText(INIEmailFrom);
        fromField.setEditable(false);
        labels.add(fromLabel);
        fields.add(fromField);
        
        labels.add(subjectLabel);
        fields.add(subjectField);
        
        Box north = Box.createHorizontalBox();
        north.add(labels);
        north.add(fields);
        
        message.setEditable(false);
                
        contentPane.add(north, BorderLayout.NORTH);
        
        message.setFont(new Font("Monospaced", Font.PLAIN,12));
        contentPane.add(jsp,BorderLayout.CENTER);
        
        JPanel south = new JPanel();
        south.setLayout(new FlowLayout(FlowLayout.CENTER));
        south.add(sendButton);
        sendButton.addActionListener(new SendAction());
        contentPane.add(south, BorderLayout.SOUTH);
        
        this.pack();
    }
    
    class SendAction implements ActionListener
    {
        public void actionPerformed(ActionEvent evt) 
        {
            try
            {
                Properties props=new Properties();
                props.put("mail.host", hostField.getText());
                
                Session mailConnection=Session.getInstance(props,null);
                final Message msg=new MimeMessage(mailConnection);
                
                Address to=new InternetAddress(toField.getText());
                Address from=new InternetAddress(fromField.getText());
                
                msg.setContent(message.getText(), "text/plain");
                msg.setFrom(from);
                msg.setRecipient(Message.RecipientType.TO, to);
                msg.setSubject(subjectField.getText());
                
                Runnable r = new Runnable()
                {
                    public void run()
                    {
                        try
                        {
                            Transport.send(msg);
                        }
                        catch (Exception e)
                        {
                            e.printStackTrace();
                        }
                    }
                };
                Thread t = new Thread(r);
                t.start();
                
                message.setText("");
            }
            catch (Exception e)
            {
                e.printStackTrace();                
            }
        }
    }
    
    public static void main(String[] args)
    {
        SammelMailGUI_Swing client = new SammelMailGUI_Swing();
        client.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        client.show();
    } 
}

Habt Ihr Ideen, Vorschläge wie ich das ganze schaffen kann, was ich mir vorgenommen habe?
 
L

Louis2

Gast
Hat jemand eine Idee wie man die mail gleichzeitig per Knopfdruck an mehrere benutzern schickt?
Also d.h jedes mal eine Mail mit dem nächsten Empfänger in der Liste aufmachen und sofort schicken, wie auch immer...
 

Peterle

Mitglied
Versuche es mit einer Thread-Lösung.

Jede Email Adresse, die du veschicken willst, startet einen eigenen Thread, der die Email versendet.

Steuer dies über eine Schleife, wenn du die Email in einem String[] hast:

Code:
for (int i = 0; i <= Liste[].length(); i++){
    ThreadedMailSend( deine Parameter );
}
Zum Thema Threads findest du hier im Forum einige gute Beiträge, aber auch in einigen Tutorien gut Lösungen.


Grüße
Peterle
 

DP

Top Contributor
kannst auch alle auf einmal als bcc reinsetzen und eine mail losschicken... kommt natürlich auf den inhalt der mail an...

msg.setRecipient(Message.RecipientType.BCC, to);
 
L

Louis2

Gast
DP hat gesagt.:
kannst auch alle auf einmal als bcc reinsetzen und eine mail losschicken... kommt natürlich auf den inhalt der mail an...

msg.setRecipient(Message.RecipientType.BCC, to);

Das ist ja das schwierige, die mails sind unterschiedlich, jeder Empfänger soll eine andere mit anderem Subject, Inhalt usw... kriegen ;-)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Javamail with authentication Netzwerkprogrammierung 9
D JavaMail: HTML Code einer Mail Netzwerkprogrammierung 9
D JavaMail - Mailsabrufen Problem (imap) Netzwerkprogrammierung 12
H JavaMail STARTTLS Netzwerkprogrammierung 6
S javamail und filterung bekannter nachrichten Netzwerkprogrammierung 3
T JavaMail POP Zugriff zeigt nicht alle Emails Netzwerkprogrammierung 2
S Mehrere Attachments mit JavaMail API auslesen Netzwerkprogrammierung 3
R JavaMail: Wie bekommt man rückgabecodes vom Server? Netzwerkprogrammierung 3
F Mehrere Attachments mit JavaMail API Netzwerkprogrammierung 2
H HTML-Mails mit JavaMail API Netzwerkprogrammierung 3
A JavaMail Problem - Nachricht wird nicht versendet ? Netzwerkprogrammierung 9
G JavaMail subFolders Netzwerkprogrammierung 6
S Voreinstellungen für JavaMail Netzwerkprogrammierung 2
D JavaMail Kontaktformular Umlaute Problem Netzwerkprogrammierung 2
conan2 JavaMail Netzwerkprogrammierung 10
R Problem beim Senden von Emails (Javamail) Netzwerkprogrammierung 2
J JavaMail Exception bei senden an anderen Server. Netzwerkprogrammierung 8
J JavaMail-Problem Netzwerkprogrammierung 5
G Fragen/Probleme mit JavaMail Netzwerkprogrammierung 2
G JavaMail und Session/Message Problem Netzwerkprogrammierung 2
L JavaMail: Mail in Posteingang aber nicht in Versendet Netzwerkprogrammierung 2
L JavaMail: Versenden von mails funktioniert nicht Netzwerkprogrammierung 7
V JavaMail API Problem Netzwerkprogrammierung 10
P mit javamail gmx postfach prüfen Netzwerkprogrammierung 8
T Mit JavaMail API Faxe versenden? Netzwerkprogrammierung 5
A Automatisches Update beim Starten Netzwerkprogrammierung 1
turmaline HTTP OAuth Automatisches Anmelden Netzwerkprogrammierung 2
N Automatisches einloggen Netzwerkprogrammierung 17
R Email mit Java API Netzwerkprogrammierung 1
L Email versenden mit Java funktioniert nicht, Fehlermeldungen: MessagingException & SocketException Netzwerkprogrammierung 10
S Email via Googlemail versenden Netzwerkprogrammierung 17
D Content einer email in sql-datenbank speichern Netzwerkprogrammierung 9
I Email mit kyrillischen Zeichen in der Betreffzeile Netzwerkprogrammierung 7
L Attachment wird nicht angezeigt in der Email Netzwerkprogrammierung 3
O email verschicken Netzwerkprogrammierung 8
W Automatisch Email senden Netzwerkprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben