Wenn man bei der Entwicklung (bzw. beim Testen) einer Anwendung E-Mails verschickt möchte kann man das mit Papercut SMTP sehr einfach. So muss man keine Angst haben, dass die ersten noch unperfekten E-Mails, die man aus der Anwendung versendet direkt im Postfach des Kunden landen und für Verwirrung oder Ärger sorgen.
Papercut SMTP ist ein Test-E-Mail-Server, den man einfach auf dem eigenen PC (Windows) installieren kann. Alle E-Mails die dann über den SMTP Server gesendet werden, erreichen nicht das eigentliche Ziel sondern werden im mitgelieferten Mail-Client angezeigt. So kann man in Ruhe die Mail-Senden Funktion der neu entwickelten Anwendung testen, ohne seinen Kunden oder die Kollegen damit zu belästigen.
Papercut SMTP richtet sich ganz bewusst an Entwickler und ist ein sehr praktisches Werkzeug um den Entwicklungszyklus rund um das Versenden von E-Mail deutlich zu beschleunigen.
Installation
Die Installation ist denkbar einfach. Der Installer (Aktuell Version 6.2) kann unter https://github.com/ChangemakerStudios/Papercut-SMTP/releases heruntergeladen und installiert werden. Der Installer installiert sowohl den Server als auch den Client.
Der Server wird als Dienst registriert. Allerdings hat der Dienst bei mir ein paar komische Eigenschaften und kann irgendwie nicht gestartet werden.
Ist aber nicht so schlimm. Wie es scheint kann man den Server einfach im Startmenü auswählen und starten.
Nach dem Start wird in der Windows Startleiste das Papercut SMTP Icon angezeigt.
Mit einem Rechsklick auf das Icon öffnet sich ein kleines Menü mit den folgenden 3 Optionen.
- Show
Startet den Mail Client - Options
Öffnet einen Options Dialog. - Exit
Beendet den SMTP Server
Die Options sind recht übersichtlich.
Neben der IP Adresse und dem Port des SMTP Servers kann man noch ein paar andere Kleinigkeiten anpassen. Habe ich mich aber bisher noch nie mit befasst.
Der Papercut Client sieht auf den ersten Blick aus wie ein einfacher Mail Client.
Er bietet aber ein paar Features, die besonders für Entwickler sehr interessant sind. So hat man die Möglichkeit, sich die Mail-Header im Detail anzusehen (Tab Headers), oder den Mail-Body im Sourcecode anzuzeigen (Tab Body). Fall man mit Multipart Messages arbeitet, kann man sich auch die einzelnen Teile der Mail auflisten lassen und Anhänge auf der Platte speichern (Tab Sections). Zusätzlich gibt es noch de Tab „Raw“, der die E-Mail noch mal als Ganzes anzeigt.
Papercut SMTP Server verwenden
Um aus einer Spring Boot Anwendung heraus eine Mail zu versenden kann man den JavaMailSender (implementation ‚org.springframework.boot:spring-boot-starter-mail‘) verwenden, der dann in den appliction.properties wie folgt konfiguriert werden kann:
spring.mail.host=localhost
spring.mail.port=25
spring.mail.properties.mail.smtp.auth=false
spring.mail.properties.mail.smtp.starttls.enable=false
Ein Unit Test könnte z.B. wie folgt aussehen:
package de.jentsch.mail; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.core.io.FileSystemResource; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.io.File; import java.text.MessageFormat; import java.util.UUID; @SpringBootTest(classes = SpringBootApplication.class) class JavaMailServerTest { @Autowired private JavaMailSender javaMailSender; @Test public void sendMail() throws Exception { String fromStr = "michael@jentsch.io"; String toStr = "jentsch.michael@gmail.com"; String bccStr = "michael@jentsch.io"; MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true); File file1 = new File(getClass().getClassLoader().getResource("attachment1.txt").getFile()); File file2 = new File(getClass().getClassLoader().getResource("attachment2.txt").getFile()); InternetAddress from = new InternetAddress(fromStr); InternetAddress to = new InternetAddress(toStr); InternetAddress bcc = new InternetAddress(bccStr); String subject = "Test Mail Subject"; String text = "Test Mail Body"; String uuid = UUID.randomUUID().toString(); String messageId = MessageFormat.format("<{0}@{1}>", uuid, "jentsch.io"); mimeMessageHelper.setFrom(from); mimeMessageHelper.setTo(to); mimeMessageHelper.setBcc(bcc); mimeMessageHelper.setText(text); mimeMessageHelper.setSubject(subject); FileSystemResource iniFileRes = new FileSystemResource(file1); FileSystemResource hashFileRes = new FileSystemResource(file2); mimeMessageHelper.addAttachment(iniFileRes.getFilename(), iniFileRes); mimeMessageHelper.addAttachment(hashFileRes.getFilename(), hashFileRes); mimeMessage.setHeader("Message-Id", messageId); javaMailSender.send(mimeMessage); } }
Sobald eine E-Mail gesendet wurde, wird eine Windows Benachrichtigung angezeigt die über den Empfang der Nachricht informiert.
Wenn der Papercut Client geöffnet ist, wird auch hier die Mail direkt angezeigt.
Mit Hilfe der 5 Tabs (Message, Headers, Body, Sections und Raw) kann man dann überprüfen, ob die Mail korrekt gesendet wurden.
Z.B. enthält der Tab „Sections“ nun alle Elemente der Nachricht incl. der beiden Arrachments.
Fazit
Ein schönes einfaches Tool das beim Entwickeln (und Testen) von Anwendungen die E-Mails versenden sehr hilfreich sein kann. Darüber hinaus ist ein Open Source Projekt (https://github.com/ChangemakerStudios/Papercut-SMTP), dass von einer aktiven Community gepflegt und weiterentwickelt wird und nach Belieben an die eigenen Bedürfnisse angepasst werden kann.