# Programm von Main Methode starten



## erdmulch (2. Mrz 2011)

Hallo zusammen,

ich habe folgedes Problem:
das unten stehende Programm kann mails versenden, was auch funktioniert! :-D
nun möchte ich das Programm von einer anderen Main Methode aus starten....
was muss ich abändern dass dies geht?

danke im voraus


```
//MAIN Methode

public class MyAppVorapp
{

        public static void main(String[] args)
        {
        
        	
        	Mail  m = new Mail();
        	
        
        }

}
```


```
//Eigentliches Programm

import java.io.FileReader;
import java.io.IOException;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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 Mail 
{
    
    public void sendMail(String smtpHost,String username,String password,String senderAddress,String recipientsAddress,String subject,String text )
{
        MailAuthenticator auth = new MailAuthenticator(username, password);
               Properties properties = new Properties();
               properties.put("mail.smtp.host", smtpHost);
               properties.put("mail.smtp.auth", "true");
               Session session = Session.getDefaultInstance(properties, auth);
 
        try {    	
        	
        	// create a message
    	    MimeMessage msg = new MimeMessage(session);
    	    msg.setFrom(new InternetAddress(senderAddress));
    	    InternetAddress[] address = {new InternetAddress(recipientsAddress)};
    	    msg.setRecipients(Message.RecipientType.TO, address);
    	    msg.setSubject(subject);
     
    	    // create and fill the first message part
    	    MimeBodyPart mbp1 = new MimeBodyPart();
    	    mbp1.setText(text);
     
    	    // create the second message part
    	    MimeBodyPart mbp2 = new MimeBodyPart();
        	    
            // attach the file to the message
       	    FileDataSource fds = new FileDataSource("C:\\Dokumente und Einstellungen\\halm_a\\Desktop\\Programme\\Diplomarbeit\\Protokoll.txt");
    	    mbp2.setDataHandler(new DataHandler(fds));
    	    mbp2.setFileName(fds.getName());
     
    	    // create the Multipart and add its parts to it
    	    Multipart mp = new MimeMultipart();
    	    mp.addBodyPart(mbp1);
    	    mp.addBodyPart(mbp2);
     
    	    // add the Multipart to the message
    	    msg.setContent(mp);
     
    	    // set the Date: header
    	    msg.setSentDate(new Date());
     
    	    // send the message
    	    Transport.send(msg);
     

 
        }
        catch (Exception e) 
        {
            e.printStackTrace( );
        }
    }
    
    class MailAuthenticator extends Authenticator
    {
 
       
        private final String user;
        private final String password;
 
       
        public MailAuthenticator(String user, String password) 
        {
            this.user = user;
            this.password = password;
        }
 
        
        protected PasswordAuthentication getPasswordAuthentication() 
        {
            return new PasswordAuthentication(this.user, this.password);
        }
    }
    
    public static void main(String[] args) 
    {
 
    	
    	try
        {
          String emailadresse = "";
          int x = 0;
          FileReader fr = new FileReader("emailadresse.txt");
          while ((x = fr.read()) != -1)
        	  emailadresse = emailadresse + (char)x;
          fr.close();
          System.out.println(emailadresse);
          
          String username = "user";
          String password = "geheim";
          String senderAddress = "test@web.de";//someone@web.de
          String recipientsAddress = emailadresse; //somereceiver@web.de
          String subject = "Java forum";
          String smtpHost = "smtp.web.de";
          
          String text = "Lieber Forum Besucher,";

          
          new Mail().sendMail(smtpHost, username, password, senderAddress, recipientsAddress, subject, text);
          
        }
        catch(IOException ioex)
        {
          System.out.println(ioex.getMessage());
        }

         
    }
}
```


----------



## Onkel Hatti (2. Mrz 2011)

Über


```
m.sendmail(smtpHost, username, password, senderAddress, recipientsAddress, subject, text);
```

Das wird natürlich so nicht klappen, zunächst müssen natürlich die ganzen Parameter
noch ermittelt werden.
Die ermittelt bislang die "alte" main-Methode.

Hatti


----------



## Gonzo17 (2. Mrz 2011)

Ganz dreckig könnte man natürlich einfach 
	
	
	
	





```
Mail.main(null)
```
 aufrufen. Aber davon würde ich dir abraten, generell würde ich auch davon abraten in deiner Mail-Klasse dann noch eine main-Methode zu haben.


----------



## erdmulch (2. Mrz 2011)

ja, da habt ihr recht
weiß leider nicht wie man so was macht...könnt ihr mir da weiterhelfen?
die Mainmethode in der Klasse Mail muss ich natürlich entfernen!!!


----------



## Gonzo17 (2. Mrz 2011)

Na was du zum Beispiel erstmal ganz einfach machen könntest wäre den Inhalt der main-Methode in der Mail-Klasse in die main-Methode der anderen Klasse zu kopieren. Dann passt du noch den Aufruf an (so wie Onkel Hatti schrieb) und dann hast du zumindest mal die gleiche Funktionsweise wie vorher, nut mit dem Unterschied, dass jetzt eine andere Klasse die Mail-Klasse aufruft.

Was genau willst du denn dann noch machen?


----------



## erdmulch (2. Mrz 2011)

ok, das wurde auch funktionieren leider sieht dies sehr unschön aus da ich in der Mainmethode noch mehr Klassen aufrufe...


```
public class MyAppVorapp
{

        public static void main(String[] args)
        {
        
        	
        	Mail m = new Mail();
                Test t = new Test();
                Test1 t1 = new Test1()
        	
        	       
        }

}
```

