diff --git a/Classes/Controller/QueueController.php b/Classes/Controller/QueueController.php
index 9b1178d491cdbfd3c10091c3706ead290e13a56e..893b354f0e2ae0c3521b7e7922dae69a219a3fb9 100644
--- a/Classes/Controller/QueueController.php
+++ b/Classes/Controller/QueueController.php
@@ -182,6 +182,18 @@ class QueueController extends ActionController {
 		$this->redirect('index', NULL, NULL, $this->request->getArguments());
 	}
 
+	/**
+	 * Preview for a mail
+	 *
+	 * @param int $uid
+	 */
+	public function previewAction($uid): void {
+		$mailService = new MailTemplateService();
+		$mailToPreview = $mailService->getMailObjectByUid($uid);
+
+		$this->view->assign('mail', $mailToPreview);
+	}
+
 	/**
 	 * Download the queue data as a csv file, respecting the filter settings
 	 *
@@ -225,7 +237,8 @@ class QueueController extends ActionController {
 
 		// save the Template filter to the session
 		if (!isset($_SESSION[$this->session->getSessionKey()]['filterTemplate'])
-			|| (isset($_POST['filterTemplate']) && $this->session->getDataByKey('filterTemplate') !== $_POST['filterTemplate'])) {
+			|| (isset($_POST['filterTemplate'])
+				&& $this->session->getDataByKey('filterTemplate') !== $_POST['filterTemplate'])) {
 			$this->session->setDataByKey('filterTemplate', $_POST['filterTemplate']);
 		}
 
diff --git a/Classes/Service/MailTemplateService.php b/Classes/Service/MailTemplateService.php
index 83676e37fb1f933936cd83e47a76eab3811be098..4ff49106aacc60da944710ac379421ab256902eb 100644
--- a/Classes/Service/MailTemplateService.php
+++ b/Classes/Service/MailTemplateService.php
@@ -1263,7 +1263,7 @@ class MailTemplateService {
 	 * @param int $uid
 	 * @return bool|object
 	 */
