2016-08-04 5 views
1

私のデータベースのすべてのユーザーに毎日電子メールを送信したいと思います。 私はバックエンドでSpringbootとJHipsterを使用します。私もすでにアカウントの検証とパスワードリセットのために使用されているmailserviceとを持っているSpringbootで毎日電子メールを送信する - JHipster

/** 
* GET /users : get all users. 
* 
* @param pageable the pagination information 
* @return the ResponseEntity with status 200 (OK) and with body all users 
* @throws URISyntaxException if the pagination headers couldnt be generated 
*/ 
@RequestMapping(value = "/users", 
    method = RequestMethod.GET, 
    produces = MediaType.APPLICATION_JSON_VALUE) 
@Timed 
@Transactional(readOnly = true) 
public ResponseEntity<List<ManagedUserDTO>> getAllUsers(Pageable pageable) 
    throws URISyntaxException { 
    Page<User> page = userRepository.findAll(pageable); 
    List<ManagedUserDTO> managedUserDTOs = page.getContent().stream() 
     .map(ManagedUserDTO::new) 
     .collect(Collectors.toList()); 
    HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/users"); 
    return new ResponseEntity<>(managedUserDTOs, headers, HttpStatus.OK); 
} 

は残りのコントローラでは、私は(自動的にJHipsterによって作成された)GETリクエストを持って

/** 
* Service for sending e-mails. 
* <p> 
* We use the @Async annotation to send e-mails asynchronously. 
* </p> 
*/ 
@Service 
public class MailService { 

    private final Logger log = LoggerFactory.getLogger(MailService.class); 

    private static final String USER = "user"; 
    private static final String BASE_URL = "baseUrl"; 

    @Inject 
    private JHipsterProperties jHipsterProperties; 

    @Inject 
    private JavaMailSenderImpl javaMailSender; 

    @Inject 
    private MessageSource messageSource; 

    @Inject 
    private SpringTemplateEngine templateEngine; 

    @Async 
    public void sendEmail(String to, String subject, String content, boolean isMultipart, boolean isHtml) { 
     log.debug("Send e-mail[multipart '{}' and html '{}'] to '{}' with subject '{}' and content={}", 
      isMultipart, isHtml, to, subject, content); 

     // Prepare message using a Spring helper 
     MimeMessage mimeMessage = javaMailSender.createMimeMessage(); 
     try { 
      MimeMessageHelper message = new MimeMessageHelper(mimeMessage, isMultipart, CharEncoding.UTF_8); 
      message.setTo(to); 
      message.setFrom(jHipsterProperties.getMail().getFrom()); 
      message.setSubject(subject); 
      message.setText(content, isHtml); 
      javaMailSender.send(mimeMessage); 
      log.debug("Sent e-mail to User '{}'", to); 
     } catch (Exception e) { 
      log.warn("E-mail could not be sent to user '{}', exception is: {}", to, e.getMessage()); 
     } 
    } 

    @Async 
    public void sendActivationEmail(User user, String baseUrl) { 
     user.setLangKey("en"); 
     log.debug("Sending activation e-mail to '{}'", user.getEmail()); 
     Locale locale = Locale.forLanguageTag(user.getLangKey()); 
     Context context = new Context(locale); 
     context.setVariable(USER, user); 
     context.setVariable(BASE_URL, baseUrl); 
     String content = templateEngine.process("activationEmail", context); 
     String subject = messageSource.getMessage("email.activation.title", null, locale); 
     sendEmail(user.getEmail(), subject, content, false, true); 
    } 

    @Async 
    public void sendCreationEmail(User user, String baseUrl) { 
     log.debug("Sending creation e-mail to '{}'", user.getEmail()); 
     Locale locale = Locale.forLanguageTag(user.getLangKey()); 
     Context context = new Context(locale); 
     context.setVariable(USER, user); 
     context.setVariable(BASE_URL, baseUrl); 
     String content = templateEngine.process("creationEmail", context); 
     String subject = messageSource.getMessage("email.activation.title", null, locale); 
     sendEmail(user.getEmail(), subject, content, false, true); 
    } 

    @Async 
    public void sendPasswordResetMail(User user, String baseUrl) { 
     log.debug("Sending password reset e-mail to '{}'", user.getEmail()); 
     Locale locale = Locale.forLanguageTag(user.getLangKey()); 
     Context context = new Context(locale); 
     context.setVariable(USER, user); 
     context.setVariable(BASE_URL, baseUrl); 
     String content = templateEngine.process("passwordResetEmail", context); 
     String subject = messageSource.getMessage("email.reset.title", null, locale); 
     sendEmail(user.getEmail(), subject, content, false, true); 
    } 

} 

私はフロントエンドからリクエストを作成し、バックエンドと接続する方法を知っていますが、ここで必要なのは、バックからバックへのリクエストです。

私もそれがインターフェイスであるため、どのようなページング可能オブジェクトが用であり、どのようにそれを作成するために理解していない:

public interface Pageable { 

    int getPageNumber(); 

    int getPageSize(); 

    int getOffset(); 

    Sort getSort(); 

    Pageable next(); 

    Pageable previousOrFirst(); 

    Pageable first(); 

    boolean hasPrevious(); 
} 

答えて

0

Vinzee、

必要なのは、スケジューリングを使用して新しいサービスです。以下の抜粋を参照

@Service 
@Transactional 
public class ScheduleService { 
    //send mails daily at 1am 
    @Scheduled(cron = "0 0 1 * * ?") 
    public void sendDailyMails{ 
     //call userRepository.findAll 
     //create mail content or use a template (e.g. Velocity) 
     //for each user call MailService.sendMail 
     //passing content, to(user.getEmail()), from, etc; 
    } 
}