package application.util; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.List; import org.apache.commons.io.FileUtils; import org.apache.commons.mail.DefaultAuthenticator; import org.apache.commons.mail.EmailAttachment; import org.apache.commons.mail.EmailException; import org.apache.commons.mail.ImageHtmlEmail; import org.apache.commons.mail.resolver.DataSourceUrlResolver; import com.google.gson.Gson; import application.Constants; import application.bean.EmailFrom; import javafx.scene.control.TextArea; import javafx.scene.control.TextField; public class EmailManager { private static EmailManager instance; public static EmailManager getInstance(){ if(instance == null){ synchronized (EmailManager.class) { if(instance == null){ instance = new EmailManager(); } } } return instance; } public void send(boolean batchAll, TextArea taFrom, TextArea taTo, TextArea taContent, TextField txUrl) throws IOException{ String from = taFrom.getText(); String to = taTo.getText(); String html = taContent.getText(); String url = txUrl.getText(); if(from.isEmpty() || to.isEmpty() || html.isEmpty()){ System.out.println("input can't is empty!"); return; } List<String> emails = FileUtils.readLines(new File(Constants.EMAIL_TO), "UTF-8"); Gson gson = new Gson(); EmailFrom emailFrom = gson.fromJson(from, EmailFrom.class); System.err.println(emailFrom); System.err.println(emails); if(emailFrom.getAttachmentName().equals("xx.txt")){ emailFrom.setAttached(false); } else { emailFrom.setAttached(true); } if(batchAll){ sendBatch(emailFrom, emails, url, html); } else { for(String email : emails){ sendSingle(emailFrom, email, url, html); sleep(Constants.EMAIL_SEND_TIMEOUT); } } } private void sendBatch(EmailFrom emailFrom, List<String> list, String _url, String html) { try { String[] emails = new String[list.size()]; list.toArray(emails); ImageHtmlEmail email = createImageEmail(emailFrom, _url, html); email.addTo(emails); attachFile(email, emailFrom); email.send(); } catch (Exception e) { e.printStackTrace(); } } private void sendSingle(EmailFrom emailFrom, String singleEmail, String _url, String html) { try { ImageHtmlEmail email = createImageEmail(emailFrom, _url, html); email.addTo(singleEmail); attachFile(email, emailFrom); email.send(); } catch (Exception e) { e.printStackTrace(); } } private ImageHtmlEmail createImageEmail(EmailFrom emailFrom, String _url, String html) throws Exception { ImageHtmlEmail email = new ImageHtmlEmail(); email.setCharset("UTF-8"); URL url = new URL(_url); email.setDataSourceResolver(new DataSourceUrlResolver(url)); email.setHostName(emailFrom.getHostName()); email.setSmtpPort(emailFrom.getSmtpPort()); email.setAuthenticator(new DefaultAuthenticator(emailFrom.getUser(), emailFrom.getPwd())); email.setSSLOnConnect(true); email.setFrom(emailFrom.getFromAddr(), emailFrom.getFromNick()); email.setSubject(emailFrom.getSubject()); email.setTextMsg(emailFrom.getText()); email.setHtmlMsg(html); return email; } private void attachFile(ImageHtmlEmail email, EmailFrom emailFrom) { if(!emailFrom.isAttached()){ return; } // �������� EmailAttachment attachment = new EmailAttachment(); // ����·�� attachment.setPath(emailFrom.getAttachmentPath()); // ���·�� // attachment.setURL(new URL("http://www.baidu.com/xx.zip")); attachment.setDisposition(EmailAttachment.ATTACHMENT); // ������� // attachment.setDescription("����Ͷ�帽��"); // ������� attachment.setName(emailFrom.getAttachmentName()); // ������Ӷ����� // email.attach(attachment1); // email.attach(attachment2); try { email.attach(attachment); } catch (EmailException e) { e.printStackTrace(); } } private void sleep(int emailSendTimeout) { try { Thread.sleep(emailSendTimeout); } catch (Exception e) { e.printStackTrace(); } } }