diff --git a/goofy-server/src/main/java/de/itvsh/goofy/common/user/UserManagerUrlProvider.java b/goofy-server/src/main/java/de/itvsh/goofy/common/user/UserManagerUrlProvider.java
index 1b4dbecdf077e8fb37d20a526312bc9ad25b13e8..e6902afed4a132a89ab6b9cc25359002bf30c010 100644
--- a/goofy-server/src/main/java/de/itvsh/goofy/common/user/UserManagerUrlProvider.java
+++ b/goofy-server/src/main/java/de/itvsh/goofy/common/user/UserManagerUrlProvider.java
@@ -1,14 +1,22 @@
 package de.itvsh.goofy.common.user;
 
 import java.util.Objects;
+import java.util.Optional;
+import java.util.function.Predicate;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import de.itvsh.goofy.postfach.PostfachMail;
+
 @Service
 public class UserManagerUrlProvider {
 
+	public static final String SYSTEM_USER_IDENTIFIER = "system";
+	public static final Predicate<PostfachMail> SENT_BY_CLIENT_USER = postfachNachricht -> Optional.ofNullable(postfachNachricht.getCreatedBy())
+			.map(createdBy -> !createdBy.toString().startsWith(SYSTEM_USER_IDENTIFIER)).orElse(false);
+
 	@Autowired
 	private UserManagerProperties userManagerProperties;
 
@@ -37,4 +45,5 @@ public class UserManagerUrlProvider {
 	public boolean isConfiguredForInternalUserId() {
 		return Objects.nonNull(StringUtils.trimToNull(userManagerProperties.getInternalurl()));
 	}
+
 }
diff --git a/goofy-server/src/main/java/de/itvsh/goofy/postfach/PostfachMailService.java b/goofy-server/src/main/java/de/itvsh/goofy/postfach/PostfachMailService.java
index af17ed4d8f494189440dac4198720bc7d980b0d4..16fea2fbb687b990248eada729fb11adecc7ffd0 100644
--- a/goofy-server/src/main/java/de/itvsh/goofy/postfach/PostfachMailService.java
+++ b/goofy-server/src/main/java/de/itvsh/goofy/postfach/PostfachMailService.java
@@ -28,6 +28,7 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -38,7 +39,7 @@ import de.itvsh.goofy.common.binaryfile.BinaryFileService;
 import de.itvsh.goofy.common.binaryfile.FileId;
 import de.itvsh.goofy.common.errorhandling.ResourceNotFoundException;
 import de.itvsh.goofy.common.file.OzgFile;
-import de.itvsh.goofy.common.user.UserId;
+import de.itvsh.goofy.common.user.UserManagerUrlProvider;
 import de.itvsh.goofy.common.user.UserProfile;
 import de.itvsh.goofy.common.user.UserService;
 import de.itvsh.goofy.vorgang.VorgangWithEingang;
@@ -117,14 +118,21 @@ class PostfachMailService {
 			Map<FileId, String> ozgFileIdOzgFileMap) {
 		return PostfachNachrichtPdfData.builder()
 				.createdAt(postfachNachricht.getCreatedAt())
-				.user(getUser(postfachNachricht.getCreatedBy()))
+				.user(getUser(postfachNachricht))
+				.direction(postfachNachricht.getDirection())
 				.mailBody(postfachNachricht.getMailBody())
 				.subject(postfachNachricht.getSubject())
 				.attachmentNames(postfachNachricht.getAttachments().stream().map(ozgFileIdOzgFileMap::get).toList())
 				.build();
 	}
 
-	private UserProfile getUser(UserId createdBy) {
-		return Objects.nonNull(createdBy) ? userService.getById(createdBy) : null;
+	UserProfile getUser(PostfachMail postfachNachricht) {
+		var createdBy = postfachNachricht.getCreatedBy();
+		if (UserManagerUrlProvider.SENT_BY_CLIENT_USER.test(postfachNachricht)) {
+			return Optional.ofNullable(userService.getById(createdBy)).orElseGet(() -> null);
+		}
+		return Optional.ofNullable(createdBy)
+				.map(created -> UserProfile.builder().id(created).build())
+				.orElseGet(() -> null);
 	}
 }
\ No newline at end of file
diff --git a/goofy-server/src/main/java/de/itvsh/goofy/postfach/PostfachNachrichtPdfData.java b/goofy-server/src/main/java/de/itvsh/goofy/postfach/PostfachNachrichtPdfData.java
index 89a98c4c85fe1fcad997bfc4b92571b5855c58b8..fe208292b21a27a2f3c94c9e41ac8d9f3e6e883a 100644
--- a/goofy-server/src/main/java/de/itvsh/goofy/postfach/PostfachNachrichtPdfData.java
+++ b/goofy-server/src/main/java/de/itvsh/goofy/postfach/PostfachNachrichtPdfData.java
@@ -27,6 +27,7 @@ import java.time.ZonedDateTime;
 import java.util.List;
 
 import de.itvsh.goofy.common.user.UserProfile;
+import de.itvsh.goofy.postfach.PostfachMail.Direction;
 import lombok.Builder;
 import lombok.Getter;
 import lombok.Setter;
@@ -41,6 +42,7 @@ class PostfachNachrichtPdfData {
 
 	private String subject;
 	private String mailBody;
+	private Direction direction;
 
 	private List<String> attachmentNames;
 
diff --git a/goofy-server/src/main/java/de/itvsh/goofy/postfach/PostfachNachrichtPdfService.java b/goofy-server/src/main/java/de/itvsh/goofy/postfach/PostfachNachrichtPdfService.java
index 59eb71fe004500ea80d74cb382289686f28a9957..1e0366f18d84550342d1a72a07c6637497b1b2d4 100644
--- a/goofy-server/src/main/java/de/itvsh/goofy/postfach/PostfachNachrichtPdfService.java
+++ b/goofy-server/src/main/java/de/itvsh/goofy/postfach/PostfachNachrichtPdfService.java
@@ -27,14 +27,17 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.time.format.DateTimeFormatter;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Stream;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.io.Resource;
 import org.springframework.stereotype.Service;
 
+import de.itvsh.goofy.common.user.UserManagerUrlProvider;
 import de.itvsh.goofy.common.user.UserProfile;
 import de.itvsh.goofy.postfach.PostfachMail.Direction;
 import de.itvsh.goofy.vorgang.Antragsteller;
@@ -47,10 +50,13 @@ class PostfachNachrichtPdfService {
 
 	static final String PDF_TEMPLATE_PATH = "classpath:fop/postfach-nachrichten.xsl";
 
+	static final String SYSTEM_NACHRICHT_NAME = StringUtils.EMPTY;
 	static final String FALLBACK_USER_NAME = "Unbekannter Benutzer";
 
+	static final String FALLBACK_ANTRAGSTELLER_NAME = "Antragsteller";
+
 	// TODO Auf Konstante mit Locale umstellen
-	private static final DateTimeFormatter CREATED_AT_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy");
+	private static final DateTimeFormatter CREATED_AT_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy hh:mm:ss");
 
 	@Autowired
 	private PdfService pdfService;
@@ -77,8 +83,7 @@ class PostfachNachrichtPdfService {
 
 		Optional.ofNullable(vorgang.getEingang().getAntragsteller()).ifPresent(antragsteller -> mapAntragsteller(pdfModelBuilder, antragsteller));
 
-		isFirstNachricht = true;
-		pdfModelBuilder.nachrichten(postfachNachrichten.map(this::mapPostfachNachricht).toList());
+		mapNachrichten(pdfModelBuilder, postfachNachrichten, vorgang.getEingang().getAntragsteller());
 
 		return pdfModelBuilder.build();
 	}
@@ -93,13 +98,21 @@ class PostfachNachrichtPdfService {
 				.antragstellerOrt(antragsteller.getOrt());
 	}
 
-	PostfachNachrichtPdfModel.Nachricht mapPostfachNachricht(PostfachNachrichtPdfData postfachMail) {
+	private void mapNachrichten(PostfachNachrichtPdfModel.PostfachNachrichtPdfModelBuilder pdfModelBuilder,
+			Stream<PostfachNachrichtPdfData> postfachNachrichten, Antragsteller antragsteller) {
+		isFirstNachricht = true;
+
+		pdfModelBuilder.nachrichten(postfachNachrichten.map(nachricht -> mapPostfachNachricht(nachricht, antragsteller)).toList());
+
+	}
+
+	PostfachNachrichtPdfModel.Nachricht mapPostfachNachricht(PostfachNachrichtPdfData postfachMail, Antragsteller antragsteller) {
 		return PostfachNachrichtPdfModel.Nachricht.builder()
 				.isFirst(isFirstNachricht())
 				.subject(postfachMail.getSubject())
 				.mailBody(postfachMail.getMailBody())
 				.createdAt(CREATED_AT_FORMATTER.format(postfachMail.getCreatedAt()))
-				.createdBy(buildUserName(postfachMail.getUser(), postfachMail.getDirection()))
+				.createdBy(buildAbsenderName(postfachMail, antragsteller))
 				.attachments(postfachMail.getAttachmentNames())
 				.build();
 	}
@@ -112,11 +125,33 @@ class PostfachNachrichtPdfService {
 		return false;
 	}
 
-	String buildUserName(UserProfile userProfile, Direction direction) {
-		return Optional.ofNullable(userProfile).map(this::formatUserName).orElseGet(() -> FALLBACK_USER_NAME);
+	String buildAbsenderName(PostfachNachrichtPdfData postfachNachrichtPdfData, Antragsteller antragsteller) {
+		if (postfachNachrichtPdfData.getDirection() == Direction.IN) {
+			return buildAbsenderForOutgoingNachricht(antragsteller);
+		}
+		return buildAbsenderForIncomingNachricht(postfachNachrichtPdfData);
+	}
+
+	String buildAbsenderForOutgoingNachricht(Antragsteller antragsteller) {
+		return Optional.ofNullable(antragsteller)
+				.map(this::formatAntragstellerName)
+				.orElseGet(() -> FALLBACK_ANTRAGSTELLER_NAME);
+	}
+
+	String buildAbsenderForIncomingNachricht(PostfachNachrichtPdfData postfachNachrichtPdfData) {
+		return Optional.ofNullable(postfachNachrichtPdfData.getUser()).map(user -> {
+			if (Objects.nonNull(user.getId()) && user.toString().startsWith(UserManagerUrlProvider.SYSTEM_USER_IDENTIFIER)) {
+				return SYSTEM_NACHRICHT_NAME;
+			}
+			return formatUserName(postfachNachrichtPdfData.getUser());
+		}).orElseGet(() -> FALLBACK_USER_NAME);
 	}
 
 	private String formatUserName(UserProfile user) {
 		return String.format("%s %s", user.getFirstName(), user.getLastName());
 	}
+
+	private String formatAntragstellerName(Antragsteller antragsteller) {
+		return String.format("%s %s", antragsteller.getVorname(), antragsteller.getNachname());
+	}
 }
\ No newline at end of file
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/common/user/UserProfileTestFactory.java b/goofy-server/src/test/java/de/itvsh/goofy/common/user/UserProfileTestFactory.java
index 226531aa45a4892e63c5adb9ba073c150a8d017b..0996dce79bae9174a0b708d289ae15cc3063d615 100644
--- a/goofy-server/src/test/java/de/itvsh/goofy/common/user/UserProfileTestFactory.java
+++ b/goofy-server/src/test/java/de/itvsh/goofy/common/user/UserProfileTestFactory.java
@@ -40,6 +40,8 @@ public class UserProfileTestFactory {
 	public static final String ROLE = "TEST_USER";
 	public static final GrantedAuthority AUTHORITY = new SimpleGrantedAuthority(ROLE);
 
+	public static final String SYSTEM_USER = "system_user_example";
+
 	public static UserProfile create() {
 		return createBuilder().build();
 	}
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/postfach/PostfachMailServiceTest.java b/goofy-server/src/test/java/de/itvsh/goofy/postfach/PostfachMailServiceTest.java
index 055882237d987758dc7079e52c1afa973b9f5eba..5fee86fc5c2f088e5acec53f45c3ee9cc976db71 100644
--- a/goofy-server/src/test/java/de/itvsh/goofy/postfach/PostfachMailServiceTest.java
+++ b/goofy-server/src/test/java/de/itvsh/goofy/postfach/PostfachMailServiceTest.java
@@ -332,7 +332,7 @@ class PostfachMailServiceTest {
 					}
 
 					@Test
-					void shouldHaveSetAsEmptyStringOnNull() {
+					void shouldHaveSetNullAsUser() {
 						var postfachNachricht = buildPostfachNachrichtPdfDataWithoutUser();
 
 						assertThat(postfachNachricht.getUser()).isNull();
@@ -368,5 +368,53 @@ class PostfachMailServiceTest {
 				assertThat(fileIds).isEmpty();
 			}
 		}
+
+		@DisplayName("get User")
+		@Nested
+		class TestGetUser {
+
+			@DisplayName("on existing client user")
+			@Nested
+			class TestOnExistingClientUser {
+
+				@Test
+				void shouldCallUserServiceOnExistingUser() {
+					service.getUser(PostfachMailTestFactory.create());
+
+					verify(userService).getById(UserProfileTestFactory.ID);
+				}
+
+				@Test
+				void shouldReturnUserProfileWithId() {
+					when(userService.getById(any())).thenReturn(UserProfileTestFactory.create());
+
+					var user = service.getUser(PostfachMailTestFactory.create());
+
+					assertThat(user.getId()).isEqualTo(UserProfileTestFactory.ID);
+				}
+			}
+
+			@DisplayName("on existing system user")
+			@Nested
+			class TestOnSystemUser {
+
+				private final PostfachMail postfachMail = PostfachMailTestFactory.createBuilder()
+						.createdBy(UserId.from(UserProfileTestFactory.SYSTEM_USER)).build();
+
+				@Test
+				void shouldNotCallUserService() {
+					service.getUser(postfachMail);
+
+					verify(userService, never()).getById(UserProfileTestFactory.ID);
+				}
+
+				@Test
+				void shouldReturnUserProfileWithId() {
+					var user = service.getUser(postfachMail);
+
+					assertThat(user.getId()).hasToString(UserProfileTestFactory.SYSTEM_USER);
+				}
+			}
+		}
 	}
 }
\ No newline at end of file
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/postfach/PostfachNachrichtPdfServiceTest.java b/goofy-server/src/test/java/de/itvsh/goofy/postfach/PostfachNachrichtPdfServiceTest.java
index 4ed6014afa34a6d728165a1f970ca05b3645d759..24f10a6e03eea3c428dd38a4a632556c46e00aa6 100644
--- a/goofy-server/src/test/java/de/itvsh/goofy/postfach/PostfachNachrichtPdfServiceTest.java
+++ b/goofy-server/src/test/java/de/itvsh/goofy/postfach/PostfachNachrichtPdfServiceTest.java
@@ -44,6 +44,7 @@ import org.springframework.util.ReflectionUtils;
 
 import de.itvsh.goofy.common.binaryfile.BinaryFileTestFactory;
 import de.itvsh.goofy.common.user.UserProfileTestFactory;
+import de.itvsh.goofy.postfach.PostfachMail.Direction;
 import de.itvsh.goofy.postfach.PostfachNachrichtPdfModel.Nachricht;
 import de.itvsh.goofy.vorgang.AntragstellerTestFactory;
 import de.itvsh.goofy.vorgang.VorgangHeaderTestFactory;
@@ -240,7 +241,7 @@ class PostfachNachrichtPdfServiceTest {
 				void shouldMapNachrichtCreatedAt() {
 					var nachricht = mapNachricht();
 
-					assertThat(nachricht.getCreatedAt()).isEqualTo("01.01.2000");
+					assertThat(nachricht.getCreatedAt()).isEqualTo("01.01.2000 01:00:00");
 				}
 
 				@Test
@@ -258,7 +259,63 @@ class PostfachNachrichtPdfServiceTest {
 				}
 
 				private Nachricht mapNachricht() {
-					return service.mapPostfachNachricht(PostfachNachrichtPdfDataTestFactory.create());
+					return service.mapPostfachNachricht(PostfachNachrichtPdfDataTestFactory.create(), AntragstellerTestFactory.create());
+				}
+
+				@DisplayName("for outgoing nachricht")
+				@Nested
+				class TestDirectionOut {
+
+					@DisplayName("build absender name")
+					@Nested
+					class TestBuildUserName {
+
+						private final PostfachNachrichtPdfData data = PostfachNachrichtPdfDataTestFactory.createBuilder().direction(Direction.IN)
+								.build();
+
+						@Test
+						void shouldReturnAntragstellerIfExists() {
+							var name = service.buildAbsenderName(data, AntragstellerTestFactory.create());
+
+							assertThat(name).isEqualTo(AntragstellerTestFactory.VORNAME + " " + AntragstellerTestFactory.NACHNAME);
+						}
+
+						@Test
+						void shouldReturnFallbackNameForAntragsteller() {
+							var name = service.buildAbsenderName(data, null);
+
+							assertThat(name).isEqualTo(PostfachNachrichtPdfService.FALLBACK_ANTRAGSTELLER_NAME);
+						}
+					}
+				}
+
+				@DisplayName("for incoming nachricht")
+				@Nested
+				class TestDirectionIn {
+
+					@DisplayName("build absender name")
+					@Nested
+					class TestBuildUserName {
+
+						private final PostfachNachrichtPdfData data = PostfachNachrichtPdfDataTestFactory.createBuilder().direction(Direction.OUT)
+								.build();
+
+						@Test
+						void shouldReturnUserProfileNameIfExists() {
+							var userName = service.buildAbsenderName(data, AntragstellerTestFactory.create());
+
+							assertThat(userName).isEqualTo(UserProfileTestFactory.FIRSTNAME + " " + UserProfileTestFactory.LASTNAME);
+						}
+
+						@Test
+						void shouldReturnFallbackNameForUserProfile() {
+							var name = service.buildAbsenderName(
+									PostfachNachrichtPdfDataTestFactory.createBuilder().direction(Direction.OUT).user(null).build(),
+									AntragstellerTestFactory.create());
+
+							assertThat(name).isEqualTo(PostfachNachrichtPdfService.FALLBACK_USER_NAME);
+						}
+					}
 				}
 			}
 		}