Mail Alerter
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class MailAlerter { public MailAlerter() { String[] recipients = new String[1]; recipients[0] = "astronomer@tiscali.it"; try { this.postMail(recipients, recNum, carbon, carNum,"Mail di prova", "astronomer@tiscali.it","mail.libero.it"); } catch (MessagingException e) {e.printStackTrace();}
}
public static void main(String[] args) { MailAlerter ma = new MailAlerter();
}
public void postMail( String recipients[ ], int recNum, String carbon[], int carNum, String subject, String message , String attachment, String from, String smtpHost) throws MessagingException { Properties props = new Properties(); //indicare l'indirizzo del server smtp che si intende usare props.put("mail.smtp.host", smtpHost);
Session session = Session.getDefaultInstance(props, null); Message msg = new MimeMessage(session);
InternetAddress addressFrom = new InternetAddress(from); msg.setFrom(addressFrom);
InternetAddress[] addressTo = new InternetAddress[recipients.length]; InternetAddress[] addressCC = new InternetAddress[recipients.length];
for (int i = 0; i < recNum; i++){ addressTo[i] = new InternetAddress(recipients[i]);}
for (int i = 0; i < carNum; i++){ addressCC[i] = new InternetAddress(carbon[i]);}
msg.setRecipients(Message.RecipientType.TO, addressTo); msg.setRecipients(Message.RecipientType.CC, addressCC);
msg.setSubject(subject); msg.setContent(message, "text/plain"); msg.setFileName(attachment); Transport.send(msg); }
public void readFile(String fileName) throws FileNotFoundException, IOException { BufferedReader recipients = new BufferedReader(new FileReader("recipients.txt")); BufferedReader message = new BufferedReader(new FileReader(fileName));
while(true) { String line = recipients.readLine(); if(line==null) break; System.out.println(line); }
}
//per inviare una mail se il contenuto di una data directory è cambiato. public void folderChanged(String foldername, String[] recipients, String from, String smtpHost) { MailAlerter ma = new MailAlerter(); File folder = new File(foldername); if (!folder.isDirectory()){ System.out.println("["+ foldername + "] is not a directory." ); return; } Vector oldFiles = new Vector(Arrays.asList(folder.list()));
while (true){ try{ Vector deleted = new Vector(); Vector newFiles = new Vector(Arrays.asList(folder.list()));
while (!oldFiles.isEmpty()){
String element = (String)oldFiles.firstElement(); oldFiles.removeElementAt(0); if (newFiles.contains(element)){ newFiles.remove(element); } else { deleted.add(element); } }
String message = "Folder " + foldername + " changed!"; message += "\n Added files:"; for (int i=0;i<newFiles.size();i++) message += "\n " + (String)newFiles.elementAt(i); message += "\n Deleted files:"; for (int i=0;i<deleted.size();i++) message += "\n " + (String)deleted.elementAt(i); if ((!deleted.isEmpty())||(!newFiles.isEmpty())){ ma.postMail(recipients,recNum, carbon,carNum,"[MailAlerter] Folder changed", message, from, smtpHost); System.out.println("Folder changed, mail sent."); } else System.out.println("Folder not changed: "+ (folder.list()).length);
oldFiles = new Vector(Arrays.asList(folder.list())); //aspettiamo 10 minuti fra un controllo e l'altro Thread.sleep(10 * 60 * 1000); }catch(Exception e){ System.out.println("Error: " + e); }
}
} }