瀏覽代碼

new DNS handling

andre 2 年之前
父節點
當前提交
fc9d0e726b
共有 2 個文件被更改,包括 466 次插入196 次删除
  1. 321 120
      zimbraEmail_help_mx.tpl
  2. 145 76
      zimbraEmail_mx.php

+ 321 - 120
zimbraEmail_help_mx.tpl

@@ -1,128 +1,329 @@
-<h2>Information zum MX Eintrag für {$maildomain}</h2>
+<h2>DNS Einstellungen für E-Mail @{$maildomain}</h2>
 <hr>
 
 <div class="row">
-    <div class="col-xl-9 primary-content left-layout">
-	<div class="section">
-	    <div class="row row-eq-height row-eq-height-sm">
-                <div class="col-md-5">
-		    {$LANG.clientareaproductdetails}
-    		</div>
-	        <div class="col-md-7">
-    		    {$product}
-        	</div>
-    	    </div>
-        </div>
-	<div class="section" style="margin-top: 0px">
-	    <div class="row row-eq-height row-eq-height-sm">
-		<div class="col-md-5">
-    		    Domain
+    <div class="col-xl-12 primary-content left-layout">
+{* debug		
+		mx: {$mx}<br>
+		selfDNS: {$selfDNS}<br>
+		multiMX: {$multiMX}<br>
+		mxtarget: {$mxtarget}<br>
+		domainMX:
+		{foreach $domainMX as $MX}
+			{$MX->preference} {$MX->exchange}<br>
+		{/foreach}
+		SPF: {$spf}<br>
+		multiSPF: {$multiSPF}<br>
+		domainSPF:
+		{foreach $domainSPF as $record}
+			TXT "{$record}"<br>
+		{/foreach}
+*}
+		<div class="row row-eq-height row-eq-height-sm">
+			<div class="col-md-6">
+				<div class="section">
+					<div class="center">
+						<h4>Mails empfangen (MX Eintrag)
+					</div>
+					{if $mx === 'set' && $selfDNS == true && $multiXM == false}
+						<div class="alert alert-success" style="width:90%">
+							Der MX Eintrag ist richtig konfiguriert. Ihr Mailserver empfängt E-Mails für <b>{$maildomain}</b>
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Mailserver für {$maildomain}:
+							<div><small>
+								{$mxtarget}
+							</small></div>
+						</div>
+					{elseif $mx === 'set' && $selfDNS == true && $multiMX == true}
+						<div class="alert alert-info" style="width:90%">
+							Ein MX Eintrag mit für {$maildomain} zeigt auf diesen Mailserver. 
+							Es wurden aber weitere MX Einträge für {$maildomain} konfiguriert.
+							<div><small>
+								{foreach $domainMX as $MX}
+									Priorität: {$MX->preference} Ziel: {$MX->exchange}{if $MX->exchange == $mxtarget} ✔ {/if}<br>
+								{/foreach}
+							</small></div>
+							Bitte prüfen Sie die Einstellungen und korrigieren Sie diese gegebenenfalls.
+						</div>
+					{elseif $mx === 'set' && $selfDNS == false && $multiMX == true}
+						<div class="alert alert-info" style="width:90%">
+							Ein MX Eintrag mit für {$maildomain} zeigt auf diesen Mailserver. 
+							Es wurden aber weitere MX Einträge für {$maildomain} konfiguriert.
+							<div><small>
+								{foreach $domainMX as $MX}
+									Priorität: {$MX->preference} Ziel: {$MX->exchange}{if $MX->exchange == $mxtarget} ✔ {/if}<br>
+								{/foreach}
+							</small></div>
+							Bitte prüfen Sie die Einstellungen und korrigieren Sie diese gegebenenfalls.
+							Wenn Sie zukünftig Ihre DNS Einträge über Ihr ThurData Portal einfach verwalten wollen, 
+							können Sie Ihre Domain {$maildomain} auch transferieren lassen.
+						</div>
+					{elseif $mx === 'set' && $selfDNS == false && $multiMX == false}
+						<div class="alert alert-success" style="width:90%">
+							Der MX Eintrag ist richtig konfiguriert. Ihr Mailserver empfängt E-Mails für <b>{$maildomain}</b>
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Mailserver für {$maildomain}:
+							<div><small>
+								{$mxtarget}
+							</small></div>
+						</div>
+					{elseif $mx === 'unset' && $selfDNS == false}
+						<div class="alert alert-warning" style="width:90%">
+							Es ist kein MX Eintrag für <b>{$maildomain}</b> konfiguriert.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Damit dieser Server E-Mails für @{$maildomain} empfangen kann, müssen Sie bei Ihrem DNS Server einen MX Eintrag für die Domain {$maildomain} mit Ziel <b>{$mxtarget}</b> hinzufügen.<br>
+							Wenn Sie zukünftig Ihre DNS Einträge über Ihr ThurData Portal einfach verwalten wollen, 
+							können Sie Ihre Domain {$maildomain} auch transferieren lassen.
+						</div>
+					{elseif $mx === 'unset' && $selfDNS == true}
+						<div class="alert alert-warning" style="width:90%">
+							Es ist kein MX Eintrag für <b>{$maildomain}</b> konfiguriert.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Damit dieser Server E-Mails für @{$maildomain} empfangen kann, muß ein MX Eintrag für die Domain {$maildomain} mit Ziel {$mxtarget} hinzugefügt werden.
+						</div>
+						<form method="post" action="clientarea.php?action=productdetails">
+							<input type="hidden" name="id" value="{$id}" />
+							<input type="hidden" name="modop" value="custom" />
+							<input type="hidden" name="a" value="setMX" />
+							<button type="submit" class="btn btn-primary" title="automatisch konfigurieren">
+								MX {$LANG.orderconfigure}
+							</button>
+						</form>
+					{elseif $mx === 'wrong' && $selfDNS == true && $multiMX == false}
+						<div class="alert alert-warning" style="width:90%">
+							Der MX Eintrag für <b>{$maildomain}</b> ist nicht für diesen Mailserver konfiguriert.
+							E-Mails an @{$maildomain} werden an den Server {$mxtarget} geschickt.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Damit dieser Server E-Mails für @{$maildomain} empfangen kann, muß ein MX Eintrag für die Domain {$maildomain} korrigiert werden.
+							Bitte beachten Sie, das nach dem Hinzufügen des Eintrags die DNS Replikation abgewartet werden muß.
+						</div>
+						<form method="post" action="clientarea.php?action=productdetails">
+							<input type="hidden" name="id" value="{$id}" />
+							<input type="hidden" name="modop" value="custom" />
+							<input type="hidden" name="a" value="setMX" />
+							<button type="submit" class="btn btn-primary" title="automatisch korrigieren">
+								MX {$LANG.orderconfigure}
+							</button>
+						</form>
+					{elseif $mx === 'wrong' && $selfDNS == true && $multiMX == true}
+						<div class="alert alert-warning" style="width:90%">
+							Der MX Eintrag für <b>{$maildomain}</b> ist nicht für diesen Mailserver konfiguriert.
+							Folgende Mailserver sind für @{$maildomain} konfiguriert:<br>
+							<div><small>
+								{foreach $domainMX as $MX}
+									Priorität: {$MX->preference} Ziel: {$MX->exchange}<br>
+								{/foreach}
+							</small></div>
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Damit dieser Server E-Mails für @{$maildomain} empfangen kann, ein MX Eintrag für die Domain {$maildomain} mit Ziel {$mxtarget} hinzugefügt werden.
+							Bitte beachten Sie, das nach dem Hinzufügen des Eintrags die DNS Replikation abgewartet werden muß.
+						</div>
+						<form method="post" action="clientarea.php?action=productdetails">
+							<input type="hidden" name="id" value="{$id}" />
+							<input type="hidden" name="modop" value="custom" />
+							<input type="hidden" name="a" value="setMX" />
+							<button type="submit" class="btn btn-primary">
+								MX {$LANG.orderconfigure}
+							</button>
+						</form>
+					{elseif $mx === 'wrong' && $selfDNS == false}
+						<div class="alert alert-warning" style="width:90%">
+							Der MX Eintrag für <b>{$maildomain}</b> ist nicht für diesen Mailserver konfiguriert.
+							E-Mails an @{$maildomain} werden an den Server {$mxtarget} geschickt.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Damit dieser Server E-Mails für @{$maildomain} empfangen kann, muß der MX Eintrag für die Domain {$maildomain} auf das Ziel {$mxtarget} geändert werden.
+							Bitte beachten Sie, das nach dem Hinzufügen des Eintrags die DNS Replikation abgewartet werden muß.
+							Wenn Sie zukünftig Ihre DNS Einträge über Ihr ThurData Portal einfach verwalten wollen, 
+							können Sie Ihre Domain {$maildomain} auch transferieren lassen.
+						</div>
+					{else}
+						{* sollte nie erreicht werden *}
+						<div class="alert alert-warning" style="width:90%">
+							Beim Versuche, den MX Eintrag für <b>{$maildomain}</b> zu ermitteln, ist ein Fehler aufgetreten.
+							Bitte versuchen Sie es später noch einmal!
+						</div>
+					{/if}
+				</div>
+			</div>
+			<div class="col-md-6">
+				<div class="section">
+					<div class="center">
+						<h4>Mails verschicken (SPF Eintrag)
+					</div>
+					{if $spf === 'set' && $multiSPF == false}
+						<div class="alert alert-success" style="width:90%">
+							Der SPF Eintrag für Ihren Mailserver ist richtig konfiguriert.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							SPF Eintrag für {$maildomain}:
+							<div><small>
+								{$domainSPF.0}
+							</small></div>
+						</div>
+					{elseif $spf === 'set' && $selfDNS == false && $multiSPF == true}
+						<div class="alert alert-info" style="width:90%">
+							Ein korrekter SPF Eintrag für {$maildomain} existiert. 
+							Es wurden aber weitere SPF Einträge für {$maildomain} erkannt.
+							<div><small>
+								{foreach $domainSPF as $SPF}
+									{$SPF}<br>
+								{/foreach}
+							</small></div>
+							Bitte prüfen Sie die Einstellungen bei Ihrem DNS Anbieter und korrigieren Sie diese gegebenenfalls.
+							Wenn Sie zukünftig Ihre DNS Einträge über Ihr ThurData Portal einfach verwalten wollen, 
+							können Sie Ihre Domain {$maildomain} auch transferieren lassen.
+						</div>
+					{elseif $spf === 'set' && $selfDNS == true && $multiSPF == true}
+						<div class="alert alert-info" style="width:90%">
+							Ein korrekter SPF Eintrag für {$maildomain} existiert. 
+							Es wurden aber weitere SPF Einträge für {$maildomain} erkannt.
+							<div><small>
+								{foreach $domainSPF as $SPF}
+									{$SPF}<br>
+								{/foreach}
+							</small></div>
+							Bitte prüfen Sie die Einstellungen und korrigieren Sie diese gegebenenfalls.
+						</div>
+					{elseif $spf === 'unset' && $selfDNS == false}
+						<div class="alert alert-warning" style="width:90%">
+							Es ist kein SPF Eintrag für <b>{$maildomain}</b> konfiguriert.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Ein falscher SPF Eintrag führt zu Zustellungsproblemen bei einigen E-Mail Providern. Thurdata empfiehlt die Einrichtung eines 
+							SPF Eintrags (Type TXT) in Ihrer Nameserver Verwaltung mit folgendem Inhalt:
+							<div><small>
+								'v=spf1 mx a:mail3.seecure.ch ip4:185.163.51.0/24 ip4:89.35.78.0/23 ~all'
+							</small></div>
+						</div>
+					{elseif $spf === 'unset' && $selfDNS == true}
+						<div class="alert alert-warning" style="width:90%">
+							Es ist kein SPF Eintrag für <b>{$maildomain}</b> konfiguriert.
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Ein fehlender SPF Eintrag führt zu Zustellungsproblemen bei einigen E-Mail Providern. 
+							Bitte prüfen Sie die Einstellungen und korrigieren Sie diese gegebenenfalls.
+						</div>
+						<div class="col-md-4">
+							<form method="post" action="clientarea.php?action=productdetails">
+								<input type="hidden" name="id" value="{$id}" />
+								<input type="hidden" name="modop" value="custom" />
+								<input type="hidden" name="a" value="setSPF" />
+								<button type="submit" class="btn btn-primary" title="automatisch korrigieren">
+									SPF {$LANG.orderconfigure}
+								</button>
+							</form>
+						</div>
+					{elseif $spf === 'wrong' && $selfDNS == true && $multiSPF == false}
+						<div class="alert alert-warning" style="width:90%">
+							Der SPF Eintrag für <b>{$maildomain}</b> ist falsch oder entspricht nicht unser Empfehlung.
+							SPF Eintrag für {$maildomain}:
+							<div><small>
+								{$domainSPF.0}
+							</small></div>
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Ein falscher SPF Eintrag führt zu Zustellungsproblemen bei einigen E-Mail Providern. 
+						</div>
+						<form method="post" action="clientarea.php?action=productdetails">
+							<input type="hidden" name="id" value="{$id}" />
+							<input type="hidden" name="modop" value="custom" />
+							<input type="hidden" name="a" value="setSPF" />
+							<button type="submit" class="btn btn-primary" title="automatisch korrigieren">
+								SPF {$LANG.orderconfigure}
+							</button>
+						</form>
+					{elseif $spf === 'wrong' && $selfDNS == false && $multiSPF == true}
+						<div class="alert alert-warning" style="width:90%">
+							Der SPF Eintrag für <b>{$maildomain}</b> ist falsch oder entspricht nicht unser Empfehlung.
+							SPF Einträge für {$maildomain}:
+							<div><small>
+								{foreach $domainSPF as $record}
+									TXT "{$record}"<br>
+								{/foreach}
+							</small></div>
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Ein falscher SPF Eintrag führt zu Zustellungsproblemen bei einigen E-Mail Providern. 
+							Bitte prüfen Sie die Einstellungen bei Ihrem DNS Anbieter und korrigieren Sie diese gegebenenfalls.
+							Wenn Sie zukünftig Ihre DNS Einträge über Ihr ThurData Portal einfach verwalten wollen, 
+							können Sie Ihre Domain {$maildomain} auch transferieren lassen.
+						</div>
+					{elseif $spf === 'wrong' && $selfDNS == false && $multiSPF == false}
+						<div class="alert alert-warning" style="width:90%">
+							Der SPF Eintrag für <b>{$maildomain}</b> ist falsch oder entspricht nicht unser Empfehlung.
+							SPF Eintrag für {$maildomain}:
+							<div><small>
+								{$domainSPF.0}
+							</small></div>
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Ein falscher SPF Eintrag führt zu Zustellungsproblemen bei einigen E-Mail Providern. 
+							Bitte prüfen Sie die Einstellungen bei Ihrem DNS Anbieter und korrigieren Sie diese gegebenenfalls.
+							Wenn Sie zukünftig Ihre DNS Einträge über Ihr ThurData Portal einfach verwalten wollen, 
+							können Sie Ihre Domain {$maildomain} auch transferieren lassen.
+						</div>
+					{elseif $spf === 'wrong' && $selfDNS == true && $multiSPF == true}
+						<div class="alert alert-warning" style="width:90%">
+							Der SPF Eintrag für <b>{$maildomain}</b> ist falsch oder entspricht nicht unser Empfehlung.
+							SPF Einträge für {$maildomain}:
+							<div><small>
+								{foreach $domainSPF as $record}
+									TXT "{$record}"<br>
+								{/foreach}
+							</small></div>
+						</div>
+						<div class="alert alert-info" style="width:90%">
+							Ein falscher SPF Eintrag führt zu Zustellungsproblemen bei einigen E-Mail Providern. 
+							Bitte prüfen Sie die Einstellungen und korrigieren Sie diese gegebenenfalls.
+						</div>
+						<form method="post" action="clientarea.php?action=productdetails">
+							<input type="hidden" name="id" value="{$id}" />
+							<input type="hidden" name="modop" value="custom" />
+							<input type="hidden" name="a" value="setSPF" />
+							<button type="submit" class="btn btn-primary" title="automatisch korrigieren">
+								SPF {$LANG.orderconfigure}
+							</button>
+						</form>
+					{else}
+						{* sollte nie erreicht werden *}
+						<div class="alert alert-warning" style="width:90%">
+							Beim Versuche, den SPF Eintrag für <b>{$maildomain}</b> zu ermitteln, ist ein Fehler aufgetreten.
+							Bitte versuchen Sie es später noch einmal!
+						</div>
+					{/if}
+				</div>
+			</div>
 		</div>
-		<div class="col-md-7">
-    		    {$maildomain}
+		<div class="clear">
+			<br /><hr /><br />
 		</div>
-	    </div>
-	</div>
-	<div class="section">
-	    {if $action === 'show'}
-		<div class="alert alert-success" style="width:90%">
-	            Der MX Eintrag ist richtig konfiguriert. Ihr Mailserver empfängt E-Mails für <b>{$maildomain}</b>
-	        </div>
-	        <div class="alert alert-info" style="width:90%">
-	            Mailserver für {$maildomain}: {$mxtarget}
-	        </div>
-	    {elseif $action === 'set'}
-	        <div class="alert alert-warning" style="width:90%">
-	            Der MX Eintrag fehlt. Ihr Mailserver empfängt keine E-Mails für <b>{$maildomain}</b> !
-	        </div>
-	        <div class="alert alert-info">
-	            Klicken Sie auf <b>MX konfigurieren</b> um den Mailempfang für <b>{$maildomain}</b auf Ihr Thurmail Produkt zu aktivieren.
-	        </div>
-	    {elseif $action === 'change'}
-	        <div class="alert alert-warning" style="width:90%">
-	            Der MX Eintrag ist falsch. Ihr Mailserver empfängt keine E-Mails für <b>{$maildomain}</b> !<br>
-	            Mail für <b>{$maildomain}</b werden an den Server <b>{$mxtarget}</b> verschickt.
-	        </div>
-	        <div class="alert alert-info" style="width:90%">
-	            Klicken Sie auf <b>MX konfigurieren</b> um den Mailempfang für <b>{$maildomain}</b auf Ihr Thurmail Produkt zu aktivieren.
-	        </div>
-	    {elseif $action === 'noMX'}
-	        <div class="alert alert-warning" style="width:90%">
-	            Der MX Eintrag fehlt. Ihr Mailserver empfängt keine E-Mails für <b>{$maildomain}</b> !
-	        </div>
-	        <div class="alert alert-info" style="width:90%">
-		    Sie müssen den MX Eintrag bei Ihrem DNS-Hoster konfigurieren.<br>
-	            Alternativ bieten wir Ihnen die Option, Ihre Domain <b>{$maildomain}</b><br />
-	            zu uns zu transferieren und hier im Portal zu verwalten.
-	        </div>
-	    {elseif $action === 'wrongMX'}
-	        <div class="alert alert-warning" style="width:90%">
-	            Der MX Eintrag ist falsch. Ihr Mailserver empfängt keine E-Mails für <b>{$maildomain}</b> !<br>
-	            Mail für <b>{$maildomain}</b> werden an den Server <b>{$mxtarget}</b> verschickt.
-	        </div>
-	        <div class="alert alert-info" style="width:90%">
-	            Sie müssen den MX Eintrag bei Ihrem DNS-Hoster anpassen.<br>
-	            Alternativ bieten wir Ihnen die Option, Ihre Domain <b>{$maildomain}</b><br />
-	            zu uns zu transferieren und hier im Portal zu verwalten.
-	        </div>
-	    {elseif $action === 'manual'}
-	        <div class="alert alert-warning" style="width:90%">
-	            Es wurden mehrere MX Einträge für <b>{$maildomain}</b> gefunden.
-	        </div>
-	        <div class="alert alert-info" style="width:90%">
-	            Sie haben bereits mehrere MX Einträge für Ihre Domain <b>{$maildomain}</b> konfiguriert.<br>
-	            Da Sie Ihre Domain bei uns verwalten können Sie den DNS-Manager aufrufen, um Ihre MX Einträge zu prüfen.
-	        </div>
-	    {elseif $action === 'manualext'}
-	        <div class="alert alert-warning" style="width:90%">
-	            Es wurden mehrere MX Einträge für <b>{$maildomain}</b> bei einem externen Registrar gefunden.
-	        </div>
-	        <div class="alert alert-info" style="width:90%">
-	            Sie haben mehrere MX Einträge für Ihre Domain <b>{$maildomain}</b> bereits anderweitig konfiguriert.<br>
-	            Sie können Ihre MX Einträge bei Ihrem Registrar prüfen.<br>
-	            Alternativ bieten wir Ihnen die Option, Ihre Domain <b>{$maildomain}</b><br />
-	            zu uns zu transferieren und hier im Portal zu verwalten.
-	        </div>
-	    {/if}
-	</div>
-	<div class="clear"><br /><br /><br /></div>
-	<div class="section">
-	    <div class="row row-eq-height row-eq-height-sm">
-		<div class="col-md-4">
-    		    <form method="post" action="clientarea.php?action=productdetails">
-	        	<input type="hidden" name="id" value="{$id}" />
-    			<button type="submit" class="btn btn-default btn-block">
-            		    {$LANG.clientareabacklink}
-	        	</button>
-    		    </form>
-		</div>
-		<div class="col-md-4">
-		    {if $action === 'show'}
-		    {elseif $action === 'set' || $action === 'change'}
-    			<form method="post" action="clientarea.php?action=productdetails">
-	        	    <input type="hidden" name="id" value="{$id}" />
-    			    <input type="hidden" name="modop" value="custom" />
-	        	    <input type="hidden" name="a" value="setMX" />
-	        	    <button type="submit" class="btn btn-default btn-block">
-    		    		MX {$LANG.orderconfigure}
-	        	    </button>
-	    		</form>
-    		    {elseif $action === 'manual'}
-    			<form method="post" action="clientarea.php?action=domaindns&domainid={$domainId}">
-	        	    <button type="submit" class="btn btn-default btn-block">
-    		    		{$LANG.domaindnsmanagement}
-	        	    </button>
-	    		</form>
-		    {else}
-    			<form method="post" action="cart.php?a=add&domain=transfer">
-			    <input type="hidden" name="sld" value="{$maildomain}" />
-	        	    <button type="submit" class="btn btn-default btn-block">
-            			{$LANG.domainstransfer} {$maildomain}
-	        	    </button>
-    			</form>
-		    {/if}
+		<div class="row row-eq-height row-eq-height-sm">
+			<div class="col-md-4">
+				<form method="post" action="clientarea.php?action=productdetails&id={$id}">
+					<input type="hidden" name="id" value="{$id}" />
+					<button type="submit" class="btn btn-default">
+						{$LANG.clientareabacklink}
+					</button>
+				</form>
+			</div>
+			{* Wenn bei Fehlern die Domain nicht selbst verwaltet wird, biete Domaintransfer an *}
+			{if $selfDNS == false && ($multiMX == true || $mx != 'set' || $multiSPF == true || $spf != 'set')}
+				<div class="col-md-4">
+					<form method="post" action="cart.php?a=add&domain=transfer">
+						<input type="hidden" name="sld" value="{$maildomain}" />
+						<button type="submit" class="btn btn-primary">
+							{$LANG.domainstransfer} {$maildomain}
+						</button>
+					</form>
+				</div>
+			{/if}
 		</div>
