Проверьте состояние и отправьте почту в java - PullRequest
0 голосов
/ 12 февраля 2019

мне нужно отправить почту в java с помощью

  1. проверки папки
  2. если в этой папке нет файла
  3. отправить письмо о том, что папка пуста

Я пробовал код для отправки почты с использованием расписания, чтобы отправлять почту каждые 2 секунды и останавливать его через 2 секунды, но не знаю, как проверить условие У меня есть три класса отправителя почты, основной изапланированное задание

Может кто-нибудь помочь, пожалуйста ??

Заранее спасибо !!!!

MailSender.java

public class MailSender {

    public static void send(String string, String messageString, String msgSubject) throws Exception {

      // Sender's email ID needs to be mentioned
      String from = "xyz@xyz.com";

      // Assuming you are sending email from localhost
      String host = "localhost";

      String port = "25";

      // Get system properties
      Properties properties = System.getProperties();

      // Setup mail server
      properties.setProperty("mail.smtp.host", host);
      properties.setProperty("mail.smtp.port", port);      

      // Get the default Session object.
      Session session = Session.getDefaultInstance(properties);

      try{
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);

         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));

         // Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO, new InternetAddress(string));

         // Set Subject: header field
         message.setSubject(msgSubject);

         // Create the message part 
         BodyPart messageBodyPart = new MimeBodyPart();

         // Fill the message
         messageBodyPart.setText(messageString);
         messageBodyPart.setFileName("xyz.png");

         // Create a multi-part message
         Multipart multipart = new MimeMultipart();

         // Set text message part
         multipart.addBodyPart(messageBodyPart);
         message.setContent(messageString, "text/html; charset=utf-8");

        MimeMessage message1 = new MimeMessage(session);
        message1.setContent
        ("<h1>This is a test</h1>" 
         + "</images/zyx.png\">", 
         "text/html");

         // Send message
         Transport.send(message);
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }

MainClass.java

public class MainClass {
    public static void main(String args[]) throws Exception {

        Timer time = new Timer(); // Instantiate Timer Object
        ScheduledTask st = new ScheduledTask(); // Instantiate SheduledTask class
        time.schedule(st, 0, 10000); // Create Repetitively task for every 1 secs

        //for demo only.
        for (int i = 0; i <= 2; i++) {
            MailSender.send("xyz@asd.com", "Welcome to abc", "Welcom eMail");
            Thread.sleep(2000);
            if (i == 2) {
                System.out.println("Application Terminates");
                System.exit(0);
            }
        }
    }
}

ScheduledTask.java

public class ScheduledTask extends TimerTask {

    Date now; // to display current time

    // Add your task here
    public void run() {
        now = new Date(); // initialize date
        System.out.println("Time is :" + now); // Display current time
    }
}

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

В цикле MainClass for вы можете проверить статус каталога и отправить электронное письмо, как показано ниже.

File file = new File("Path to your directory for ex. C:\\folder");
if(file.isDirectory()){
    if(file.list().length==0){
        MailSender.send("xyz@asd.com", "Folder is empty", "Folder status");
    }
}
0 голосов
/ 12 февраля 2019

Вы можете использовать java.nio утилиты для проверки папок / файлов.Вызовите метод sendMailWhenNoFilesExist (ниже) из вашего MainClass, передав путь к папке в качестве параметра метода.

import java.nio.file.Files;
import java.nio.file.Paths;
.
.

private void sendMailWhenNoFilesExist(String folderPath) throws IOException {
    if(Files.isDirectory(Paths.get(folderPath))
            && Files.list(Paths.get(folderPath)).count() == 0) {
        MailSender.send("xyz@asd.com", "Message body", "Message subject");
    }
}
0 голосов
/ 12 февраля 2019

Вы можете открыть каталог, используя File class и сделать listFiles для этого.Если listFiles ничего не возвращает, тогда каталог пуст.

Лучшим подходом может быть регистрация уведомлений файловой системы, чтобы при создании файла вы получали уведомление и вам не приходилось пытаться каждые 2 секунды.

https://docs.oracle.com/javase/tutorial/essential/io/notification.html

...