Запланируйте пакетную рассылку на весну - PullRequest
1 голос
/ 14 июля 2020

Мне нужно отправить примерно 40 - 50000 писем в зависимости от выбора пользователя. Эти почтовые идентификаторы хранятся в базе данных. Количество писем может быть любым. Для этого настроен выделенный почтовый сервер. Я не хочу, чтобы они попали в спам. Я хочу отправлять около 5000 писем в час, чтобы не попасть в черный список. Я хочу запланировать пакетное почтовое задание, при котором все письма будут отправлены, а неудачные - повторяться. Чтобы избежать. Пакетное задание планируется, когда пользователь запускает его, и у него есть контроль над остановкой, а также журнал отправленных писем. Это то, что я нашел, чтобы начать и остановить работу, но могут быть лучшие способы реализовать это. Пожалуйста, помогите

  @RequestMapping("start")
ResponseEntity<Void> start() {
    scheduledFuture = taskScheduler.scheduleAtFixedRate(sendMail(), FIXED_RATE);

    return new ResponseEntity<Void>(HttpStatus.OK);
}

@RequestMapping("stop")
ResponseEntity<Void> stop() {
    scheduledFuture.cancel(false);
    return new ResponseEntity<Void>(HttpStatus.OK);
}

Эти письма отправляются закрытой группе студентов, и это не связано с рассылкой спама или маркетингом по электронной почте. Я новичок в пакетной обработке Spring и понятия не имею, как действовать дальше и использовать Spring Boot. Примечание. Это не связано с маркетингом по электронной почте или рассылкой спама.

До сих пор я думал о другом подходе для сохранения всех писем, которые будут отправлены в почтовой очереди

Объект очереди почты:

package com.iitraa.alumnus.iitAlumnus.entity;

import lombok.*;

import javax.persistence.*;

@Data
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class MailQueue {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private  int id;
    private String name;
    private String email;
    @ManyToOne
    private MailJobs mailJobs;
  
    private boolean complete;



    public void setName(String name) {
        this.name = name;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setMailJobs(MailJobs mailJobs) {
        this.mailJobs = mailJobs;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }

    public MailJobs getMailJobs() {
        return mailJobs;
    }

    
}

Почтовые задания - это каждое задание, в котором запланировано количество писем

package com.iitraa.alumnus.iitAlumnus.entity;

import lombok.*;

import javax.persistence.*;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@Data
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class MailJobs {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column
    private  String subject;
    @Column
    private String mailMessage;
    @Column
    private String fromEmail;
    @Column
    private String name;

    @ManyToMany
    private Set<Year> years= new HashSet<>();;

    public Set<Year> getYears() {
        return years;
    }

    public void setYears(Set<Year> years) {
        this.years = years;
    }

    public int getId() {
        return id;
    }
}

Я добавляю почтовую очередь, которая содержит всю почту, которая должна быть отправлена, а затем обрабатываю ежечасный запуск над методом запуска sendMail (), который будет извлекать пакет писем из mailQueue send их и всегда удаляйте из таблицы, пока таблица не станет пустой. Я не знаю лучшего способа или того, как реализовать его с помощью расписания весенней пакетной почты. Вот с чем мне нужна помощь.

...