-	    </div>
 	</div>
-    </div>
 </div>

+ 145 - 76
zimbraEmail_mx.php

@@ -9,93 +9,35 @@ require_once 'Net/DNS2.php';
 const NS1 = '185.163.51.130';
 const NS2 = '185.163.51.131';
 const MX  = 'mail1.thurdata.ch';
+const SPF = 'v=spf1 mx a:mail1.thurdata.ch ip4:185.163.51.0/24 ip4:89.35.78.0/23 ~all';
 
 function ZimbraEmail_ClientAreaCustomButtonArray ($params)
 {
-    $mxStatus = ZimbraEmailCheckMX($params);
-    switch($mxStatus['action']) {
-        case 'set':
-            return array(
-                'MX Info' => 'infoMX',
-                'MX Setzen' => 'setMX',
-            );
-        case 'change':
-            return array(
-                'MX Info' => 'infoMX',
-                'MX Ändern' => 'setMX',
-            );
-        default:
-            return array(
-                'MX Info' => 'infoMX',
-            );
-    }
+    return array(
+        'DNS-Settings' => 'DNS',
+    );
 }
 
-function ZimbraEmail_infoMX($params)
+function ZimbraEmail_ClientAreaAllowedFunctions ($params)
 {
-    $mxStatus = ZimbraEmailCheckMX($params);
     return array(
-        'breadcrumb' => array(
-            'clientarea.php?action=productdetails&id=' . $params['serviceid'] . '&modop=custom&a=infoMX' => 'MX Info',
-        ),
-        'templatefile' => 'zimbraEmail_help_mx',
-        'vars' => array(
-            'maildomain' => $params['domain'],
-            'action' => $mxStatus['action'],
-            'mxtarget' => (isset($mxStatus['mxtarget']) ? $mxStatus['mxtarget'] : 'false'),
-        ),
+        'MX konfigurieren' => 'setMX',
+        'SPF konfigurieren' => 'setSPF',
     );
 }
 
