This commit is contained in:
Daniel Seifert 2023-12-12 11:28:18 +01:00
parent e40614aa0e
commit 0dbd956a68
Signed by: DanielS
GPG Key ID: 8A7C4C6ED1915C6F
15 changed files with 435 additions and 334 deletions

View File

@ -31,9 +31,7 @@ class MailCheckBase extends AdminController
public function render(): string
{
$this->addTplParam('sListClass', MailCheckMenu::class);
$this->addTplParam('sMainClass', setMainController::class);
$this->_hasListItems = false;
$this->addTplParam('sMainClass', MailConfigCheck::class);
return parent::render();
}

View File

@ -47,18 +47,18 @@ class MailConfigCheck extends AdminDetailsController
Assert::lazy()
->setExceptionClass(d3TranslatableLazyAssertionException::class)
->that( $shop->getFieldData( 'oxsmtp' ), $lang->translateString('SHOP_MAIN_SMTPSERVER') )
->notBlank( $lang->translateString('D3_ASSERTIONS_NOTSET') )
->regex( '/.*:(587|2525)$/m', $lang->translateString('D3_ASSERTIONS_NOPORT') )
->notBlank( $lang->translateString('D3_MAILCHECKER_ASSERTIONS_NOTSET') )
->regex( '/.*:(587|2525)$/m', $lang->translateString('D3_MAILCHECKER_ASSERTIONS_NOPORT') )
->that( $shop->getFieldData( 'oxsmtpuser' ), $lang->translateString('SHOP_MAIN_SMTPUSER') )
->notBlank( $lang->translateString('D3_ASSERTIONS_NOTSET') )
->notBlank( $lang->translateString('D3_MAILCHECKER_ASSERTIONS_NOTSET') )
->that( $shop->getFieldData( 'oxsmtppwd' ), $lang->translateString('SHOP_MAIN_SMTPPASSWORD') )
->notBlank( $lang->translateString('D3_ASSERTIONS_NOTSET') )
->notBlank( $lang->translateString('D3_MAILCHECKER_ASSERTIONS_NOTSET') )
->that( $shop->getFieldData( 'oxinfoemail' ), $lang->translateString('SHOP_MAIN_INFOEMAIL') )
->email( $lang->translateString('D3_ASSERTIONS_NOTSET') )
->email( $lang->translateString('D3_MAILCHECKER_ASSERTIONS_NOTSET') )
->that( $shop->getFieldData( 'oxorderemail' ), $lang->translateString('SHOP_MAIN_ORDEREMAIL') )
->email( $lang->translateString('D3_ASSERTIONS_NOTSET') )
->email( $lang->translateString('D3_MAILCHECKER_ASSERTIONS_NOTSET') )
->that( $shop->getFieldData( 'oxowneremail' ), $lang->translateString('SHOP_MAIN_OWNEREMAIL') )
->email( $lang->translateString('D3_ASSERTIONS_NOTSET') )
->email( $lang->translateString('D3_MAILCHECKER_ASSERTIONS_NOTSET') )
->verifyNow();
} catch (InvalidArgumentException $e) {
Registry::getUtilsView()->addErrorToDisplay(nl2br($e->getMessage()));

View File

@ -15,9 +15,79 @@
namespace D3\MailConfigChecker\Application\Controller\Admin;
use Assert\Assert;
use D3\MailConfigChecker\Application\Model\Exception\d3TranslatableLazyAssertionException;
use OxidEsales\Eshop\Application\Controller\Admin\AdminDetailsController;
use OxidEsales\Eshop\Core\Email;
use OxidEsales\Eshop\Core\Registry;
class MailTester extends AdminDetailsController
{
protected $_sThisTemplate = 'mailTester.tpl';
public function sendMail()
{
try {
$request = Registry::getRequest();
$from = trim($request->getRequestEscapedParameter( 'from' ));
$this->addTplParam('sender', $from);
$to = trim($request->getRequestEscapedParameter( 'to' ));
$this->addTplParam('recipient', $to);
$subject = trim($request->getRequestEscapedParameter( 'subject' ));
$this->addTplParam('subject', $subject);
$body = trim($request->getRequestEscapedParameter( 'body' ));
$this->addTplParam('body', $body);
$this->assertContent();
$mail = oxNew( Email::class );
$mail->setFrom( $from );
$mail->sendEmail($to, $subject, $body);
$this->addTplParam('success', true);
} catch (\Exception $e) {
Registry::getUtilsView()->addErrorToDisplay(nl2br($e->getMessage()));
}
}
protected function assertContent()
{
$request = Registry::getRequest();
$lang = Registry::getLang();
Assert::lazy()
->setExceptionClass(d3TranslatableLazyAssertionException::class)
->that(
$request->getRequestEscapedParameter( 'from' ),
$lang->translateString('D3_MAILCHECKER_SMTPCHECK_SENDER')
)->email($lang->translateString('D3_MAILCHECKER_ASSERTIONS_NOTSET'))
->that(
$request->getRequestEscapedParameter( 'to' ),
$lang->translateString('D3_MAILCHECKER_SMTPCHECK_RECIPIENT')
)->email($lang->translateString('D3_MAILCHECKER_ASSERTIONS_NOTSET'))
->that(
$request->getRequestEscapedParameter( 'subject' ),
$lang->translateString('D3_MAILCHECKER_TESTMAIL_SUBJECT')
)->notBlank($lang->translateString('D3_MAILCHECKER_ASSERTIONS_NOTSET'))
->that(
$request->getRequestEscapedParameter( 'body' ),
$lang->translateString('D3_MAILCHECKER_TESTMAIL_BODY')
)->notBlank($lang->translateString('D3_MAILCHECKER_ASSERTIONS_NOTSET'))
->verifyNow();
}
public function getMailAddressList()
{
$shop = Registry::getConfig()->getActiveShop();
return array_filter(
array_unique(
[
$shop->getFieldData('oxinfoemail'),
$shop->getFieldData('oxorderemail'),
$shop->getFieldData('oxowneremail'),
]
)
);
}
}

View File

@ -26,16 +26,18 @@ use PEAR_Error;
class SmtpChecker extends AdminDetailsController
{
protected bool $debug = true;
protected $debug = true;
protected string $host;
protected string $user;
protected string $from;
protected string $to;
protected $host;
protected $port;
protected $user;
protected $pwd;
protected $from;
protected $to;
protected Net_SMTP $smtp;
protected string $action;
protected array $log = [];
protected $smtp;
protected $action;
protected $log = [];
public function __construct()
{
@ -44,20 +46,24 @@ class SmtpChecker extends AdminDetailsController
/** @var Shop $activeShop */
$activeShop = Registry::getConfig()->getActiveShop();
list('host' => $shopHost, 'port' => $shopPort) = parse_url($activeShop->getFieldData('oxsmtp'));
if ($localHost = Registry::getRequest()->getRequestEscapedParameter('smtpHost')) {
list( 'host' => $shopHost, 'port' => $shopPort ) = parse_url( trim($localHost) );
} else {
list( 'host' => $shopHost, 'port' => $shopPort ) = parse_url( trim($activeShop->getFieldData( 'oxsmtp' )) );
}
$this->host = Registry::getRequest()->getRequestEscapedParameter('smtpHost') ?: $shopHost;
$this->host = $shopHost ?? null;
$this->addTplParam('smtpHost', Registry::getRequest()->getRequestEscapedParameter('smtpHost'));
$this->port = Registry::getRequest()->getRequestEscapedParameter('smtpHost') ? (Registry::getRequest()->getRequestEscapedParameter('smtpPort') ?: null) : $shopPort;
$this->addTplParam('smtpPort', Registry::getRequest()->getRequestEscapedParameter('smtpPort'));
$this->port = $shopPort ?? null;
$this->user = Registry::getRequest()->getRequestEscapedParameter('smtpUser') ?: $activeShop->getFieldData('oxsmtpuser');
$this->addTplParam('smtpUser', Registry::getRequest()->getRequestEscapedParameter('smtpUser'));
$this->addTplParam('smtpUser', $this->user);
$this->pwd = Registry::getRequest()->getRequestEscapedParameter('smtpPwd') ?: $activeShop->getFieldData('oxsmtppwd');
$this->addTplParam('smtpPwd', Registry::getRequest()->getRequestEscapedParameter('smtpPwd'));
$this->from = Registry::getRequest()->getRequestEscapedParameter('from') ?: Registry::getRequest()->getRequestEscapedParameter('fromCust') ?: '';
$this->addTplParam('from', Registry::getRequest()->getRequestEscapedParameter('from'));
$this->addTplParam('fromCust', Registry::getRequest()->getRequestEscapedParameter('fromCust'));
$this->addTplParam('smtpPwd', $this->pwd);
$this->from = Registry::getRequest()->getRequestEscapedParameter('from') ?: '';
$this->addTplParam('from', $this->from);
$this->to = Registry::getRequest()->getRequestEscapedParameter('to') ?: '';
$this->addTplParam('recipient', $this->to);
$this->addTplParam('sendMail', Registry::getRequest()->getRequestEscapedParameter('sendmail'));
$this->addTplParam('smtpLog', $this->log);
}
@ -67,6 +73,13 @@ class SmtpChecker extends AdminDetailsController
return 'smtpCheck.tpl';
}
public function render()
{
$this->addTplParam('shop', Registry::getConfig()->getActiveShop());
return parent::render();
}
public function getMailAddressList()
{
$shop = Registry::getConfig()->getActiveShop();
@ -91,6 +104,7 @@ class SmtpChecker extends AdminDetailsController
$this->setFrom();
$this->setRecipient();
$this->sendContent();
$this->addTplParam('success', true);
} catch (InvalidArgumentException $e) {
Registry::getUtilsView()->addErrorToDisplay($e);
} finally {
@ -100,10 +114,6 @@ class SmtpChecker extends AdminDetailsController
$this->addTplParam('smtpLog', $this->log);
}
protected function checkDataAreSet()
{
}
/**
* @throws InvalidArgumentException
* @return void
@ -111,16 +121,27 @@ class SmtpChecker extends AdminDetailsController
protected function hostIsAvailable()
{
$this->action = __FUNCTION__;
Assert::that(( $this->smtp = new Net_SMTP( $this->host, $this->port ) ))
->isInstanceOf(Net_SMTP::class, 'Unable to instantiate SMTP object');
Assert::that(
( $this->smtp = new Net_SMTP( $this->host, $this->port ) ),
Registry::getLang()->translateString('D3_MAILCHECKER_SMTPCHECK_INSTANCE')
)->isInstanceOf(
Net_SMTP::class,
Registry::getLang()->translateString('D3_MAILCHECKER_SMTPCHECK_NOCONNECTION')
);
$this->smtp->setDebug($this->debug, [$this, 'dumpDebug']);
}
protected function connect()
{
$this->action = __FUNCTION__;
Assert::that($this->smtp->connect())
->notIsInstanceOf(PEAR_Error::class, [$this, 'formatMessage'], 'can not connect');
Assert::that(
$this->smtp->connect(),
Registry::getLang()->translateString('D3_MAILCHECKER_SMTPCHECK_CONNECTION')
)->notIsInstanceOf(
PEAR_Error::class,
[$this, 'formatMessage'],
Registry::getLang()->translateString('D3_MAILCHECKER_SMTPCHECK_NOCONNECTION')
);
}
/**
@ -130,42 +151,65 @@ class SmtpChecker extends AdminDetailsController
protected function auth()
{
$this->action = __FUNCTION__;
Assert::that($this->smtp->auth($this->user, $this->pwd))
->notIsInstanceOf(PEAR_Error::class, [$this, 'formatMessage'], 'auth failed');
Assert::that(
$this->smtp->auth($this->user, $this->pwd),
Registry::getLang()->translateString('D3_MAILCHECKER_SMTPCHECK_AUTHENTICATION')
)->notIsInstanceOf(
PEAR_Error::class,
[$this, 'formatMessage'],
Registry::getLang()->translateString('D3_MAILCHECKER_SMTPCHECK_NOAUTHENTICATION')
);
}
protected function setFrom()
{
$this->action = __FUNCTION__;
Assert::that($this->smtp->mailFrom($this->from))
->notIsInstanceOf(PEAR_Error::class, [$this, 'formatMessage'], 'unable to set sender "'.$this->from.'"');
Assert::that(
$this->smtp->mailFrom($this->from),
Registry::getLang()->translateString('D3_MAILCHECKER_SMTPCHECK_SENDER')
)->notIsInstanceOf(
PEAR_Error::class,
[$this, 'formatMessage'],
sprintf(Registry::getLang()->translateString('D3_MAILCHECKER_SMTPCHECK_NOSENDER'), $this->from)
);
}
protected function setRecipient()
{
$this->action = __FUNCTION__;
Assert::that(( $this->smtp->rcptTo( $this->to)))
->notIsInstanceOf(PEAR_Error::class, [$this, 'formatMessage'], 'unable to set recipient "'.$this->to.'"');
Assert::that(
$this->smtp->rcptTo( $this->to),
Registry::getLang()->translateString('D3_MAILCHECKER_SMTPCHECK_RECIPIENT')
)->notIsInstanceOf(
PEAR_Error::class,
[$this, 'formatMessage'],
sprintf(Registry::getLang()->translateString('D3_MAILCHECKER_SMTPCHECK_NORECIPIENT'), $this->to)
);
}
protected function sendContent()
{
if (!Registry::getRequest()->getRequestEscapedParameter('sendMail')) {
if (!Registry::getRequest()->getRequestEscapedParameter('sendmail')) {
return;
}
$this->action = __FUNCTION__;
$subj = "Subject: Test Message\n";
$body = "Body Line 1\nBody Line 2";
Assert::that($this->smtp->data( $subj . "\r\n" . $body))
->notIsInstanceOf(PEAR_Error::class, [$this, 'formatMessage'], 'unable to send content');
Assert::that(
$this->smtp->data( $subj . "\r\n" . $body),
Registry::getLang()->translateString('D3_MAILCHECKER_SMTPCHECK_TRANSMIT')
)->notIsInstanceOf(
PEAR_Error::class,
[$this, 'formatMessage'],
Registry::getLang()->translateString('D3_MAILCHECKER_SMTPCHECK_NOTRANSMIT')
);
}
protected function disconnect()
{
$this->action = __FUNCTION__;
Assert::that($this->smtp->disconnect())
->notIsInstanceOf(PEAR_Error::class, [$this, 'formatMessage'], 'unable to disconnect');
$this->smtp->disconnect();
}
public function dumpDebug($smtp, $message)

View File

@ -15,19 +15,14 @@ declare(strict_types=1);
namespace D3\MailConfigChecker\Application\Controller\Admin;
use Assert\Assert;
use Assert\InvalidArgumentException;
use D3\MailConfigChecker\Application\Model\SpfResult;
use Mika56\SPFCheck\DNS\DNSRecordGetter;
use Mika56\SPFCheck\Model\Query;
use Mika56\SPFCheck\Model\Result;
use Mika56\SPFCheck\SPFCheck;
use Net_SMTP;
use OxidEsales\Eshop\Application\Controller\Admin\AdminDetailsController;
use OxidEsales\Eshop\Application\Model\Shop;
use OxidEsales\Eshop\Core\Registry;
use PEAR;
use PEAR_Error;
class SpfChecker extends AdminDetailsController
{
@ -61,9 +56,16 @@ class SpfChecker extends AdminDetailsController
array_map(
function($mailAddress) {
$mailAddress = trim($mailAddress);
return strstr($mailAddress, '@') ?
array_pop(explode('@', $mailAddress)) :
'';
try {
if ( ! strstr( $mailAddress, '@' ) ) {
throw oxNew( InvalidArgumentException::class );
}
$addressChunks = explode( '@', $mailAddress );
return array_pop( $addressChunks );
} catch (InvalidArgumentException $e) {
return '';
}
},
[
Registry::getConfig()->getActiveShop()->getFieldData('oxinfoemail'),

View File

@ -20,14 +20,14 @@ use OxidEsales\Eshop\Core\Registry;
class d3TranslatableLazyAssertionException extends LazyAssertionException
{
public static function fromErrors(array $errors): self
public static function fromErrors(array $errors): LazyAssertionException
{
$text = Registry::getLang()->translateString('D3_ASSERTIONS_FAILED');
$message = \sprintf($text, \count($errors))."\n";
$text = Registry::getLang()->translateString('D3_MAILCHECKER_ASSERTIONS_FAILED');
$message = sprintf( $text, count( $errors ) ) . "\n";
$i = 1;
foreach ($errors as $error) {
$message .= \sprintf("%d) %s: %s\n", $i++, $error->getPropertyPath(), $error->getMessage());
$message .= sprintf( "%d) %s: %s\n", $i ++, $error->getPropertyPath(), $error->getMessage() );
}
return new static($message, $errors);

View File

@ -20,8 +20,8 @@ class SpfResult
const MISSING = 'missing';
const ERROR = 'error';
protected string $status;
protected ?string $record;
protected $status;
protected $record;
public function __construct(string $status, ?string $record = null)
{

View File

@ -2,9 +2,13 @@
<style>
* {
font-size: 12px;
box-sizing: initial;
}
a {
color: inherit;
text-decoration: inherit;
}
select {
box-sizing: border-box;
}
</style>

View File

@ -1,4 +1,5 @@
[{include file="headitem.tpl" title="d3mxd3cleartmp"|oxmultilangassign}]
[{include file="inc_bootstrap.tpl"}]
[{if $readonly}]
[{assign var="readonly" value="readonly disabled"}]
@ -12,7 +13,49 @@
<input type="hidden" name="cl" value="[{$oViewConf->getActiveClassName()}]">
</form>
...
[{if $success}]
<div class="alert alert-success">[{oxmultilang ident="D3_MAILCHECKER_TESTMAIL_SUCCESS"}]</div>
[{/if}]
<div class="col-12 col-md-10 col-lg-8 mb-4">
[{oxmultilang ident="D3_MAILCHECKER_TESTMAIL_DESC"}]
</div>
<div class="row">
<div class="col-12 col-md-6 col-lg-4 mb-4">
<form name="myedit" id="myedit" action="[{$oViewConf->getSelfLink()}]" method="post">
[{$oViewConf->getHiddenSid()}]
<input type="hidden" name="cl" value="[{$oViewConf->getActiveClassName()}]">
<input type="hidden" name="fnc" value="sendMail">
<div>
<label class="col-4 form-label" for="sender">[{oxmultilang ident="D3_MAILCHECKER_SMTPCHECK_SENDER"}]</label>
<select name="from" class="col-7 editinput" id="sender">
[{foreach from=$oView->getMailAddressList() item="address"}]
<option value="[{$address}]" [{if $sender == $address}]selected[{/if}]>[{$address}]</option>
[{/foreach}]
</select>
</div>
<div>
<label class="col-4 form-label" for="recipient">[{oxmultilang ident="D3_MAILCHECKER_SMTPCHECK_RECIPIENT"}]</label>
<input name="to" type="text" class="col-7 editinput" size="35" maxlength="255" id="recipient" value="[{$recipient}]">
</div>
<div>
<label class="col-4 form-label" for="subject">[{oxmultilang ident="D3_MAILCHECKER_TESTMAIL_SUBJECT"}]</label>
<input type="text" class="col-7 editinput" id="subject" maxlength="255" name="subject" value="[{$subject}]">
</div>
<div>
<label class="col-4 form-label" for="body">[{oxmultilang ident="D3_MAILCHECKER_TESTMAIL_BODY"}]</label>
<textarea name="body" class="col-7 editinput" id="body" maxlength="255" style="height: 100px">[{strip}]
[{$body}]
[{/strip}]</textarea>
</div>
<div>
<button type="submit" class="btn btn-primary offset-4">[{oxmultilang ident="D3_MAILCHECKER_TESTMAIL_SENDMAIL"}]</button>
</div>
</form>
</div>
</div>
[{include file="bottomnaviitem.tpl"}]

View File

@ -43,13 +43,13 @@
<div class="col-12 col-md-6 col-lg-4">
[{if $mailer}]
<div>
[{oxmultilang ident="D3_CFGCHECK_SHOPSEND" suffix="COLON"}]
[{oxmultilang ident="D3_MAILCHECKER_CFGCHECK_SHOPSEND" suffix="COLON"}]
[{if $mailer == 'mail'}]
<button type="button" class="btn btn-danger">[{oxmultilang ident="D3_CFGCHECK_SHOPSEND_PHPMAILER"}]</button><br>
[{oxmultilang ident="D3_CFGCHECK_SHOPSEND_PHPMAILER_DESC"}]
<button type="button" class="btn btn-danger">[{oxmultilang ident="D3_MAILCHECKER_CFGCHECK_SHOPSEND_PHPMAILER"}]</button><br>
[{oxmultilang ident="D3_MAILCHECKER_CFGCHECK_SHOPSEND_PHPMAILER_DESC"}]
[{else}]
<span class="btn btn-success">[{oxmultilang ident="D3_CFGCHECK_SHOPSEND_SMTP"}]</span><br>
[{oxmultilang ident="D3_CFGCHECK_SHOPSEND_SMTP_DESC"}]
<span class="btn btn-success">[{oxmultilang ident="D3_MAILCHECKER_CFGCHECK_SHOPSEND_SMTP"}]</span><br>
[{oxmultilang ident="D3_MAILCHECKER_CFGCHECK_SHOPSEND_SMTP_DESC"}]
[{/if}]
</div>
[{else}]
@ -57,7 +57,7 @@
[{$oViewConf->getHiddenSid()}]
<input type="hidden" name="cl" value="[{$oViewConf->getActiveClassName()}]">
<input type="hidden" name="fnc" value="checkConfiguration">
<button type="submit" class="btn btn-primary">[{oxmultilang ident="D3_CFGCHECK_STARTCHECK"}]</button>
<button type="submit" class="btn btn-primary">[{oxmultilang ident="D3_MAILCHECKER_CFGCHECK_STARTCHECK"}]</button>
</form>
[{/if}]
</div>

View File

@ -1,10 +1,12 @@
[{include file="headitem.tpl" title="GENERAL_ADMIN_TITLE"|oxmultilangassign}]
[{include file="inc_bootstrap.tpl"}]
<style type="text/css">
.col-6 {
float: left;
width: 48%;
padding: 15px;
<style>
.communicationoutput,
.communicationoutput dl dt,
.communicationoutput dl dd {
background-color: black;
color: white;
}
</style>
@ -16,213 +18,79 @@
<input type="hidden" name="editlanguage" value="[{$editlanguage}]">
</form>
<h3>SMTP Test</h3>
[{if $success}]
<div class="alert alert-success">[{oxmultilang ident="D3_MAILCHECKER_SMTPCHECK_SUCCESS"}]</div>
[{/if}]
<div class="col-6">
<form name="myedit" id="myedit" action="[{$oViewConf->getSelfLink()}]" method="post">
[{$oViewConf->getHiddenSid()}]
<input type="hidden" name="cl" value="[{$oViewConf->getActiveClassName()}]">
<input type="hidden" name="fnc" value="sendMail">
<label for="smtpHost">Host</label>
<input id="smtpHost" type="text" name="smtpHost" value="[{$smtpHost}]">
<label for="smtpPort">Port</label>
<input id="smtpPort" type="text" name="smtpPort" value="[{$smtpPort}]">
<br>
<label for="smtpUser">User</label>
<input id="smtpUser" type="text" name="smtpUser" value="[{$smtpUser}]">
<label for="smtpPwd">Passwort</label>
<input id="smtpPwd" type="password" name="smtpPwd" value="[{$smtpPwd}]">
<br>
<label for="from">From</label>
<select name="from" id="from">
[{foreach from=$oView->getMailAddressList() item="address"}]
<option>[{$address}]</option>
[{/foreach}]
</select>
<label for="fromCust">From Cust</label>
<input id="fromCust" type="text" name="fromCust">
<br>
<label for="to">To</label>
<input id="to" type="text" name="to" value="test@daniel-seifert.com">
<br>
<label for="sendMail">send mail</label>
<input id="sendMail" type="checkbox" name="sendMail" value="1">
<br>
<input type="submit">
</form>
</div>
<div class="col-6">
[{foreach from=$smtpLog key="action" item="logItems" name="actionList"}]
<dl>
<dt>[{$smarty.foreach.actionList.iteration}] - [{$action}]</dt>
<dd>
<ul>
[{foreach from=$logItems item="logItem"}]
<li>
[{$logItem}]
</li>
<div class="row">
<div class="col-12 col-md-6 col-lg-4 mb-4">
<p>
[{oxmultilang ident="D3_MAILCHECKER_SMTPCHECK_DESC1"}]
</p>
<p>
[{oxmultilang ident="D3_MAILCHECKER_SMTPCHECK_DESC2"}]
</p>
<p>
[{oxmultilang ident="D3_MAILCHECKER_SMTPCHECK_DESC3"}]
</p>
<form name="myedit" id="myedit" action="[{$oViewConf->getSelfLink()}]" method="post">
[{$oViewConf->getHiddenSid()}]
<input type="hidden" name="cl" value="[{$oViewConf->getActiveClassName()}]">
<input type="hidden" name="fnc" value="sendMail">
<div>
<label class="col-4 form-label" for="oxshops__oxsmtp">[{oxmultilang ident="SHOP_MAIN_SMTPSERVER"}]</label>
<input type="text" class="col-7 editinput" size="35" maxlength="[{$shop->oxshops__oxsmtp->fldmax_length}]" id="oxshops__oxsmtp" name="smtpHost" value="[{if $smtpHost}][{$smtpHost}][{else}][{$shop->getFieldData('oxsmtp')}][{/if}]">
</div>
<div>
<label class="col-4 form-label" for="oxshops__oxsmtpuser">[{oxmultilang ident="SHOP_MAIN_SMTPUSER"}]</label>
<input type="text" class="col-7 editinput" size="35" maxlength="[{$shop->oxshops__oxsmtpuser->fldmax_length}]" id="oxshops__oxsmtpuser" name="smtpUser" value="[{if $smtpUser}][{$smtpUser}][{else}][{$shop->getFieldData('oxsmtpuser')}][{/if}]">
</div>
<div>
<label class="col-4 form-label" for="oxshops__oxsmtppwd">[{oxmultilang ident="SHOP_MAIN_SMTPPASSWORD"}]</label>
<input type="text" class="col-7 editinput" size="35" maxlength="[{$shop->oxshops__oxsmtppwd->fldmax_length}]" id="oxshops__oxsmtppwd" name="smtpPwd" value="[{if $smtpPwd}][{$smtpPwd}][{else}][{$shop->getFieldData('oxsmtppwd')}][{/if}]">
</div>
<div>
<label class="col-4 form-label" for="sender">[{oxmultilang ident="D3_MAILCHECKER_SMTPCHECK_SENDER"}]</label>
<select name="from" class="col-7 editinput" id="sender">
[{foreach from=$oView->getMailAddressList() item="address"}]
<option value="[{$address}]">[{$address}]</option>
[{/foreach}]
</ul>
</dd>
</dl>
[{/foreach}]
</select>
</div>
<div>
<label class="col-4 form-label" for="recipient">[{oxmultilang ident="D3_MAILCHECKER_SMTPCHECK_RECIPIENT"}]</label>
<input name="to" type="text" class="col-7 editinput" size="35" maxlength="255" id="recipient" value="[{$recipient}]">
</div>
<div>
<label class="col-4 form-label" for="sendmail">[{oxmultilang ident="D3_MAILCHECKER_SMTPCHECK_TESTSENDMAIL"}]</label>
<input type="checkbox" class="col-7 editinput" id="sendmail" name="sendmail" value="1" [{if $sendMail}]checked[{/if}]>
</div>
<div>
<button type="submit" class="btn btn-primary offset-4">[{oxmultilang ident="D3_MAILCHECKER_SMTPCHECK_STARTTEST"}]</button>
</div>
</form>
</div>
<div class="col-12 col-md-6 col-lg-4 mb-4 [{if $smtpLog}]communicationoutput[{/if}]">
[{foreach from=$smtpLog key="action" item="logItems" name="actionList"}]
<dl>
<dt>[{$smarty.foreach.actionList.iteration}] - [{$action}]</dt>
<dd>
<ul>
[{foreach from=$logItems item="logItem"}]
<li>
[{$logItem}]
</li>
[{/foreach}]
</ul>
</dd>
</dl>
[{/foreach}]
</div>
</div>
[{*<form name="myedit" id="myedit" action="[{$oViewConf->getSelfLink()}]" method="post" style="padding: 0;margin: 0;height:0;">*}]
[{* [{$oViewConf->getHiddenSid()}]*}]
[{* <input type="hidden" name="cl" value="[{$oViewConf->getActiveClassName()}]">*}]
[{* <input type="hidden" name="fnc" value="">*}]
[{* <input type="hidden" name="oxid" value="[{$oxid}]">*}]
[{* <input type="hidden" name="voxid" value="[{$oxid}]">*}]
[{* <input type="hidden" name="editval[[{$edit->d3GetFieldLongName('oxid')}]]" value="[{$oxid}]">*}]
[{* <table style="width:98%; padding: 0; border: none">*}]
[{* [{if $edit->getId() && !$edit->getLicenseActive()}]*}]
[{* <tr>*}]
[{* <td style="vertical-align:top;" colspan="2">*}]
[{* <div class="extension_warning">[{oxmultilang ident="D3_ORDERMANAGER_ERROR_IEXECJOBSLIMIT"}]</div>*}]
[{* </td>*}]
[{* </tr>*}]
[{* [{/if}]*}]
[{* <tr>*}]
[{* <td class="edittext" colspan="2">*}]
[{* <details>*}]
[{* <summary>[{oxmultilang ident="D3_GENERAL_ORDERMANAGER_DESCRIPTION"}]</summary>*}]
[{* [{oxmultilang ident="d3tbclordermanager_items_main_desc"}]*}]
[{* </details>*}]
[{* </td>*}]
[{* </tr>*}]
[{* [{if $edit->getBasicRestrictionSettings()}]*}]
[{* <tr>*}]
[{* <td class="restrictioninfo" colspan="2">*}]
[{* [{oxmultilang ident="D3_GENERAL_ORDERMANAGER_BASICRESTRICTIONS"}]*}]
[{* </td>*}]
[{* </tr>*}]
[{* [{/if}]*}]
[{* <tr>*}]
[{* <td class="edittext" style="text-align:left; vertical-align:top; height:99%;padding-left:5px;padding-bottom:30px;padding-top:10px;">*}]
[{* <table style="border: none; padding: 0;">*}]
[{* <tr>*}]
[{* <td class="edittext">*}]
[{* <label for="MainTitle">[{oxmultilang ident="D3_MODPROFILE_MAIN_TITLE"}]</label>&nbsp;*}]
[{* </td>*}]
[{* <td class="edittext">*}]
[{* <input id="MainTitle" type="text" class="editinput" size="50" maxlength="[{$edit->d3getFieldMaxLength('oxtitle')}]" name="editval[[{$edit->d3GetFieldLongName('oxtitle')}]]" value="[{$edit->getFieldData('oxtitle')}]" [{$readonly}]>*}]
[{* </td>*}]
[{* </tr>*}]
[{* <tr>*}]
[{* <td class="edittext">*}]
[{* <label for="MainShortDesc">[{oxmultilang ident="D3_MODPROFILE_MAIN_SHORTDESC"}]</label>&nbsp;*}]
[{* </td>*}]
[{* <td class="edittext">*}]
[{* <textarea id="MainShortDesc" name="editval[[{$edit->d3GetFieldLongName('oxshortdesc')}]]" class="editinput" maxlength="[{$edit->d3getFieldMaxLength('oxshortdesc')}]" cols="50" rows="5" [{$readonly}]>[{$edit->getFieldData('oxshortdesc')}]</textarea>*}]
[{* </td>*}]
[{* </tr>*}]
[{* <tr>*}]
[{* <td class="edittext">*}]
[{* <label for="MainSort">[{oxmultilang ident="D3_MODPROFILE_MAIN_SORT"}]</label>&nbsp;*}]
[{* </td>*}]
[{* <td class="edittext">*}]
[{* <input id="MainSort" type="text" class="editinput" size="32" maxlength="[{$edit->d3getFieldMaxLength('oxsort')}]" name="editval[[{$edit->d3GetFieldLongName('oxsort')}]]" value="[{$edit->getFieldData('oxsort')}]" [{$readonly}]>*}]
[{* [{oxinputhelp ident="D3_ORDERMANAGER_MAIN_SORT_DESC"}]*}]
[{* </td>*}]
[{* </tr>*}]
[{* <tr>*}]
[{* <td class="edittext">*}]
[{* <label for="MainFolder">[{oxmultilang ident="D3_MODPROFILE_MAIN_FOLDER"}]</label>&nbsp;*}]
[{* </td>*}]
[{* <td class="edittext">*}]
[{* <select id="MainFolder" class="editinput" size="1" name="editval[[{$edit->d3GetFieldLongName('oxfolder')}]]" [{$readonly}]>*}]
[{* <option value="" [{if '' == $edit->getFieldData('oxfolder')}] selected[{/if}]>[{oxmultilang ident="D3_MODPROFILE_MAIN_NOFOLDER"}]</option>*}]
[{* [{foreach from=$oView->getFolderList() key="sMLItem" item="sTranslation"}]*}]
[{* <option value="[{$sMLItem}]" [{if $sMLItem == $edit->getFieldData('oxfolder')}] selected[{/if}]>[{$sTranslation}]</option>*}]
[{* [{/foreach}]*}]
[{* </select>*}]
[{* [{oxinputhelp ident="D3_ORDERMANAGER_MAIN_FOLDER_DESC"}]*}]
[{* </td>*}]
[{* </tr>*}]
[{* <tr>*}]
[{* <td class="edittext">*}]
[{* [{oxmultilang ident="D3_ORDERMANAGER_MAIN_LASTEXEC"}]&nbsp;*}]
[{* </td>*}]
[{* <td class="edittext">*}]
[{* [{$edit->getValue('iLastExecDate')|date_format:"%Y-%m-%d %H:%M:%S"}]*}]
[{* </td>*}]
[{* </tr>*}]
[{* [{if $blShowLangSwitch}]*}]
[{* <tr>*}]
[{* <td class="edittext" colspan="2"><br>*}]
[{* [{include file="language_edit.tpl"}]<br>*}]
[{* </td>*}]
[{* </tr>*}]
[{* [{/if}]*}]
[{* </table>*}]
[{* <table style="border: none; padding: 0;">*}]
[{* [{include file="d3_modprofile_actionbuttons.tpl"}]*}]
[{* </table>*}]
[{* </td>*}]
[{* <!-- Anfang rechte Seite -->*}]
[{* <td style="vertical-align: top; padding-top:10px;padding-left:10px;">*}]
[{* <fieldset>*}]
[{* <legend>[{oxmultilang ident="D3_ORDERMANAGER_MAIN_FIELDSET_EXECUTION"}]</legend>*}]
[{* <table style="border: none; padding: 0;">*}]
[{* <tr>*}]
[{* <td class="edittext" style="*}]
[{* [{if ($edit->getFieldData('oxactive') == 1 OR*}]
[{* ($blUseTimeCheck && ($edit->getFieldData('oxactivefrom') != '0000-00-00 00:00:00' AND $edit->getFieldData('oxactiveto') != '0000-00-00 00:00:00')))*}]
[{* AND !$edit->getValue('blItemExecute') AND !$edit->getValue('blItemMailSend')}]*}]
[{* font-weight: bold; background-color: darkred; color: white;*}]
[{* [{/if}]">*}]
[{* <label for="MainExecute">[{oxmultilang ident="D3_ORDERMANAGER_MAIN_EXECUTE2"}][{if $oSet->hasDebugMode()}]<br><span id="debugnote">[{oxmultilang ident="D3_ORDERMANAGER_MAIN_EXECUTE_DEBUG"}]</span>[{/if}]</label>*}]
[{* </td>*}]
[{* <td class="edittext">*}]
[{* <input type="hidden" name="value[blItemExecute]" value="1">*}]
[{* <input id="MainExecute" type="checkbox" [{if $oSet->hasDebugMode()}]disabled[{/if}] class="edittext ext_edittext" name="value[blItemExecute]" value="0" [{if false == $edit->getValue('blItemExecute')}]checked[{/if}] [{$readonly}]>*}]
[{* [{oxinputhelp ident="D3_ORDERMANAGER_MAIN_EXECUTE_DESC"}]*}]
[{* </td>*}]
[{* </tr>*}]
[{* <tr>*}]
[{* <td class="edittext" style="*}]
[{* [{if ($edit->getFieldData('oxactive') == 1 OR*}]
[{* ($blUseTimeCheck && ($edit->getFieldData('oxactivefrom') != '0000-00-00 00:00:00' AND $edit->getFieldData('oxactiveto') != '0000-00-00 00:00:00')))*}]
[{* AND !$edit->getValue('blItemExecute') AND !$edit->getValue('blItemMailSend')}]*}]
[{* font-weight: bold; background-color: darkred; color: white;*}]
[{* [{/if}]">*}]
[{* <label for="MainMailsend">[{oxmultilang ident="D3_ORDERMANAGER_MAIN_MAILSEND"}]</label>&nbsp;*}]
[{* </td>*}]
[{* <td class="edittext">*}]
[{* <input type="hidden" name="value[blItemMailSend]" value="0">*}]
[{* <input id="MainMailsend" type="checkbox" class="edittext ext_edittext" name="value[blItemMailSend]" value="1" [{if $edit->getValue('blItemMailSend')}]checked[{/if}] [{$readonly}]>*}]
[{* [{oxinputhelp ident="D3_ORDERMANAGER_MAIN_MAILSEND_DESC"}]*}]
[{* </td>*}]
[{* </tr>*}]
[{* <tr>*}]
[{* <td class="edittext">*}]
[{* <label for="AddHistory">[{oxmultilang ident="D3_ORDERMANAGER_MAIN_ADDHISTORYITEM"}]</label>*}]
[{* </td>*}]
[{* <td class="edittext">*}]
[{* <input type="hidden" name="value[blAddHistory]" value="0">*}]
[{* <input id="AddHistory" type="checkbox" class="edittext ext_edittext" name="value[blAddHistory]" value="1" [{if $edit->getValue('blAddHistory')}]checked[{/if}] [{$readonly}]>*}]
[{* [{oxinputhelp ident="D3_ORDERMANAGER_MAIN_ADDHISTORYITEM_DESC"}]*}]
[{* </td>*}]
[{* </tr>*}]
[{* </table>*}]
[{* </fieldset>*}]
[{* </td>*}]
[{* <!-- Ende rechte Seite -->*}]
[{* </tr>*}]
[{* </table>*}]
[{*</form>*}]
[{include file="bottomnaviitem.tpl"}]
[{include file="bottomitem.tpl"}]

View File

@ -1,14 +1,6 @@
[{include file="headitem.tpl" title="GENERAL_ADMIN_TITLE"|oxmultilangassign}]
[{include file="inc_bootstrap.tpl"}]
<style type="text/css">
.col-6 {
float: left;
width: 48%;
padding: 15px;
}
</style>
<form name="transfer" id="transfer" action="[{$oViewConf->getSelfLink()}]" method="post">
[{$oViewConf->getHiddenSid()}]
<input type="hidden" name="oxid" value="[{$oxid}]">
@ -17,25 +9,57 @@
<input type="hidden" name="editlanguage" value="[{$editlanguage}]">
</form>
<h3>[{oxmultilang ident="D3_TAB_SPFCHECK"}]</h3>
<div class="row">
[{foreach from=$result key="domain" item="spf"}]
<div class="col-lg-3 col-md-6">
<div class="card mb-3">
<div class="card-header text-white bg-[{$oView->getSpfStatusColor($spf)}]">
[{$domain}]
<div class="col-12 col-md-10 col-lg-8 mb-4">
[{oxmultilang ident="D3_MAILCHECKER_SPFRESULT_DESC"}]
</div>
</div>
<div class="row">
<div class="col-12 col-md-10 col-lg-8 mb-4">
<div class="row">
[{foreach from=$result key="domain" item="spf"}]
<div class="col-12 col-md-6 col-lg-4">
<div class="card mb-3">
<div class="card-header text-white bg-[{$oView->getSpfStatusColor($spf)}]">
[{$domain}]
</div>
<div class="card-body">
<p>[{oxmultilang ident="D3_MAILCHECKER_SPFRESULT_"|cat:$spf->getStatus()|upper}]</p>
[{if $spf->getRecord()}]
<p>
<label for="[{$domain}]_record">Eintrag:</label>
<input type="text" id="[{$domain}]_record" value="[{$spf->getRecord()}]" readonly disabled>
</p>
[{/if}]
<h5>[{oxmultilang ident="D3_MAILCHECKER_SPFRESULT_LINKS"}]</h5>
<ul>
[{if $spf->getRecord()}]
<li>
<a href="https://mxtoolbox.com/SuperTool.aspx?action=spf%3a[{$domain}]&run=toolpage">
[{oxmultilang ident="D3_MAILCHECKER_SPFRESULT_LINK_ANALYSIS"}]
</a>
</li>
[{else}]
<li>
<a href="https://mxtoolbox.com/SPFRecordGenerator.aspx?domain=[{$domain}]&prefill=true">
[{oxmultilang ident="D3_MAILCHECKER_SPFRESULT_LINK_GENERATOR"}]
</a>
</li>
[{/if}]
<li>
<a href="https://mxtoolbox.com/SuperTool.aspx?action=blacklist%3a[{$domain}]&run=toolpage">
[{oxmultilang ident="D3_MAILCHECKER_SPFRESULT_LINK_BLACKLISTCHECK"}]
</a>
</li>
</ul>
</div>
</div>
</div>
<div class="card-body">
[{oxmultilang ident="D3_SPFRESULT_"|cat:$spf->getStatus()|upper}]<br>
[{if $spf->getRecord()}]
<br>
<input type="text" value="[{$spf->getRecord()}]" readonly disabled>
[{/if}]
</div>
</div>
[{/foreach}]
</div>
[{/foreach}]
</div>
</div>
[{include file="bottomnaviitem.tpl"}]

View File

@ -3,21 +3,51 @@
return [
'charset' => 'UTF-8',
'D3_MENU_MAILCHECKER' => 'E-Mail Prüfung',
'D3_TAB_CONFIGCHECK' => 'Konfigurationsprüfung',
'D3_TAB_SMTPCHECK' => 'SMTP Check',
'D3_TAB_SPFCHECK' => 'SPF Check',
'D3_TAB_TESTMAIL' => 'Testmail',
'D3_ASSERTIONS_FAILED' => 'Die folgenden %d Prüfungen schlugen fehl:',
'D3_ASSERTIONS_NOTSET' => 'ist nicht (richtig) gesetzt',
'D3_ASSERTIONS_NOPORT' => 'fehlende oder falsche Port-Angabe (587 oder 2525)',
'D3_CFGCHECK_SHOPSEND' => 'Der Shop verschickt Mails über',
'D3_CFGCHECK_SHOPSEND_PHPMAILER' => 'PhpMailer',
'D3_CFGCHECK_SHOPSEND_PHPMAILER_DESC' => 'Der Versand über den PhpMailer sollte dringend vermieden werden, da solche Mails meist als Spam eingestuft werden. Wenn Sie alle SMTP-Daten eingegeben haben, prüfen Sie mögliche Anmeldeprobleme im SMTP-Check.',
'D3_CFGCHECK_SHOPSEND_SMTP' => 'SMTP',
'D3_CFGCHECK_SHOPSEND_SMTP_DESC' => 'Alles in bester Ordnung. Bitte prüfen Sie noch die nötigen SPF-Einträge für Ihre Domain(s).',
'D3_CFGCHECK_STARTCHECK' => 'Konfiguration testen',
'D3_TAB_MAILCHECKER_CONFIGCHECK' => 'Konfigurationsprüfung',
'D3_TAB_MAILCHECKER_SMTPCHECK' => 'SMTP Check',
'D3_TAB_MAILCHECKER_SPFCHECK' => 'SPF Check',
'D3_TAB_MAILCHECKER_TESTMAIL' => 'Testmail',
'D3_SPFRESULT_SET' => 'SPF-Eintrag gesetzt',
'D3_SPFRESULT_MISSING' => 'SPF-Eintrag fehlt, dieser sollte dringend nachgetragen werden',
'D3_SPFRESULT_ERROR' => 'SPF-Eintrag kann nicht geprüft werden',
'D3_MAILCHECKER_ASSERTIONS_FAILED' => 'Die folgenden %d Prüfungen schlugen fehl:',
'D3_MAILCHECKER_ASSERTIONS_NOTSET' => 'ist nicht (richtig) gesetzt',
'D3_MAILCHECKER_ASSERTIONS_NOPORT' => 'fehlende oder falsche Port-Angabe (587 oder 2525)',
'D3_MAILCHECKER_CFGCHECK_SHOPSEND' => 'Der Shop verschickt Mails über',
'D3_MAILCHECKER_CFGCHECK_SHOPSEND_PHPMAILER' => 'PhpMailer',
'D3_MAILCHECKER_CFGCHECK_SHOPSEND_PHPMAILER_DESC' => 'Der Versand über den PhpMailer sollte dringend vermieden werden, da solche Mails meist als Spam eingestuft werden. Wenn Sie alle SMTP-Daten eingegeben haben, prüfen Sie mögliche Anmeldeprobleme im SMTP-Check.',
'D3_MAILCHECKER_CFGCHECK_SHOPSEND_SMTP' => 'SMTP',
'D3_MAILCHECKER_CFGCHECK_SHOPSEND_SMTP_DESC' => 'Alles in bester Ordnung. Bitte prüfen Sie noch die nötigen SPF-Einträge für Ihre Domain(s).',
'D3_MAILCHECKER_CFGCHECK_STARTCHECK' => 'Konfiguration testen',
'D3_MAILCHECKER_SMTPCHECK_DESC1' => 'Wenn trotz passend eingegebenen Daten kein Mailversand über SMTP erfolgt, kann hier der Anmeldeversuch am Postausgangsserver nachollzogen werden. Eventuell auftretende Meldungen werden gezeigt.',
'D3_MAILCHECKER_SMTPCHECK_DESC2' => 'Auch neue Verbindungen können hier vorab getestet werden.',
'D3_MAILCHECKER_SMTPCHECK_DESC3' => 'Zum Verbindungsaufbau werden diese Einstellungen verwendet. Diese können gern geändert werden. Sie werden nicht in den Shop zurückgespeichert. Der optionale Mailversand verschickt direkt an den SMTP Server und umgeht die Shoplogik.',
'D3_MAILCHECKER_SMTPCHECK_SENDER' => 'Absender',
'D3_MAILCHECKER_SMTPCHECK_RECIPIENT' => 'Empfänger',
'D3_MAILCHECKER_SMTPCHECK_TESTSENDMAIL' => 'Mailversand testen',
'D3_MAILCHECKER_SMTPCHECK_STARTTEST' => 'SMTP Zugang testen',
'D3_MAILCHECKER_SMTPCHECK_INSTANCE' => 'SMTP Instanz',
'D3_MAILCHECKER_SMTPCHECK_CONNECTION' => 'Verbindung',
'D3_MAILCHECKER_SMTPCHECK_NOCONNECTION' => 'Kann keine Verbindung zum Host aufbauen.',
'D3_MAILCHECKER_SMTPCHECK_AUTHENTICATION' => 'Authentifizierung',
'D3_MAILCHECKER_SMTPCHECK_NOAUTHENTICATION' => 'Authentifizierung nicht erfolgreich',
'D3_MAILCHECKER_SMTPCHECK_NOSENDER' => 'Absender "%1$s" kann nicht gesetzt werden',
'D3_MAILCHECKER_SMTPCHECK_NORECIPIENT' => 'Empfänger "%1$s" kann nicht gesetzt werden',
'D3_MAILCHECKER_SMTPCHECK_TRANSMIT' => 'Datenübertragung',
'D3_MAILCHECKER_SMTPCHECK_NOTRANSMIT' => 'Datenübertragung nicht erfolgreich',
'D3_MAILCHECKER_SMTPCHECK_SUCCESS' => 'Die SMTP-Kommunikation wurde erfolgreich abgeschlossen.',
'D3_MAILCHECKER_SPFRESULT_DESC' => 'Mit dem Sender Policy Framework (SPF) definiert der Domaininhaber, welcher Server E-Mails mit dem Domainabsender versenden darf. Diese Angabe wird vom Empfangsserver geprüft. Fehlt der SPF-Eintrag, werden E-Mails üblicherweise als Spam klassifiziert.',
'D3_MAILCHECKER_SPFRESULT_SET' => 'Es ist ein SPF-Eintrag gesetzt',
'D3_MAILCHECKER_SPFRESULT_MISSING' => 'Es ist kein SPF-Eintrag gesetzt, dieser sollte dringend nachgetragen werden',
'D3_MAILCHECKER_SPFRESULT_ERROR' => 'Der SPF-Eintrag kann nicht geprüft werden',
'D3_MAILCHECKER_SPFRESULT_LINKS' => 'weiterführende Links',
'D3_MAILCHECKER_SPFRESULT_LINK_ANALYSIS' => 'SPF Analyse',
'D3_MAILCHECKER_SPFRESULT_LINK_GENERATOR' => 'SPF Generator',
'D3_MAILCHECKER_SPFRESULT_LINK_BLACKLISTCHECK' => 'Blacklist Check',
'D3_MAILCHECKER_TESTMAIL_DESC' => 'Die Testmail wird auf identischem Weg geschickt, den auch alle regulären Mails aus dem Shop nehmen (z.B. Bestellbestätigungen, ...) und kann z.B. zur Headeranalyse dienen.',
'D3_MAILCHECKER_TESTMAIL_SUBJECT' => 'Betreff',
'D3_MAILCHECKER_TESTMAIL_BODY' => 'Nachricht',
'D3_MAILCHECKER_TESTMAIL_SENDMAIL' => 'E-Mail absenden',
'D3_MAILCHECKER_TESTMAIL_SUCCESS' => 'Die Testmail wurde erfolgreich versandt.',
];

View File

@ -3,10 +3,10 @@
<OXMENU id="NAVIGATION_ESHOPADMIN">
<MAINMENU id="mxservice">
<SUBMENU id="D3_MENU_MAILCHECKER" cl="d3mailcheck" list="d3mailcheckmenu">
<TAB id="D3_TAB_CONFIGCHECK" cl="d3mailconfigcheck" />
<TAB id="D3_TAB_SMTPCHECK" cl="d3smtpchecker" />
<TAB id="D3_TAB_SPFCHECK" cl="d3spfchecker" />
<TAB id="D3_TAB_TESTMAIL" cl="d3mailtester" />
<TAB id="D3_TAB_MAILCHECKER_CONFIGCHECK" cl="d3mailconfigcheck" />
<TAB id="D3_TAB_MAILCHECKER_SMTPCHECK" cl="d3smtpchecker" />
<TAB id="D3_TAB_MAILCHECKER_SPFCHECK" cl="d3spfchecker" />
<TAB id="D3_TAB_MAILCHECKER_TESTMAIL" cl="d3mailtester" />
</SUBMENU>
</MAINMENU>
</OXMENU>

View File

@ -1,15 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="201px" height="124px" viewBox="0 0 201 124" enable-background="new 0 0 201 124" xml:space="preserve">
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="47.0591" y1="67.5117" x2="47.0591" y2="54.6143">
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="393.0801" y1="-190.9922" x2="393.0801" y2="-178.0942" gradientTransform="matrix(1 0 0 -1 -346.0195 -123.4805)">
<stop offset="0.0056" style="stop-color:#3266A9"/>
<stop offset="1" style="stop-color:#0099FF"/>
</linearGradient>
<path fill="url(#SVGID_1_)" d="M50.282,55.502c-0.784-0.592-2.104-0.888-3.961-0.888h-1.376l-2.283,12.898h1.779
c3.76,0,6.032-2.245,6.815-6.733c0.134-0.871,0.202-1.642,0.202-2.313C51.457,57.081,51.064,56.093,50.282,55.502z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="65.9609" y1="49.104" x2="65.9609" y2="36.9434">
c3.76,0,6.032-2.244,6.815-6.733c0.134-0.871,0.202-1.642,0.202-2.313C51.457,57.081,51.064,56.093,50.282,55.502z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="411.9805" y1="-172.5845" x2="411.9805" y2="-160.4233" gradientTransform="matrix(1 0 0 -1 -346.0195 -123.4805)">
<stop offset="0.0056" style="stop-color:#3266A9"/>
<stop offset="1" style="stop-color:#0099FF"/>
</linearGradient>
@ -18,9 +21,10 @@
c0.117-0.321,0.21-0.658,0.277-1.013l0.09-1.008c0-1.223-0.568-2.081-1.701-2.574c0.776-0.402,1.376-0.94,1.801-1.611
c0.425-0.672,0.638-1.418,0.638-2.239c0-0.642-0.198-1.265-0.593-1.868c-0.396-0.605-0.98-1.049-1.757-1.333
c-0.433-0.193-0.876-0.328-1.332-0.402c-0.456-0.075-1.003-0.113-1.645-0.113c-0.82,0-1.663,0.124-2.529,0.37
c-0.865,0.246-1.6,0.563-2.204,0.952s-1.13,0.907-1.578,1.557c-0.036,0.052-0.066,0.109-0.101,0.163
c-0.865,0.246-1.6,0.563-2.204,0.952c-0.604,0.389-1.13,0.907-1.578,1.557c-0.036,0.052-0.066,0.109-0.101,0.163
c1.196,0.534,2.341,1.163,3.426,1.874C63.947,40.943,64.68,40.482,65.72,40.482z"/>
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="50.0576" y1="87.0566" x2="50.0576" y2="37.8525">
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="396.0771" y1="-210.541" x2="396.0771" y2="-161.3354" gradientTransform="matrix(1 0 0 -1 -346.0195 -123.4805)">
<stop offset="0.0056" style="stop-color:#3266A9"/>
<stop offset="1" style="stop-color:#0099FF"/>
</linearGradient>
@ -30,21 +34,35 @@
c0.495-0.434,0.742-0.94,0.742-1.522c0-0.522-0.194-0.887-0.582-1.097c-0.329-0.208-1.007-0.313-2.036-0.313l0.47-2.754
l1.141-0.067c0.083-0.011,0.154-0.022,0.221-0.033c-0.674-0.551-1.378-1.067-2.11-1.546c-0.044,0.096-0.087,0.195-0.125,0.302
h-4.185c0.192-0.837,0.49-1.56,0.884-2.175c-3.064-1.372-6.46-2.133-10.034-2.133c-13.588,0-24.603,11.014-24.603,24.601
c0,13.59,11.015,24.604,24.603,24.604S74.66,76.043,74.66,62.453C74.66,57.532,73.214,52.949,70.725,49.104z M59.413,59.233
l-0.168,1.275c-0.538,2.953-1.511,5.404-2.921,7.35c-1.298,1.835-3.016,3.179-5.153,4.028c-2.138,0.851-4.494,1.274-7.067,1.274
H33.731l4.264-24.198h10.441c1.141,0,2.204,0.073,3.189,0.218c0.984,0.146,1.868,0.364,2.651,0.655
c1.611,0.537,2.887,1.471,3.827,2.802c0.94,1.332,1.41,2.992,1.41,4.984L59.413,59.233z"/>
c0,13.59,11.015,24.604,24.603,24.604c13.588,0,24.604-11.018,24.604-24.607C74.66,57.532,73.214,52.949,70.725,49.104z
M59.413,59.233l-0.168,1.275c-0.538,2.953-1.511,5.404-2.921,7.35c-1.298,1.836-3.016,3.18-5.153,4.029
c-2.138,0.85-4.494,1.273-7.067,1.273H33.731l4.264-24.198h10.441c1.141,0,2.204,0.073,3.189,0.218
c0.984,0.146,1.868,0.364,2.651,0.655c1.611,0.537,2.887,1.471,3.827,2.802c0.94,1.332,1.41,2.992,1.41,4.984L59.413,59.233z"/>
</g>
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="107.3027" y1="105.8555" x2="93.0727" y2="16.0106">
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="453.3232" y1="-229.3364" x2="439.0932" y2="-139.491" gradientTransform="matrix(1 0 0 -1 -346.0195 -123.4805)">
<stop offset="0" style="stop-color:#B2B2B2;stop-opacity:0"/>
<stop offset="0.2" style="stop-color:#B2B2B2"/>
<stop offset="0.8" style="stop-color:#B2B2B2"/>
<stop offset="1" style="stop-color:#B2B2B2;stop-opacity:0"/>
</linearGradient>
<rect x="99.875" y="14.933" fill="url(#SVGID_4_)" width="0.625" height="92"/>
<path d="M172.75,44.714v4.714c0,4.34-9.853,7.857-22,7.857s-22-3.518-22-7.857v-4.714c0-4.34,9.853-7.857,22-7.857
S172.75,40.374,172.75,44.714z M167.366,57.942c2.045-0.725,3.92-1.657,5.384-2.809v10.009c0,4.34-9.853,7.857-22,7.857
s-22-3.518-22-7.857V55.134c1.464,1.16,3.339,2.084,5.384,2.809c4.407,1.571,10.281,2.486,16.616,2.486
S162.959,59.514,167.366,57.942z M128.75,70.848c1.464,1.16,3.339,2.084,5.384,2.809c4.407,1.57,10.281,2.486,16.616,2.486
s12.209-0.916,16.616-2.486c2.045-0.725,3.92-1.658,5.384-2.809v8.438c0,4.34-9.853,7.857-22,7.857s-22-3.518-22-7.857V70.848z"/>
<g>
<polygon fill="none" points="124.813,74.082 139.459,60.376 124.837,49.36 "/>
<polygon fill="none" points="167.146,47.329 126.95,47.329 147.603,63.256 "/>
<g>
<path fill="none" d="M171.625,68.521c-0.479-0.495-0.728-0.178-1.118,0.217l-5.343,5.408l-2.484-2.37
c-0.283-0.27-0.503-0.29-0.776-0.004l-1.448,1.515c-0.232,0.235-0.257,0.47-0.043,0.702l3.764,3.741
c1.037,1.032,0.859,0.972,1.88-0.031l6.77-6.665c0.485-0.475,0.511-0.773,0-1.282L171.625,68.521z"/>
<path d="M166.733,60.522c-7.131,0-12.914,5.782-12.914,12.91c0,7.13,5.783,12.912,12.914,12.912
c7.129,0,12.909-5.782,12.909-12.912C179.643,66.305,173.862,60.522,166.733,60.522z M172.825,71.034l-6.77,6.665
c-1.021,1.003-0.843,1.063-1.88,0.031l-3.764-3.741c-0.214-0.232-0.189-0.467,0.043-0.702l1.448-1.515
c0.273-0.286,0.493-0.266,0.776,0.004l2.484,2.37l5.343-5.408c0.391-0.395,0.64-0.712,1.118-0.217l1.2,1.23
C173.336,70.261,173.311,70.56,172.825,71.034z"/>
</g>
<path d="M146.703,66.264c0.567,0.462,1.35,0.41,1.853-0.014l4.733-4.026l1.22,1.199c0.333-0.4,0.681-0.786,1.048-1.153l0.01-0.012
c0.314-0.314,0.643-0.615,0.983-0.902l-1.029-1.008l14.123-11.103l-0.007,8.651c0.914,0.169,1.797,0.417,2.647,0.734l0.011-10.749
c0.004-1.757-1.432-3.203-3.198-3.203h-43.702c-1.766,0-3.201,1.441-3.204,3.202l-0.027,27.982c0,1.757,1.43,3.202,3.199,3.202
h26.604c-0.331-0.859-0.582-1.746-0.757-2.649h-24.617l15.146-14.203L146.703,66.264z M167.146,47.329l-19.544,15.927
L126.95,47.329H167.146z M124.813,74.082l0.024-24.722l14.622,11.016L124.813,74.082z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB