Мне нужно отправить примерно 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 их и всегда удаляйте из таблицы, пока таблица не станет пустой. Я не знаю лучшего способа или того, как реализовать его с помощью расписания весенней пакетной почты. Вот с чем мне нужна помощь.