2016-07-20 8 views
-3

Ich arbeite an einem Projekt, wo ich E-Mail-Adressen aus der Datenbank abrufen muss und dann eine E-Mail an sie senden. Ich habe diese E-Mail-Adressen in Arraylist abgerufen. Wie folgt:E-Mail an arraylist senden aus der Datenbank

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.ArrayList; 
import java.util.List; 

import javaapplication1.Person; 

public class ABC { 
    public static void main(String[] args) throws SQLException { 
     ArrayList<Person> personlist = new ArrayList<Person>(); 
     //List<Person> personlist = new List<Person>(); 
     try { 


      Class.forName("oracle.jdbc.driver.OracleDriver"); 
      Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","gsjsc","gsjschanna"); 
      Statement st=con.createStatement(); 

      ResultSet srs = st.executeQuery("SELECT * FROM person2"); 
      while (srs.next()) { 
       Person person = new Person(); 
       person.setName(srs.getString("name")); 
       person.setJobtitle(srs.getString("jobtitle")); 
       // person.setFrequentflyer(srs.getInt("frequentflyer")); 
       personlist.add(person); 
      } 

      System.out.println(personlist.size()); 
      for (int a=0;a<personlist.size();a++) 
      { 
      System.out.println(personlist.get(a).getName()); 
      System.out.println(personlist.get(a).getJobtitle()); 
      // System.out.println(personlist.get(2).getName()); 
      // System.out.println(personlist.get(3).getName()); 
      } 
      //System.out.println(personlist.get(4)); 

     //System.out.println(namelist.); 
     } catch (Exception e) { 
      System.err.println("Got an exception! "); 
      System.err.println(e.getMessage()); 
     } 
    } 
} 

Person.java: enthält alle Setter und Getters.

EDIT

Jetzt muss ich in der Arraylist von Objekt Person abgerufen E-Mails an diese E-Mail-Adressen senden. Ich habe einen Code bekommt für E-Mails an mehr Empfänger in Arraylist wie folgt zu senden:

package javaapplication1; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Properties; 
import java.util.Scanner; 
import javax.mail.Address; 
import javax.mail.Authenticator; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.AddressException; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 

public class SendEmailToGroupDemo { 

public static void main(String[] args) { 

    // Create a SendEmail object and call start 
    // method to send a mail in Java. 
    SendEmailToGroupDemo sendEmailToGroup = new SendEmailToGroupDemo(); 
    sendEmailToGroup.start(); 

} 

private void start() { 

    // For establishment of email client with 
    // Google's gmail use below properties. 
    // For TLS Connection use below properties 
    // Create a Properties object 
    Properties props = new Properties(); 

    // these properties are required 
    // providing smtp auth property to true 
    props.put("mail.smtp.auth", "true"); 
    // providing tls enability 
    props.put("mail.smtp.starttls.enable", "true"); 
    // providing the smtp host i.e gmail.com 
    props.put("mail.smtp.host", "smtp.gmail.com"); 
    // providing smtp port as 587 
    props.put("mail.smtp.port", "587"); 

    // For SSL Connection use below properties 

    /*props.put("mail.smtp.host", "smtp.gmail.com"); 
    props.put("mail.smtp.socketFactory.port", "465"); 
    props.put("mail.smtp.socketFactory.class", 
    "javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.port", "465");*/ 

    // Create Scanner object to take necessary 
    // values from the user. 
    Scanner scanner = new Scanner(System.in); 

    System.out.println("Please provide your Username for Authentication ..."); 
    final String Username = scanner.next(); 

    System.out.println("Please provide your Password for Authentication ..."); 
    final String Password = scanner.next(); 

    System.out.println("Please provide Email Address from which you want to send Email ..."); 
    final String fromEmailAddress = scanner.next(); 

    System.out.println("Please provide Email Addresses to which you want to send Email ..."); 
    System.out.println("If you are done type : Done or done"); 

    // ArrayLists to store email addresses entered by user 
    ArrayList< String> emails = (ArrayList<String>) getEmails(); 

    System.out.println("Please provide Subject for your Email ... "); 
    final String subject = scanner.next(); 

    System.out.println("Please provide Text Message for your Email ... "); 
    final String textMessage = scanner.next(); 

    // Create a Session object based on the properties and 
    // Authenticator object 
    Session session = Session.getDefaultInstance(props, 
    new LoginAuthenticator(Username,Password)); 

    try { 

    // Create a Message object using the session created above 
    Message message = new MimeMessage(session); 

    // setting email address to Message from where message is being sent 
    message.setFrom(new InternetAddress(fromEmailAddress)); 

    // setting the email addressess to which user wants to send message 
    message.setRecipients(Message.RecipientType.BCC, getEmailsList(emails)); 

    // setting the subject for the email 
    message.setSubject(subject); 

    // setting the text message which user wants to send to recipients 
    message.setText(textMessage); 

    // Using the Transport class send() method to send message 
    Transport.send(message); 

    System.out.println("\nYour Message delivered successfully ...."); 

    } catch (MessagingException e) { 

    throw new RuntimeException(e); 

    } 
} 

// This method takes a list of email addresses and 
// returns back an array of Address by looping the 
// list one by one and storing it into Address[] 
private Address[] getEmailsList(ArrayList<String> emails) { 

    Address[] emaiAddresses = new Address[emails.size()]; 

    for (int i =0;i < emails.size();i++) { 
    try { 
    emaiAddresses[i] = new InternetAddress(emails.get(i)); 
    } 
    catch (AddressException e) { 

    e.printStackTrace(); 
    } 
    } 
    return emaiAddresses; 
} 

// This method prompts user for email group to which he 
// wants to send message 
public List<String> getEmails() { 
    ArrayList<String> emails = new ArrayList<String>(); 

    int counter = 1; 
    String address = ""; 
    Scanner scanner = new Scanner(System.in); 

    // looping inifinitely times as long as user enters 
    // emails one by one 
    // the while loop breaks when user types done and 
    // press enter. 
    while(true) { 

    System.out.println("Enter E-Mail : " + counter); 
    address = scanner.next(); 

    if(address.equalsIgnoreCase("Done")){ 
    break; 
    } 
    else { 
    emails.add(address); 
    counter++; 
    } 
    } 

    return emails; 
} 
} 