was muss ich denn in meiner Mail Klasse abändern dass ich sie so wie oben aufrufen kann?


----------



## despikyxd (2. Mrz 2011)

Layer-8-FAIL

sieh dir die MAIN der Mail.java mal an ... die macht nichts weiter als aus irgend einem txt-file irgendwas einlesen ... dann variablen setzen und dann über einer dreckige instanzierung die mail-methode aufzurufen ...

generell ist die mail-methode schlecht designed

man könnte die sendMail methode auch static machen ... dann müsste man keine Mail-Instanz erzeugen sondern könnte dierekt über Mail.sendMail() *oder nach nem import static direkt über sendMail()* ne mail schreiben ...

wenn du jetzt also deine Mail.java aus ner anderen klasse verwenden willst mach nichts weiter als ne instanz zu erzeugen und dann auf diese die sendMail() methode mit entsprechenden parametern anzuwenden ...
oder wie gesagt die änderung mit static ...

so schwer is das doch nu wirklich nich ... wird sogar so änlich in der java-insel erklärt


ps : scheiß design alles in de MAIN zu klatschen ... typischer informatiker-1-semester-fail der dozenten ...
generell sollte man in der main ne selbst-instanzierung aufrufen und dann die entsprechende methode aufrufen ... genau wie mans von außen machen würde ... aber das is der grund warum ich nie n informatik kurs belegen würde ... weil ich nur fehler und schlechte noten bekommen würde eben weil ichs NICHT in die main schreibe sondern mich in diesem punkt mal n bissl an die konventionen halte @ HoaX ... nur ums dir mal zu geben


----------



## erdmulch (2. Mrz 2011)

sorry, aber ich hab kein Plan wie so was gehen soll
kannst du es mir kurz umschreiben wenn es nicht allzu schwer ist?

danke im voraus


----------



## Shulyn (2. Mrz 2011)

eine schnelle und einfache lösung ist :

[Java]
//Eigentliches Programm

import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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 Mail {
    private String smtpHost;
    private String username;
    private String password;
    private String senderAddress;
    private String recipientsAddress;
    private String subject;
    private String text;

    public Mail(String smtpHost, String username, String password, String senderAddress, String recipientsAddress, String subject, String text) {
        super();
        this.smtpHost = smtpHost;
        this.username = username;
        this.password = password;
        this.senderAddress = senderAddress;
        this.recipientsAddress = recipientsAddress;
        this.subject = subject;
        this.text = text;
    }

    public void sendMail() {

        MailAuthenticator auth = new MailAuthenticator(username, password);
        Properties properties = new Properties();
        properties.put("mail.smtp.host", smtpHost);
        properties.put("mail.smtp.auth", "true");
        Session session = Session.getDefaultInstance(properties, auth);

        try {

            // create a message
            MimeMessage msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(senderAddress));
            InternetAddress[] address = { new InternetAddress(recipientsAddress) };
            msg.setRecipients(Message.RecipientType.TO, address);
            msg.setSubject(subject);

            // create and fill the first message part
            MimeBodyPart mbp1 = new MimeBodyPart();
            mbp1.setText(text);

            // create the second message part
            MimeBodyPart mbp2 = new MimeBodyPart();

            // attach the file to the message
            // ganz böse. aber naja ^^
            FileDataSource fds = new FileDataSource("C:\\Dokumente und Einstellungen\\halm_a\\Desktop\\Programme\\Diplomarbeit\\Protokoll.txt");
            mbp2.setDataHandler(new DataHandler(fds));
            mbp2.setFileName(fds.getName());

            // create the Multipart and add its parts to it
            Multipart mp = new MimeMultipart();
            mp.addBodyPart(mbp1);
            mp.addBodyPart(mbp2);

            // add the Multipart to the message
            msg.setContent(mp);

            // set the Date: header
            msg.setSentDate(new Date());

            // send the message
            Transport.send(msg);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    class MailAuthenticator extends Authenticator {

        private final String user;
        private final String password;

        public MailAuthenticator(String user, String password) {
            this.user = user;
            this.password = password;
        }

        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(this.user, this.password);
        }
    }

}
[/Java]


und hier dann deine main in einer eigenen class.
[Java]
import java.io.FileReader;
import java.io.IOException;

public class MyClass {

    public static void main(String[] args) {

        String emailadresse = "";
        try {
            emailadresse = readMailAdress();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        String username = "user";
        String password = "geheim";
        String senderAddress = "test@web.de";// someone@web.de
        String recipientsAddress = emailadresse ; // somereceiver@web.de
        String subject = "Java forum";
        String smtpHost = "smtp.web.de";
        String text = "Lieber Forum Besucher,";

        Mail myMail = new Mail(smtpHost, username, password, senderAddress, recipientsAddress, subject, text);
        myMail.sendMail();
    }

    private static String readMailAdress() throws IOException {

        String emailadressen = "";
        int x = 0;
        FileReader fr = new FileReader("emailadresse.txt");
        while ((x = fr.read()) != -1) {
            emailadressen = emailadressen + (char) x;
        }
        fr.close();

        System.out.println(emailadressen);

        return emailadressen;

    }

}
[/Java]

ist nicht schön, aber so oder ähnlich könnte man es schreiben. wie gesagt dort ist noch viel platz für verbesserungen..


----------



## erdmulch (2. Mrz 2011)

Danke, aber wie du selber sagt sieht es sehr unschön aus!
ich versuche es mit der static methode allerdings bisher ohne erfolg
vielleicht hast du mehr Ahnung als ich und kannst mir helfen

danke


----------