-	private function getMailObjectByUid($uid) {
+	public function getMailObjectByUid($uid) {
 		if (version_compare(VersionNumberUtility::getCurrentTypo3Version(), '10.4.0', '<')) {
 			/** @var MailRepository $mailRepository */
 			$mailRepository = $this->objectManager->get(MailRepository::class);
diff --git a/Resources/Private/Language/de.locallang.xlf b/Resources/Private/Language/de.locallang.xlf
index 98b68fbbe1efc6aba403768f1ce3c0012ce549a2..0bdcf046cf34bee82dc787995eddab63063673e4 100644
--- a/Resources/Private/Language/de.locallang.xlf
+++ b/Resources/Private/Language/de.locallang.xlf
@@ -589,6 +589,30 @@ Die Templates declined und approved der Extension sg_comments sind fÞr alle Dom
 				<source><![CDATA[Do you want to send the newsletter to all recipients?]]></source>
 				<target><![CDATA[MÃķchten Sie den Newsletter an allen EmpfÃĪnger senden?]]></target>
 			</trans-unit>
+			<trans-unit id="backend.preview.date">
+				<source><![CDATA[Date]]></source>
+				<target><![CDATA[Datum]]></target>
+			</trans-unit>
+			<trans-unit id="backend.preview.from">
+				<source><![CDATA[From]]></source>
+				<target><![CDATA[Von]]></target>
+			</trans-unit>
+			<trans-unit id="backend.preview.subject">
+				<source><![CDATA[Subject]]></source>
+				<target><![CDATA[Betreff]]></target>
+			</trans-unit>
+			<trans-unit id="backend.preview.to">
+				<source><![CDATA[To]]></source>
+				<target><![CDATA[An]]></target>
+			</trans-unit>
+			<trans-unit id="backend.preview.cc">
+				<source><![CDATA[CC]]></source>
+				<target><![CDATA[CC]]></target>
+			</trans-unit>
+			<trans-unit id="backend.preview.bcc">
+				<source><![CDATA[BCC]]></source>
+				<target><![CDATA[BCC]]></target>
+			</trans-unit>
 		</body>
 	</file>
 </xliff>
diff --git a/Resources/Private/Language/locallang.xlf b/Resources/Private/Language/locallang.xlf
index 779454c18c6016855a4c2b68cb4d4a50d4643c33..5634e05a510907168fb333a0d85c9265cf0fbec4 100644
--- a/Resources/Private/Language/locallang.xlf
+++ b/Resources/Private/Language/locallang.xlf
@@ -441,6 +441,24 @@ The templates declined and approved of the sg_comments extension are blacklisted
 			<trans-unit id="backend.newsletter.confirm_send">
 				<source><![CDATA[Do you want to send the newsletter to all recipients?]]></source>
 			</trans-unit>
+			<trans-unit id="backend.preview.date">
+				<source><![CDATA[Date]]></source>
+			</trans-unit>
+			<trans-unit id="backend.preview.from">
+				<source><![CDATA[From]]></source>
+			</trans-unit>
+			<trans-unit id="backend.preview.subject">
+				<source><![CDATA[Subject]]></source>
+			</trans-unit>
+			<trans-unit id="backend.preview.to">
+				<source><![CDATA[To]]></source>
+			</trans-unit>
+			<trans-unit id="backend.preview.cc">
+				<source><![CDATA[CC]]></source>
+			</trans-unit>
+			<trans-unit id="backend.preview.bcc">
+				<source><![CDATA[BCC]]></source>
+			</trans-unit>
 		</body>
 	</file>
 </xliff>
diff --git a/Resources/Private/Layouts/Preview.html b/Resources/Private/Layouts/Preview.html
new file mode 100644
index 0000000000000000000000000000000000000000..380ad79e7b4f847028c637b6d3c690ec01aac724
--- /dev/null
+++ b/Resources/Private/Layouts/Preview.html
@@ -0,0 +1,7 @@
+{namespace sgm=SGalinski\SgMail\ViewHelpers}
+<head>
+	<link rel="stylesheet" href="{f:uri.resource(path: 'StyleSheets/preview.css')}">
+</head>
+<body>
+<f:render section="mailPreview"></f:render>
+</body>
diff --git a/Resources/Private/Templates/Queue/Index.html b/Resources/Private/Templates/Queue/Index.html
index 78f27d7829e45e8b2b79068dac468b204e21924c..c75f7eeb34a2560755db9897f0b76cb27419845f 100644
--- a/Resources/Private/Templates/Queue/Index.html
+++ b/Resources/Private/Templates/Queue/Index.html
@@ -1,91 +1,113 @@
 {namespace sgm=SGalinski\SgMail\ViewHelpers}
 
-<f:layout name="Queue" />
+<f:layout name="Queue"/>
 
 <f:section name="iconButtons">
 </f:section>
 
 <f:section name="content">
-	<f:flashMessages />
+	<f:flashMessages/>
 	<f:if condition="!{pages}">
-		<f:render partial="Queue/Filter" arguments="{filterFields: filterFields, filters: filters, languages: languages, templatesFilter: templatesFilter, selectedTemplateFilter: selectedTemplateFilter, selectedExtensionFilter: selectedExtensionFilter}" />
+		<f:render partial="Queue/Filter"
+				  arguments="{filterFields: filterFields, filters: filters, languages: languages, templatesFilter: templatesFilter, selectedTemplateFilter: selectedTemplateFilter, selectedExtensionFilter: selectedExtensionFilter}"/>
 		<f:if condition="{queue -> f:count()} > 0">
 			<f:then>
 				<div class="panel panel-default recordlist">
 					<div class="table-fit">
 						<table data-table="tx_sgmail_domain_model_mail" class="table table-striped table-hover">
-							<sgm:backend.widget.paginate objects="{queue}" as="paginatedMails" configuration="{insertAbove: 1, itemsPerPage: 20}">
+							<sgm:backend.widget.paginate objects="{queue}" as="paginatedMails"
+														 configuration="{insertAbove: 1, itemsPerPage: 20}">
 								<thead>
-									<tr>
-										<th></th>
-										<th><f:translate key="backend.from" /> <br> <f:translate key="backend.to" />
-										</th>
-										<th><f:translate key="backend.filter.extension" />:
-											<f:translate key="backend.filter.template" /> <br>
-											<f:translate key="backend.subject" /></th>
-										<th><f:translate key="backend.entry_date" /> <br>
-											<f:translate key="backend.last_sent" /></th>
-										<th></th>
-										<th></th>
-									</tr>
+								<tr>
+									<th></th>
+									<th>
+										<f:translate key="backend.from"/>
+										<br>
+										<f:translate key="backend.to"/>
+									</th>
+									<th>
+										<f:translate key="backend.filter.extension"/>
+										:
+										<f:translate key="backend.filter.template"/>
+										<br>
+										<f:translate key="backend.subject"/>
+									</th>
+									<th>
+										<f:translate key="backend.entry_date"/>
+										<br>
+										<f:translate key="backend.last_sent"/>
+									</th>
+									<th></th>
+									<th></th>
+								</tr>
 								</thead>
 								<tbody>
-									<f:for each="{paginatedMails}" as="mail">
-										<tr data-uid="{mail.uid}">
-											<td nowrap="nowrap" class="col-icon">
-												<sgm:backend.icon table="tx_sgmail_domain_model_mail" row="{mail}" />
-											</td>
-											<td>
-												<span>{mail.from_address}</span>
-												<hr>
-												<span>{mail.to_address}</span>
-											</td>
-											<td>
-												<span>{mail.extension_key}: {mail.template_name}</span>
-												<hr>
-												<f:if condition="{mail.mail_subject}">
-													<f:then>
-														<span><f:format.crop maxCharacters="40" append="...">{mail.mail_subject}</f:format.crop></span>
-													</f:then>
-													<f:else>
-														&nbsp;
-													</f:else>
-												</f:if>
+								<f:for each="{paginatedMails}" as="mail">
+									<tr data-uid="{mail.uid}">
+										<td nowrap="nowrap" class="col-icon">
+											<sgm:backend.icon table="tx_sgmail_domain_model_mail" row="{mail}"/>
+										</td>
+										<td>
+											<span>{mail.from_address}</span>
+											<hr>
+											<span>{mail.to_address}</span>
+										</td>
+										<td>
+											<span>{mail.extension_key}: {mail.template_name}</span>
+											<hr>
+											<f:if condition="{mail.mail_subject}">
+												<f:then>
+													<span><f:format.crop maxCharacters="40" append="...">{mail.mail_subject}</f:format.crop></span>
+												</f:then>
+												<f:else>
+													&nbsp;
+												</f:else>
+											</f:if>
 
-											</td>
-											<td>
-												<span><f:format.date format="d.m.Y H:i">{mail.crdate}</f:format.date></span>
-												<hr>
-												<f:if condition="{mail.last_sending_time} != 0">
-													<f:then>
-														<span><f:format.date format="d.m.Y H:i">{mail.last_sending_time}</f:format.date></span>
-													</f:then>
-													<f:else>
-														<f:translate key="backend.not_sent" />
-													</f:else>
-												</f:if>
-											</td>
-											<td nowrap="nowrap" class="col-control">
-												<sgm:backend.control table="tx_sgmail_domain_model_mail" row="{mail}" />
-											</td>
-											<td>
-												<f:if condition="{mail.blacklisted}">
-													<f:then>
-														<b><f:translate key="backend.queue.blacklisted" /></b>
-													</f:then>
-													<f:else>
-														<f:link.action class="btn btn-default btn-send-now" controller="Queue" action="sendMail" arguments="{uid: mail.uid, selectedTemplate: selectedTemplateKey, selectedExtension: selectedExtensionKey}">
-														<span class="t3js-icon icon icon-size-small icon-state-default actions-document-import-t3d">
+										</td>
+										<td>
+											<span><f:format.date format="d.m.Y H:i">{mail.crdate}</f:format.date></span>
+											<hr>
+											<f:if condition="{mail.last_sending_time} != 0">
+												<f:then>
+													<span><f:format.date
+														format="d.m.Y H:i">{mail.last_sending_time}</f:format.date></span>
+												</f:then>
+												<f:else>
+													<f:translate key="backend.not_sent"/>
+												</f:else>
+											</f:if>
+										</td>
+										<td nowrap="nowrap" class="col-control">
+											<sgm:backend.control table="tx_sgmail_domain_model_mail" row="{mail}"/>
+										</td>
+										<td>
+											<f:if condition="{mail.blacklisted}">
+												<f:then>
+													<b>
+														<f:translate key="backend.queue.blacklisted"/>
+													</b>
+												</f:then>
+												<f:else>
+													<f:link.action class="btn btn-default btn-send-now"
+																   controller="Queue" action="sendMail"
+																   arguments="{uid: mail.uid, selectedTemplate: selectedTemplateKey, selectedExtension: selectedExtensionKey}">
+														<span
+															class="t3js-icon icon icon-size-small icon-state-default actions-document-import-t3d">
 															<span class="icon-markup">
-																<img src="/typo3/sysext/core/Resources/Public/Icons/T3Icons/actions/actions-document-import-t3d.svg" width="16" height="16">
+																<core:icon identifier="actions-document-import-t3d"/>
 															</span>
 														</span>
-															<f:translate key="backend.send_now" />
-														</f:link.action>
-													</f:else>
-												</f:if>
-											</td>
-									</f:for>
+														<f:translate key="backend.send_now"/>
+													</f:link.action>
+												</f:else>
+											</f:if>
+											<button class="btn btn-default btn-preview"
+													onClick="MailPreviewWindow{mail.uid}=window.open('{f:uri.action( controller: 'Queue', action: 'preview', noCacheHash: true, arguments: {uid: mail.uid, selectedTemplate: selectedTemplateKey, selectedExtension: selectedExtensionKey})}','MailPreviewWindow{mail.uid}','width=1200,height=768'); return false;">
+												<core:icon identifier="actions-view-page"/>
+											</button>
+										</td>
+								</f:for>
 								</tbody>
 							</sgm:backend.widget.paginate>
 						</table>
@@ -93,27 +115,27 @@
 				</div>
 			</f:then>
 			<f:else>
-				<f:render partial="Queue/Empty" />
+				<f:render partial="Queue/Empty"/>
 			</f:else>
 		</f:if>
 	</f:if>
 
 	<f:if condition="{pages}">
-		<f:render partial="Mail/Empty" />
+		<f:render partial="Mail/Empty"/>
 		<div class="panel panel-default recordlist">
 			<div class="table-fit">
 				<table data-table="pages" class="table table-striped table-hover">
 					<tbody>
-						<f:for each="{pages}" as="page">
-							<tr data-uid="{page.pid}">
-								<td nowrap="nowrap" class="col-title">
-									<f:link.action action="index" additionalParams="{id: page.uid, returnUrl: returnUrl}">
-										<sgm:backend.icon table="pages" row="{page}" clickMenu="0" />
-										{page._thePathFull}
-									</f:link.action>
-								</td>
-							</tr>
-						</f:for>
+					<f:for each="{pages}" as="page">
+						<tr data-uid="{page.pid}">
+							<td nowrap="nowrap" class="col-title">
+								<f:link.action action="index" additionalParams="{id: page.uid, returnUrl: returnUrl}">
+									<sgm:backend.icon table="pages" row="{page}" clickMenu="0"/>
+									{page._thePathFull}
+								</f:link.action>
+							</td>
+						</tr>
+					</f:for>
 					</tbody>
 				</table>
 			</div>
diff --git a/Resources/Private/Templates/Queue/Preview.html b/Resources/Private/Templates/Queue/Preview.html
new file mode 100644
index 0000000000000000000000000000000000000000..ee57f58fde17f7d903aa2afe96641b35b1e57bec
--- /dev/null
+++ b/Resources/Private/Templates/Queue/Preview.html
@@ -0,0 +1,74 @@
+<f:layout name="Preview"/>
+
+<f:section name="mailPreview">
+	<div class="mail-header">
+		<table>
+			<tr>
+				<th>
+					<f:translate key="backend.preview.date"/>
+				</th>
+				<td>
+					<f:format.date format="d.m.Y H:i">
+						<f:format.stripTags>{mail.sendingTime}</f:format.stripTags>
+					</f:format.date>
+				</td>
+			</tr>
+
+			<tr>
+				<th>
+					<f:translate key="backend.preview.from"/>
+				</th>
+				<td>
+					<f:format.stripTags>{mail.fromName}</f:format.stripTags>
+					&lt;<f:format.stripTags>{mail.fromAddress}</f:format.stripTags>&gt;
+				</td>
+			</tr>
+
+			<tr>
+				<th>
+					<f:translate key="backend.preview.subject"/>
+				</th>
+				<td>
+					<strong>
+						<f:format.stripTags>{mail.mailSubject}</f:format.stripTags>
+					</strong>
+				</td>
+			</tr>
+
+			<tr>
+				<th>
+					<f:translate key="backend.preview.to"/>
+				</th>
+				<td class="ng-binding">
+					<f:format.stripTags>{mail.toAddress}</f:format.stripTags>
+				</td>
+			</tr>
+
+			<f:if condition="{mail.ccAddresses}">
+				<tr>
+					<th>
+						<f:translate key="backend.preview.cc"/>
+					</th>
+					<td class="ng-binding">
+						<f:format.stripTags>{mail.ccAddresses}</f:format.stripTags>
+					</td>
+				</tr>
+			</f:if>
+
+			<f:if condition="{mail.bccAddresses}">
+				<tr>
+					<th>
+						<f:translate key="backend.preview.bcc"/>
+					</th>
+					<td class="ng-binding">
+						<f:format.stripTags>{mail.bccAddresses}</f:format.stripTags>
+					</td>
+				</tr>
+			</f:if>
+		</table>
+	</div>
+
+	<div class="mail-body">
+		<iframe class="mail-body-iframe" srcdoc="{mail.mailBody}" sandbox></iframe>
+	</div>
+</f:section>
diff --git a/Resources/Public/StyleSheets/preview.css b/Resources/Public/StyleSheets/preview.css
new file mode 100644
index 0000000000000000000000000000000000000000..0ff0c1f1e077c78c6842a6a9cef27073e727a86c
--- /dev/null
+++ b/Resources/Public/StyleSheets/preview.css
@@ -0,0 +1,41 @@
+* {
+	font-family: Sans-Serif;
+}
+
+body {
+	margin: 0;
+}
+
+.mail-header {
+	border-bottom: 1px solid #666;
+	padding: 5px 7px;
+}
+
+.mail-header tbody td {
+	width: 100%;
+	font-size: 15px;
+}
+
+.mail-header tbody th {
+	white-space: nowrap;
+	text-align: right;
+	color: #666;
+	font-weight: normal;
+	font-size: 15px;
+}
+
+.mail-header table td,
+.mail-header table th {
+	padding: 2px 7px;
+}
+
+.mail-body {
+	padding: 10px;
+}
+
+.mail-body-iframe{
+	border: none;
+	width: 100%;
+	max-width: 1280px;
+	height:100vh;
+}
diff --git a/ext_tables.php b/ext_tables.php
index 2b892c35fa7be3437adfa0de3fe0d4091de37450..e1195c77f357bc301a5ff5dc0d4c754716393f7d 100644
--- a/ext_tables.php
+++ b/ext_tables.php
@@ -32,7 +32,7 @@ call_user_func(
 			'',
 			[
 				'Mail' => 'index, sendTestMail, empty, reset',
-				'Queue' => 'index, sendMail, export',
+				'Queue' => 'index, sendMail, export, preview',
 				'Configuration' => 'index, create, edit, delete',
 				'Layout' => 'index',
 				'Newsletter' => 'index, sendTestMail, empty',