-function ZimbraEmailCheckMX($params)
+function ZimbraEmail_DNS($params)
 {
-    unset($zoneID);
-    unset($mxStatus);
-    $clientDomains = localAPI('GetClientsDomains', array('clientid' => $params['userid']));
-    $nameserver = array(
-        NS1,
-        NS2);
-    
-    $resolver = new Net_DNS2_Resolver(array('nameservers' => $nameserver));
-    try {
-            $result = $resolver->query($params['domain'], 'MX');
-            
-    } catch(Net_DNS2_Exception $e) {
-            
-            echo "::query() failed: ", $e->getMessage(), "\n";
-    }
-    $domainMX = $result->answer;
-    if(count($domainMX) > 1) {
-        for($i=$clientDomains['startnumber'];$i<=$clientDomains['numreturned'];$i++) {
-            if($params['domain'] == $clientDomains['domains']['domain'][$i]['domainname']) {
-                return array('action' => 'manual', 'mxtarget' => $domainMX);
-            }
-        }
-        return array('action' => 'manualext', 'mxtarget' => $domainMX);
-    }
-    if(empty($domainMX)){
-        for($i=$clientDomains['startnumber'];$i<=$clientDomains['numreturned'];$i++) {
-            if($params['domain'] == $clientDomains['domains']['domain'][$i]['domainname']) {
-                return array('action' => 'set');
-            }
-        }
-        return array('action' => 'noMX');
-    } else {
-        $domainMXrecord = array_shift($domainMX);
-//        if($domainMXrecord['target'] == $params['serverhostname']) {
-        if($domainMXrecord->exchange == MX) {
-            return array('action' => 'show', 'mxtarget' => $domainMXrecord->exchange);
-        }
-        for($i=$clientDomains['startnumber'];$i<=$clientDomains['numreturned'];$i++) {
-            if($params['domain'] == $clientDomains['domains']['domain'][$i]['domainname']) {
-                return array('action' => 'change', 'mxtarget' => $domainMXrecord->exchange);
-            }
-        }
-        return array('action' => 'wrongMX', 'mxtarget' => $domainMXrecord->exchange);
-    }
+    $vars = ZimbraEmailCheckDNS($params);
+    return array(
+        'breadcrumb' => array(
+            'clientarea.php?action=productdetails&id=' . $params['serviceid'] . '&modop=custom&a=DNS' => 'DNS Mail Settings',
+        ),
+        'templatefile' => 'ZimbraEmail_help_mx',
+        'vars' => $vars,
+    );
 }
 
