JavaMail javax.mail Factory
Parameter werden einzeln an eine Factory übergeben; die API verwendet javax.mail.
Vollständiger Legacy-Modern-Vergleich aller Java-Klassen, Tests, Maven-POMs und relevanten Ressourcen dieses Moduls. Jede Datei ist genau einmal einer fachlich passenden Vergleichsgruppe zugeordnet.
Parameter werden einzeln an eine Factory übergeben; die API verwendet javax.mail.
Ein unveränderlicher MailCommand beschreibt den Auftrag; das Gateway kapselt Jakarta Mail und Transport.send.
Die Ähnlichkeit ist eine technische Orientierung auf normalisiertem Quelltext. Sie ersetzt keine fachliche Bewertung.
| Vergleichsgruppe | Legacy-Dateien | Modern-Dateien | Legacy-Zeilen | Modern-Zeilen | Ähnlichkeit |
|---|---|---|---|---|---|
| Build-Konfiguration | 1 | 1 | 34 | 34 | 77% |
| Mail-Erzeugung/-Gateway, Command und Test | 2 | 3 | 30 | 46 | 40% |
Das Pair-POM bindet die Legacy- und Modern-Submodule zusammen und gehört deshalb ebenfalls zur vollständigen Codeabdeckung.
javax- und Jakarta-Mail-Abhängigkeiten werden verglichen.
| Legacy-Dateien | Modern-Dateien | Einordnung |
|---|---|---|
| pom.xml | pom.xml | Direktvergleich Semantische Ähnlichkeit: 77% |
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>at.aydin.academy</groupId>
<artifactId>33smtpmail-pair</artifactId>
<version>1.0.0</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>javax-mail-legacy</artifactId>
<packaging>jar</packaging>
<name>Javax Mail Legacy</name>
<dependencies>
<dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.6.2</version></dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
</plugins>
</build>
</project><?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>at.aydin.academy</groupId>
<artifactId>33smtpmail-pair</artifactId>
<version>1.0.0</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>jakarta-mail-modern</artifactId>
<packaging>jar</packaging>
<name>Jakarta Mail Modern</name>
<dependencies>
<dependency><groupId>org.eclipse.angus</groupId><artifactId>jakarta.mail</artifactId><version>2.0.3</version></dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>Factory-artige Nachrichtenerzeugung wird in Command und Gateway getrennt.
| Legacy-Dateien | Modern-Dateien | Einordnung |
|---|---|---|
| LegacyMailFactory.java LegacyMailFactoryTest.java | JakartaMailGateway.java MailCommand.java JakartaMailGatewayTest.java | Direktvergleich Semantische Ähnlichkeit: 40% |
package at.aydin.lab.mail.legacy;
// Design Pattern: Factory – erzeugt vorkonfigurierte MimeMessage-Objekte.
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
public final class LegacyMailFactory {
public MimeMessage create(String from, String to, String subject, String body) throws Exception {
Session session = Session.getDefaultInstance(new Properties());
MimeMessage m = new MimeMessage(session);
m.setFrom(new InternetAddress(from));
m.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
m.setSubject(subject, "UTF-8");
m.setText(body, "UTF-8");
return m;
}
}package at.aydin.lab.mail.legacy;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class LegacyMailFactoryTest {
@Test
void createsJavaxMessage() throws Exception {
assertEquals("Test", new LegacyMailFactory().create("a@example.test", "b@example.test", "Test", "Body")
.getSubject());
}
}package at.aydin.lab.mail.modern;
import jakarta.mail.*;
import jakarta.mail.internet.*;
import java.util.*;
// Design Pattern: Gateway
// Zweck: Jakarta-Mail-API bleibt außerhalb des fachlichen Aufrufers.
public final class JakartaMailGateway {
private final Session session;
public JakartaMailGateway(Properties properties) {
session = Session.getInstance(properties);
}
public MimeMessage prepare(MailCommand c) throws Exception {
MimeMessage m = new MimeMessage(session);
m.setFrom(new InternetAddress(c.from()));
m.setRecipient(Message.RecipientType.TO, new InternetAddress(c.to()));
m.setSubject(c.subject(), "UTF-8");
m.setText(c.body(), "UTF-8");
return m;
}
public void send(MailCommand c) throws Exception {
Transport.send(prepare(c));
}
}package at.aydin.lab.mail.modern;
// Design Pattern: Command
// Zweck: Vollständiger Versandauftrag wird als unveränderliches Objekt übergeben.
public record MailCommand(String from, String to, String subject, String body) {
}package at.aydin.lab.mail.modern;
import org.junit.jupiter.api.Test;
import java.util.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
class JakartaMailGatewayTest {
@Test
void preparesWithoutSending() throws Exception {
var g = new JakartaMailGateway(new Properties());
assertEquals("Test", g.prepare(new MailCommand("a@example.test", "b@example.test", "Test", "Body")).getSubject());
}
}