// Creating a class for Username and Password authentication 
// provided by the user. 
class LoginAuthenticator extends Authenticator { 
PasswordAuthentication authentication = null; 

public LoginAuthenticator(String username, String password) { 
    authentication = new PasswordAuthentication(username,password); 
} 

@Override 
protected PasswordAuthentication getPasswordAuthentication() { 
    return authentication; 
} 
}  

Dies ist ein ganz anderer Code. Aber funktioniert, um eine E-Mail an eine Gruppe von Menschen zu senden. Aber das Problem ist, dass wir die E-Mail-Adressen manuell eingeben müssen. Während ich die E-Mails an die Adressen senden möchte, die aus der Klasse ABC abgerufen werden. Jemand kann mir einen integrierten Code (für beide Klassen) geben, das wäre großartig. Dies sollte ein List von Person in einem ArrayList von String mit den E-Mail von allen Personen konvertiert

+3

* Hinweis: Bitte mit einem vollständigen Arbeitscode beantworten, Frist ist in der Nähe. * - lol, viel Glück mit dieser Knospe – Idos

+1

Ihre Frage und Ihr Code stimmen nicht überein. Wo wird die E-Mail im Objekt Person festgelegt? Ihr anderer Codecode ruft die Liste der E-Mails von der Konsole ab und scheint keine Verbindung mit dem Abrufcode für die Personenliste zu haben. –

+0

'Bitte antworten Sie mit einem vollständigen Arbeitscode, Deadline ist in der Nähe' - Ich bearbeite diese Art von Müll normalerweise, aber in Ihrem Fall werde ich es lassen, damit jeder es sehen kann. Die blanke Wange davon ... [lies das] (http://meta.stackoverflow.com/q/326569/472495). – halfer

Antwort

0

.

public ArrayList<String> getEmailsFromPersons(List<Person> persons) { 
    ArrayList<String> emails = new ArrayList<String>(); 
    for(Person person : persons) { 
     String email = person.getEmail(); 
     if(email != null && !email.trim().isEmpty()) { 
      emails.add(email); 
     } 
    } 
    return emails; 
} 
0

Ich habe diese E-Mail-Adressen in Arraylist abgerufen. Gefällt mir:

Ich sehe keine E-Mails im Person-Objekt. Aber würde immer noch versuchen, Ihre Frage zu beantworten, von dem, was ich nach Ihrer Bearbeitung verstanden habe. Unten Code sollte Ihren Bedürfnissen entsprechen (Bitte beachten Sie keine Fehler, wie ich es ohne Überprüfung schreibe):

public class ABC { 
public static void main(String[] args) throws SQLException { 
    ArrayList<Person> personlist = new ArrayList<Person>(); 
    // Creating a separate list of emails for Persons 
    List<String> personEmails = new ArrayList<String>(); 

    //List<Person> personlist = new List<Person>(); 
    try { 


     Class.forName("oracle.jdbc.driver.OracleDriver"); 
     Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","gsjsc","gsjschanna"); 
     Statement st=con.createStatement(); 

     ResultSet srs = st.executeQuery("SELECT * FROM person2"); 
     String email = ""; 
     while (srs.next()) { 
      Person person = new Person(); 
      person.setName(srs.getString("name")); 
      person.setJobtitle(srs.getString("jobtitle")); 
      // person.setFrequentflyer(srs.getInt("frequentflyer")); 
      // I am assuming you would be setting email in person like this 
      email = srs.getString("email"); 
      person.setEmail(email); 
      // Add the email simultaneously to the separate list 
      personEmails.add(email); 
      personlist.add(person); 
     } 

     System.out.println(personlist.size()); 
     for (int a=0;a<personlist.size();a++) 
     { 
     System.out.println(personlist.get(a).getName()); 
     System.out.println(personlist.get(a).getJobtitle()); 
     // System.out.println(personlist.get(2).getName()); 
     // System.out.println(personlist.get(3).getName()); 
     } 
     //System.out.println(personlist.get(4)); 

    //System.out.println(namelist.); 
    } catch (Exception e) { 
     System.err.println("Got an exception! "); 
     System.err.println(e.getMessage()); 
    } 


    // call the email sender method of yours with the newly created list 
    SendEmailToGroupDemo sendEmailToGroup = new SendEmailToGroupDemo(); 
    // Obviously, make that start() method public having parameter of type List<String> instead of calling getEmails() within it 
    sendEmailToGroup.start(personEmails); 
    // Very little remains to be done, I hope you can figure it out easily 
} 
} 
+0

Danke Bhai. Haben Sie alles erwähnt, aber Fehler in 'message.setRecipients (Message.RecipientType.BCC, getEmailsList (emails)); 'als E-Mails können nicht gelöst werden. Wäre sehr hilfreich, wenn Sie den vollständigen Code –

+0

posten könnten, geben Sie bitte Ihren aktualisierten Code ein. –