-
 function ZimbraEmail_setMX($params)
 {
     $zoneIDcollection = Capsule::table('dns_manager2_zone')
@@ -119,13 +61,58 @@ function ZimbraEmail_setMX($params)
         'class' => 'IN',
         'data' => array(
             'preference' => '10',
-//            'exchange' => $params['serverhostname'],
             'exchange' => MX,
         ),
     );
     array_push($zoneRecords, $mxRecord);
     foreach($dnsZone['data']->records as $record) {
-        if($record->type != 'MX') {
+    if($record->type != 'MX') {
+            array_push($zoneRecords, $record);
+        };
+    }
+    $result = localAPI('dnsmanager' ,
+        array(
+            'dnsaction' => 'updateZone',
+            'zone_id' => $zoneID,
+            'records' => $zoneRecords,
+        )
+    );
+    if($result['result'] != 'success') {
+        return 'Error: cloud not update zone for ID ' . $zoneID;
+    }
+    return 'success';
+}
+
+function ZimbraEmail_setSPF($params)
+{
+    $zoneIDcollection = Capsule::table('dns_manager2_zone')
+        ->select('id')
+        ->where('name', '=', $params['domain'])
+        ->get();
+    $zoneIDobj = $zoneIDcollection[0];
+    $zoneID = $zoneIDobj->{'id'};
+    if(!isset($zoneID)) {
+        return 'Error: zone ID not found for domain ' . $params['domain'];
+    }
+    $dnsZone = localAPI('dnsmanager', array( 'dnsaction' => 'getZone', 'zone_id' => $zoneID));
+    if($dnsZone['result'] != 'success') {
+        return 'Error: cloud not fetch zone for ID ' . $zoneID;
+    }
+    $zoneRecords = array();
+    $spfRecord = array(
+            'line' => $params['domain'].'.|TXT|0',
+            'name' => '@',
+            'type' => 'TXT',
+            'class' => 'IN',
+            'data' => SPF
+        );
+    array_push($zoneRecords, $spfRecord);
+
+    foreach($dnsZone['data']->records as $record) {
+
+        if(!$record->type === 'TXT'){
+            array_push($zoneRecords, $record);
+        } elseif (!preg_match('/^v=spf(.*)$/i', trim($record->rdata->txtdata,'"'))) {
             array_push($zoneRecords, $record);
         };
     }
@@ -136,9 +123,91 @@ function ZimbraEmail_setMX($params)
             'records' => $zoneRecords,
         )
     );
