E-Mail
+ (nicht gesetzt))
+ (nicht bestätigt))
+ (bestätigt)
diff --git a/src/main/angular/src/app/pages/profile/profile.component.ts b/src/main/angular/src/app/pages/profile/profile.component.ts
index 65aa9ed..5c92ee9 100644
--- a/src/main/angular/src/app/pages/profile/profile.component.ts
+++ b/src/main/angular/src/app/pages/profile/profile.component.ts
@@ -7,7 +7,7 @@ import {GroupListComponent} from "../group/shared/group-list/group-list.componen
import {Group} from "../../api/group/Group";
import {Subscription} from "rxjs";
import {GroupService} from "../../api/group/group.service";
-import {UserPrivate} from "../../api/User/UserPrivate";
+import {EmailStatus, UserPrivate} from "../../api/User/UserPrivate";
const USER_NAME_MIN_LENGTH = 2;
@@ -117,4 +117,5 @@ export class ProfileComponent implements OnInit, OnDestroy {
});
}
+ protected readonly EmailStatus = EmailStatus;
}
diff --git a/src/main/java/de/ph87/tools/email/Email.java b/src/main/java/de/ph87/tools/email/Email.java
new file mode 100644
index 0000000..d60e679
--- /dev/null
+++ b/src/main/java/de/ph87/tools/email/Email.java
@@ -0,0 +1,74 @@
+package de.ph87.tools.email;
+
+import de.ph87.tools.user.User;
+import jakarta.annotation.Nullable;
+import jakarta.persistence.*;
+import lombok.*;
+
+import java.time.ZonedDateTime;
+import java.util.UUID;
+
+@Entity
+@Getter
+@ToString
+@Table(name = "`email`")
+@NoArgsConstructor
+public class Email {
+
+ @Id
+ private String uuid = UUID.randomUUID().toString();
+
+ @NonNull
+ @Column(nullable = false)
+ private ZonedDateTime queued = ZonedDateTime.now();
+
+ @NonNull
+ @ManyToOne(optional = false)
+ private User user;
+
+ @NonNull
+ @Column(nullable = false)
+ private String receiver;
+
+ @NonNull
+ @Column(nullable = false)
+ private String subject;
+
+ @Lob
+ @NonNull
+ @ToString.Exclude
+ @Column(nullable = false)
+ private String content;
+
+ @Setter
+ @Column
+ @Nullable
+ private ZonedDateTime tried;
+
+ @Setter
+ @Column
+ private int tries = 0;
+
+ @Setter
+ @Column
+ @Nullable
+ private ZonedDateTime sent;
+
+ @Setter
+ @NonNull
+ @Column(nullable = false)
+ private String status = "";
+
+ public Email(@NonNull final User user, @NonNull final String subject, @NonNull final String content) {
+ this.user = user;
+ this.receiver = user.getEmail();
+ this.subject = subject;
+ this.content = content;
+ }
+
+ public void addTry() {
+ tried = ZonedDateTime.now();
+ tries++;
+ }
+
+}
diff --git a/src/main/java/de/ph87/tools/email/EmailConfig.java b/src/main/java/de/ph87/tools/email/EmailConfig.java
new file mode 100644
index 0000000..33423fb
--- /dev/null
+++ b/src/main/java/de/ph87/tools/email/EmailConfig.java
@@ -0,0 +1,36 @@
+package de.ph87.tools.email;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.Properties;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "de.ph87.tools.email")
+public class EmailConfig {
+
+ private String host;
+
+ private int port = 465;
+
+ private boolean ssl = true;
+
+ private String username;
+
+ private String password;
+
+ private String from;
+
+ private String hrefBase = "http://localhost:4200";
+
+ public Properties getProperties() {
+ final Properties properties = new Properties();
+ properties.put("mail.smtp.host", host);
+ properties.put("mail.smtp.port", port);
+ properties.put("mail.smtp.ssl.enable", ssl);
+ return properties;
+ }
+
+}
diff --git a/src/main/java/de/ph87/tools/email/EmailDto.java b/src/main/java/de/ph87/tools/email/EmailDto.java
new file mode 100644
index 0000000..cd226bf
--- /dev/null
+++ b/src/main/java/de/ph87/tools/email/EmailDto.java
@@ -0,0 +1,52 @@
+package de.ph87.tools.email;
+
+import de.ph87.tools.user.User;
+import jakarta.annotation.Nullable;
+import lombok.Getter;
+import lombok.NonNull;
+import lombok.ToString;
+
+import java.time.ZonedDateTime;
+
+@Getter
+@ToString
+public class EmailDto {
+
+ @NonNull
+ private final String uuid;
+
+ @NonNull
+ private final ZonedDateTime queued;
+
+ @NonNull
+ private final User user;
+
+ @NonNull
+ private final String receiver;
+
+ @NonNull
+ private final String subject;
+
+ @NonNull
+ @ToString.Exclude
+ private final String content;
+
+ @Nullable
+ private final ZonedDateTime sent;
+
+ @NonNull
+ @ToString.Exclude
+ private final String status;
+
+ public EmailDto(@NonNull final Email email) {
+ this.uuid = email.getUuid();
+ this.queued = email.getQueued();
+ this.user = email.getUser();
+ this.receiver = "%s <%s>".formatted(user.getName(), user.getEmail());
+ this.subject = email.getSubject();
+ this.content = email.getContent();
+ this.sent = email.getSent();
+ this.status = email.getStatus();
+ }
+
+}
diff --git a/src/main/java/de/ph87/tools/email/EmailRepository.java b/src/main/java/de/ph87/tools/email/EmailRepository.java
new file mode 100644
index 0000000..3d2c708
--- /dev/null
+++ b/src/main/java/de/ph87/tools/email/EmailRepository.java
@@ -0,0 +1,18 @@
+package de.ph87.tools.email;
+
+import lombok.NonNull;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.ListCrudRepository;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import java.time.ZonedDateTime;
+
+public interface EmailRepository extends ListCrudRepository