2017-05-14 42 views
0

我正在編寫一個代碼,用於以連續循環的方式將多個發件人的電子郵件發送給一個收件人。我要讀的發件人csv文件EMAILID的,我已經寫了代碼raeding如下:調用一個將csv文件讀入servlet的類方法

public class ReadFile { 

    CsvReader senders; 

    public CsvReader read(){ 

     try { 
      senders = new CsvReader("C:/Users/D/Documents/Senderlist.csv"); 
      senders.readHeaders(); 

      while (senders.readRecord()) 
      { 
       String SenderID = senders.get("SenderID"); 
       String ReceiverID = senders.get("ReceiverID"); 

       // perform program logic here 
       System.out.println(SenderID + " : " + ReceiverID); 
      } 

      senders.close(); 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     ArrayList<String> al=new ArrayList<String>(); 
     al.add("senders"); 
     //traversing list through iterator 
     Iterator itr=al.iterator(); 

     while(itr.hasNext()){ 
      System.out.println(itr.next()); 
     } 
     return senders; 

    } 

} 

現在我該如何調用這個方法在我的servlet讀取和連續循環發送電子郵件,servlet的是如下:

public class MailController extends HttpServlet { 

    private static final long serialVersionUID = 1L; 
    private String ExchangeIP; 
    private String port; 

    public MailController() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    public void init() { 
     // reads SMTP server setting from web.xml file 
     ServletContext context = getServletContext(); 
     ExchangeIP = context.getInitParameter("ExchangeIP"); 
     port = context.getInitParameter("port"); 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     doPost(request, response); 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // read from field 
     List<File> uploadedFiles= saveUploadedFiles(request); 
     String sender=request.getParameter("sender");// reading from the form page 
     String recipient=request.getParameter("recipient"); 
     String subject=request.getParameter("subject"); 
     String content=request.getParameter("content"); 
     String resultMessage = ""; 

     try { 
      EmailUtility.sendEmail(ExchangeIP, port,user, recipient, subject, content, uploadedFiles); 
     resultMessage = "The e-mail has been sent successfully"; 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
      resultMessage = "There were an error: " + ex.getMessage(); 
     } finally { 
      //deleteUploadFiles(uploadedFiles); 
      request.setAttribute("Message", resultMessage); 
    getServletContext().getRequestDispatcher("/Result.jsp").forward(request, response); 
     } 

} 
+0

你在上傳類似csv文件到servlet的東西嗎?或者只是試圖調用servlet中的消息發送過程?你的'saveUploadedFiles(request);'在這裏做什麼? –

+0

這是用於上傳附件..我沒有顯示在servlet附件的代碼在這裏..我有發件人電子郵件ID存儲在CSV文件現在我想使用該senderlist發送電子郵件逐一循環到單個收件人。所以我寫了這個Readfile類來讀取上面顯示的csv文件,我正面臨的prblm是如何在servlet類中調用該讀取方法以及如何應用循環發送電子郵件..(我正在開發Java開發。) – Dip

回答

0

如果你唯一擔心的是讀取CSV文件,重複你在Servlet該文件中讀取那麼你爲什麼不只需調用servlet中read()方法的項目?並改變read()方法這樣

public List<String> getSenderEmails() { 
     CsvReader senders = new CsvReader("C:/Users/D/Documents/Senderlist.csv"); 
     senders.readHeaders(); 

     List<String> senderEmails = new ArrayList<>(); 

     while (senders.readRecord()) { 
      String senderID = senders.get("SenderID"); 
      String receiverID = senders.get("ReceiverID"); 

      // perform program logic here 
      System.out.println(senderID + " : " + receiverID); 
      senderEmails.add(senderID); 
     } 

     return senderEmails; 
} 

NB:

  • 我不知道什麼是您的CsvReader在做什麼。但假設它是一種圖書館或實用程序。所以必要的需要Exception handeling。
  • 但我建議的主要想法是,而不是返回CsvReader或類似的東西,只是返回您只是關心的電子郵件地址列表。

接下來的事情是,你可以從servlet呼叫getSenderEmails()和遍歷它來發送電子郵件

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // read from field 
    List<File> uploadedFiles = saveUploadedFiles(request); 
    String sender = request.getParameter("sender");// reading from the form page 
    String recipient = request.getParameter("recipient"); 
    String subject = request.getParameter("subject"); 
    String content = request.getParameter("content"); 
    String resultMessage = "";  

    try { 
     List<String> senderEmails = ReadFile.getSenderEmails(); 
     for (String user : senderEmails) { 
      EmailUtility.sendEmail(ExchangeIP, port, user, recipient, subject, content, uploadedFiles); 
     } 
     resultMessage = "The e-mail has been sent successfully"; 
    } catch (Exception ex) { 
    } finally { 
    } 
} 
+0

正是我應該在上面的servlet類中調用此方法(getSenderEmail())。 – Dip

+0

更新了答案。但是,從你的問題來看,你不清楚你發送郵件成功後到底想要做什麼。所以我省略了重定向邏輯。但是這應該在servlet被觸發時發送電子郵件。 –

+0

我只想通過此代碼將來自不同發件人的批量電子郵件逐一發送給一位收件人。 – Dip

0

如果你有類名,ReadFile的

public class ReadFile { 

    public static ReadFile thisCls; 
    private String filename = "C:/Users/D/Documents/Senderlist.csv"; 

    public static ReadFile getSenderClass() 
    { 
     if(thisCls == null) thisCls = new ReadFile(); 

     return thisCls; 
    } 

    private CSVRead() {} 

    public List<String []> readCsv() { 

     try { 
      CSVReader reader = new CSVReader(new FileReader(filename)); 
      // UTF-8 
      // CSVReader reader = new CSVReader(new InputStreamReader(new FileInputStream(filename), "UTF-8"), ",", '"', 1); 
      String[] s; 
      while ((s = reader.readNext()) != null) 
      { 
       data.add(s); 
      } 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return data; 
    } 
} 

然後,你的servlet類可能be

public class MailController extends HttpServlet { 

    .....skip code.... 


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // read from field 
     List<File> uploadedFiles= saveUploadedFiles(request); 
     String sender=request.getParameter("sender");// reading from the form page 
     String recipient=request.getParameter("recipient"); 
     String subject=request.getParameter("subject"); 
     String content=request.getParameter("content"); 
     //String resultMessage = ""; 
     List<String> resultMessage = new ArrayList<String>(); 

     //<============================== 
     CSVRead read = new CSVRead(); 
     List<String[]> data = CSVRead.readCsv(); 

     //assuming you have a sender in a second column value 
     Iterator<String[]> it = data.iterator(); 

     String targetSender = null; 

     try { 
      String[] array = (String[]) it.next(); 

      targetSender = array[1]; 

      EmailUtility.sendEmail(ExchangeIP, port,sender, recipient, subject, content, uploadedFiles); 

      resultMessage.add("The e-mail has been sent successfully to " + targetSender); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
      resultMessage.add("There were an error: " + ex.getMessage() + " while sending user " + targetSender); 
     } 


     try{ 
      while (it.hasNext()) { 
       try { 
        String[] array = (String[]) it.next(); 

        targetSender = array[1]; 

        EmailUtility.sendEmail(ExchangeIP, port,targetSender, recipient, subject, content, uploadedFiles); 

        resultMessage.add("The e-mail has been sent successfully to " + targetSender); 
       } catch (Exception ex) { 
        ex.printStackTrace(); 
        resultMessage.add("There were an error: " + ex.getMessage() + " while sending user " + targetSender); 
       } 
      } 
     } finally { 
      //deleteUploadFiles(uploadedFiles); 
      request.setAttribute("Message", resultMessage); 
      getServletContext().getRequestDispatcher("/Result.jsp").forward(request, response); 
     } 

    } 

} 

I d不知道EmailUtility類的sendEmail方法。 我假設第三個參數必須是發件人。