+
     if($result['result'] != 'success') {
         return 'Error: cloud not update zone for ID ' . $zoneID;
     }
     return 'success';
 }
 
+function ZimbraEmailCheckDNS($params)
+{
+    unset($zoneID);
+    unset($mxStatus);
+    unset($dnsData);
+    unset($vars);
+    $vars['maildomain'] = $params['domain'];
+    $clientDomains = localAPI('GetClientsDomains', array('clientid' => $params['userid']));
+    $nameserver = array(
+        NS1,
+        NS2);
+    
+    $resolver = new Net_DNS2_Resolver(array('nameservers' => $nameserver));
+    try {
+            $result = $resolver->query($params['domain'], 'MX');
+            
+    } catch(Net_DNS2_Exception $e) {
+            
+            echo "::query() failed: ", $e->getMessage(), "\n";
+    }
+    $domainMX = $result->answer;
+    try {
+        $result = $resolver->query($params['domain'], 'TXT');
+        
+    } catch(Net_DNS2_Exception $e) {
+            
+            echo "::query() failed: ", $e->getMessage(), "\n";
+    }
+    $domainTXT = $result->answer;
+    $domainSPF = array();
+    foreach($domainTXT as $txtRecord) {
+        foreach($txtRecord->text as $txtData) {
+            if(strstr($txtData,'v=spf')) {
+                array_push($domainSPF,$txtData);
+            }
+        }
+    }
+    if (count($domainSPF) > 1) {
+        $vars['multiSPF'] = TRUE;
+    } else {
+        $vars['multiSPF'] = FALSE;
+    }
+    $vars['spf'] = 'wrong';
+    if (empty($domainSPF)) {
+        $vars['spf'] = 'unset';
+    } else {        
+        foreach($domainSPF as $spf) {
+            if($spf === SPF) {
+                $vars['spf'] = 'set';
+            }
+        }
+    }
+    $vars['domainSPF'] = $domainSPF;
+    if(count($domainMX) > 1) {
+        $vars['multiMX'] = TRUE;
+    } else {
+        $vars['multiMX'] = FALSE;
+    }
+    $vars['selfDNS'] = FALSE;
+    for($i=$clientDomains['startnumber'];$i<=$clientDomains['numreturned'];$i++) {
+        if($params['domain'] == $clientDomains['domains']['domain'][$i]['domainname']) {
+            $vars['selfDNS'] = TRUE;
+            $vars['domainId'] = $clientDomains['domains']['domain'][$i]['id'];
+        }
+    }
+    if(empty($domainMX)){
+        $vars['mx'] = 'unset';
+        $vars['mxtarget'] = MX;
+    } else {
+        $vars['domainMX'] = $domainMX;
+        $domainMXrecord = array_shift($domainMX);
+        $vars['mxtarget'] = $domainMXrecord->exchange;
+        if($domainMXrecord->exchange == MX) {
+            $vars['mx'] = 'set';
+        } else {
+            $var['mx'] = 'wrong';
+        }
+    }
+    return $vars;
+}
+