From 0dbd956a687696449f149687d1be621acce15440 Mon Sep 17 00:00:00 2001 From: Daniel Seifert Date: Tue, 12 Dec 2023 11:28:18 +0100 Subject: [PATCH] initial --- .../Controller/Admin/MailCheckBase.php | 4 +- .../Controller/Admin/MailConfigCheck.php | 14 +- Application/Controller/Admin/MailTester.php | 70 +++++ Application/Controller/Admin/SmtpChecker.php | 116 ++++--- Application/Controller/Admin/SpfChecker.php | 18 +- .../d3TranslatableLazyAssertionException.php | 8 +- Application/Model/SpfResult.php | 4 +- Application/views/admin/tpl/inc/bootstrap.tpl | 4 + Application/views/admin/tpl/mailTester.tpl | 45 ++- .../views/admin/tpl/mailconfigcheck.tpl | 12 +- Application/views/admin/tpl/smtpCheck.tpl | 284 +++++------------- Application/views/admin/tpl/spfCheck.tpl | 72 +++-- Application/views/de/translations.php | 62 +++- menu.xml | 8 +- picture.svg | 48 ++- 15 files changed, 435 insertions(+), 334 deletions(-) diff --git a/Application/Controller/Admin/MailCheckBase.php b/Application/Controller/Admin/MailCheckBase.php index daff894..d9da9b2 100644 --- a/Application/Controller/Admin/MailCheckBase.php +++ b/Application/Controller/Admin/MailCheckBase.php @@ -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(); } diff --git a/Application/Controller/Admin/MailConfigCheck.php b/Application/Controller/Admin/MailConfigCheck.php index f18817b..4d9e3bf 100644 --- a/Application/Controller/Admin/MailConfigCheck.php +++ b/Application/Controller/Admin/MailConfigCheck.php @@ -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())); diff --git a/Application/Controller/Admin/MailTester.php b/Application/Controller/Admin/MailTester.php index c3f1879..9c1eb5f 100644 --- a/Application/Controller/Admin/MailTester.php +++ b/Application/Controller/Admin/MailTester.php @@ -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'), + ] + ) + ); + } } \ No newline at end of file diff --git a/Application/Controller/Admin/SmtpChecker.php b/Application/Controller/Admin/SmtpChecker.php index b0d5233..5de4814 100644 --- a/Application/Controller/Admin/SmtpChecker.php +++ b/Application/Controller/Admin/SmtpChecker.php @@ -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) diff --git a/Application/Controller/Admin/SpfChecker.php b/Application/Controller/Admin/SpfChecker.php index 6fab6f2..162ba80 100644 --- a/Application/Controller/Admin/SpfChecker.php +++ b/Application/Controller/Admin/SpfChecker.php @@ -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'), diff --git a/Application/Model/Exception/d3TranslatableLazyAssertionException.php b/Application/Model/Exception/d3TranslatableLazyAssertionException.php index b102e98..7295443 100644 --- a/Application/Model/Exception/d3TranslatableLazyAssertionException.php +++ b/Application/Model/Exception/d3TranslatableLazyAssertionException.php @@ -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); diff --git a/Application/Model/SpfResult.php b/Application/Model/SpfResult.php index a6176d7..0ec38d6 100644 --- a/Application/Model/SpfResult.php +++ b/Application/Model/SpfResult.php @@ -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) { diff --git a/Application/views/admin/tpl/inc/bootstrap.tpl b/Application/views/admin/tpl/inc/bootstrap.tpl index 07a1a31..785f600 100644 --- a/Application/views/admin/tpl/inc/bootstrap.tpl +++ b/Application/views/admin/tpl/inc/bootstrap.tpl @@ -2,9 +2,13 @@ \ No newline at end of file diff --git a/Application/views/admin/tpl/mailTester.tpl b/Application/views/admin/tpl/mailTester.tpl index d4b2f07..02c9942 100644 --- a/Application/views/admin/tpl/mailTester.tpl +++ b/Application/views/admin/tpl/mailTester.tpl @@ -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 @@ -... +[{if $success}] +
[{oxmultilang ident="D3_MAILCHECKER_TESTMAIL_SUCCESS"}]
+[{/if}] + +
+ [{oxmultilang ident="D3_MAILCHECKER_TESTMAIL_DESC"}] +
+ +
+
+
+ [{$oViewConf->getHiddenSid()}] + + + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
[{include file="bottomnaviitem.tpl"}] diff --git a/Application/views/admin/tpl/mailconfigcheck.tpl b/Application/views/admin/tpl/mailconfigcheck.tpl index fe73d77..696239e 100644 --- a/Application/views/admin/tpl/mailconfigcheck.tpl +++ b/Application/views/admin/tpl/mailconfigcheck.tpl @@ -43,13 +43,13 @@
[{if $mailer}]
- [{oxmultilang ident="D3_CFGCHECK_SHOPSEND" suffix="COLON"}] + [{oxmultilang ident="D3_MAILCHECKER_CFGCHECK_SHOPSEND" suffix="COLON"}] [{if $mailer == 'mail'}] -
- [{oxmultilang ident="D3_CFGCHECK_SHOPSEND_PHPMAILER_DESC"}] +
+ [{oxmultilang ident="D3_MAILCHECKER_CFGCHECK_SHOPSEND_PHPMAILER_DESC"}] [{else}] - [{oxmultilang ident="D3_CFGCHECK_SHOPSEND_SMTP"}]
- [{oxmultilang ident="D3_CFGCHECK_SHOPSEND_SMTP_DESC"}] + [{oxmultilang ident="D3_MAILCHECKER_CFGCHECK_SHOPSEND_SMTP"}]
+ [{oxmultilang ident="D3_MAILCHECKER_CFGCHECK_SHOPSEND_SMTP_DESC"}] [{/if}]
[{else}] @@ -57,7 +57,7 @@ [{$oViewConf->getHiddenSid()}] - + [{/if}]
diff --git a/Application/views/admin/tpl/smtpCheck.tpl b/Application/views/admin/tpl/smtpCheck.tpl index b28034b..ee7af90 100644 --- a/Application/views/admin/tpl/smtpCheck.tpl +++ b/Application/views/admin/tpl/smtpCheck.tpl @@ -1,10 +1,12 @@ [{include file="headitem.tpl" title="GENERAL_ADMIN_TITLE"|oxmultilangassign}] +[{include file="inc_bootstrap.tpl"}] - @@ -16,213 +18,79 @@ -

SMTP Test

+[{if $success}] +
[{oxmultilang ident="D3_MAILCHECKER_SMTPCHECK_SUCCESS"}]
+[{/if}] -
-
- [{$oViewConf->getHiddenSid()}] - - - - - - -
- - - - -
- - - - -
- - -
- - -
- -
-
-
- [{foreach from=$smtpLog key="action" item="logItems" name="actionList"}] -
-
[{$smarty.foreach.actionList.iteration}] - [{$action}]
-
-
    - [{foreach from=$logItems item="logItem"}] -
  • - [{$logItem}] -
  • +
    +
    +

    + [{oxmultilang ident="D3_MAILCHECKER_SMTPCHECK_DESC1"}] +

    +

    + [{oxmultilang ident="D3_MAILCHECKER_SMTPCHECK_DESC2"}] +

    +

    + [{oxmultilang ident="D3_MAILCHECKER_SMTPCHECK_DESC3"}] +

    + +
    + [{$oViewConf->getHiddenSid()}] + + + +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + [{foreach from=$smtpLog key="action" item="logItems" name="actionList"}] +
    +
    [{$smarty.foreach.actionList.iteration}] - [{$action}]
    +
    +
      + [{foreach from=$logItems item="logItem"}] +
    • + [{$logItem}] +
    • + [{/foreach}] +
    +
    +
    + [{/foreach}] +
    - - -[{*
    *}] -[{* [{$oViewConf->getHiddenSid()}]*}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] - -[{* *}] -[{* [{if $edit->getId() && !$edit->getLicenseActive()}]*}] -[{* *}] -[{* *}] -[{* *}] -[{* [{/if}]*}] - -[{* *}] -[{* *}] -[{* *}] - -[{* [{if $edit->getBasicRestrictionSettings()}]*}] -[{* *}] -[{* *}] -[{* *}] -[{* [{/if}]*}] - -[{* *}] -[{* *}] - -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{*
    *}] -[{*
    [{oxmultilang ident="D3_ORDERMANAGER_ERROR_IEXECJOBSLIMIT"}]
    *}] -[{*
    *}] -[{*
    *}] -[{* [{oxmultilang ident="D3_GENERAL_ORDERMANAGER_DESCRIPTION"}]*}] -[{* [{oxmultilang ident="d3tbclordermanager_items_main_desc"}]*}] -[{*
    *}] -[{*
    *}] -[{* [{oxmultilang ident="D3_GENERAL_ORDERMANAGER_BASICRESTRICTIONS"}]*}] -[{*
    *}] - -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] - -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* [{if $blShowLangSwitch}]*}] -[{* *}] -[{* *}] -[{* *}] -[{* [{/if}]*}] -[{*
    *}] -[{*  *}] -[{* *}] -[{* *}] -[{*
    *}] -[{*  *}] -[{* *}] -[{* *}] -[{*
    *}] -[{*  *}] -[{* *}] -[{* *}] -[{* [{oxinputhelp ident="D3_ORDERMANAGER_MAIN_SORT_DESC"}]*}] -[{*
    *}] -[{*  *}] -[{* *}] -[{* *}] -[{* [{oxinputhelp ident="D3_ORDERMANAGER_MAIN_FOLDER_DESC"}]*}] -[{*
    *}] -[{* [{oxmultilang ident="D3_ORDERMANAGER_MAIN_LASTEXEC"}] *}] -[{* *}] -[{* [{$edit->getValue('iLastExecDate')|date_format:"%Y-%m-%d %H:%M:%S"}]*}] -[{*

    *}] -[{* [{include file="language_edit.tpl"}]
    *}] -[{*
    *}] - -[{* *}] -[{* [{include file="d3_modprofile_actionbuttons.tpl"}]*}] -[{*
    *}] -[{*
    *}] -[{*
    *}] -[{* [{oxmultilang ident="D3_ORDERMANAGER_MAIN_FIELDSET_EXECUTION"}]*}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{* *}] -[{*
    *}] -[{* *}] -[{* *}] -[{* *}] -[{* 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"}]*}] -[{*
    *}] -[{*  *}] -[{* *}] -[{* *}] -[{* getValue('blItemMailSend')}]checked[{/if}] [{$readonly}]>*}] -[{* [{oxinputhelp ident="D3_ORDERMANAGER_MAIN_MAILSEND_DESC"}]*}] -[{*
    *}] -[{* *}] -[{* *}] -[{* *}] -[{* getValue('blAddHistory')}]checked[{/if}] [{$readonly}]>*}] -[{* [{oxinputhelp ident="D3_ORDERMANAGER_MAIN_ADDHISTORYITEM_DESC"}]*}] -[{*
    *}] -[{*
    *}] -[{*
    *}] -[{*
    *}] - [{include file="bottomnaviitem.tpl"}] [{include file="bottomitem.tpl"}] diff --git a/Application/views/admin/tpl/spfCheck.tpl b/Application/views/admin/tpl/spfCheck.tpl index dd8fe19..9301fd4 100644 --- a/Application/views/admin/tpl/spfCheck.tpl +++ b/Application/views/admin/tpl/spfCheck.tpl @@ -1,14 +1,6 @@ [{include file="headitem.tpl" title="GENERAL_ADMIN_TITLE"|oxmultilangassign}] [{include file="inc_bootstrap.tpl"}] - -
    [{$oViewConf->getHiddenSid()}] @@ -17,25 +9,57 @@
    -

    [{oxmultilang ident="D3_TAB_SPFCHECK"}]

    -
    - [{foreach from=$result key="domain" item="spf"}] -
    -
    -
    - [{$domain}] +
    + [{oxmultilang ident="D3_MAILCHECKER_SPFRESULT_DESC"}] +
    +
    +
    +
    +
    + [{foreach from=$result key="domain" item="spf"}] +
    +
    +
    + [{$domain}] +
    +
    +

    [{oxmultilang ident="D3_MAILCHECKER_SPFRESULT_"|cat:$spf->getStatus()|upper}]

    + [{if $spf->getRecord()}] +

    + + +

    + [{/if}] + +
    [{oxmultilang ident="D3_MAILCHECKER_SPFRESULT_LINKS"}]
    + +
    +
    -
    - [{oxmultilang ident="D3_SPFRESULT_"|cat:$spf->getStatus()|upper}]
    - [{if $spf->getRecord()}] -
    - - [{/if}] -
    -
    + [{/foreach}]
    - [{/foreach}] +
    [{include file="bottomnaviitem.tpl"}] diff --git a/Application/views/de/translations.php b/Application/views/de/translations.php index fbfceb5..2405d4e 100644 --- a/Application/views/de/translations.php +++ b/Application/views/de/translations.php @@ -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.', ]; diff --git a/menu.xml b/menu.xml index 85a2746..6e1da6e 100644 --- a/menu.xml +++ b/menu.xml @@ -3,10 +3,10 @@ - - - - + + + + diff --git a/picture.svg b/picture.svg index e2fd204..7051426 100644 --- a/picture.svg +++ b/picture.svg @@ -1,15 +1,18 @@ + - + + - + 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"/> + + @@ -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"/> - + + @@ -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"/> - + - + + + + + + + + +