Nefunguje mi ověření přes DKIM

akmt
Člen | 20
+
0
-

Ahoj,
vyčerpal jsem již veškeré návody a dokumentaci k odeslání e-mailu s DKIM podpisem přes Nette\Mail\SendmailMailer a Nette\Mail\DkimSigner.
Můj kód vypadá takto:

$constant = $batch->depositamountconstant;

$qrPlatba = new QRPlatba();
$qrPlatba->setIban($batch->depositaccountiban)
	->setCurrency($batch->depositaccountcurrency)
	->setVariableSymbol($contactAccountId)
	->setRecipientName($batch->depositaccountrecipientname)
	->setMessage($contactFullName);
if (intval((int)$batch->depositaddamounttoqrcode) === 1 && isset($contactA1, $contactA2)) {
	$qrPlatba->setAmount(
		abs( round(($contactA1)*($constant))+round(($contactA2)*($constant)) )
	);
}
$qrFile = 'data:image/png;base64,' . base64_encode($qrPlatba->generateQr());

$params = [
	'accountnumber' => $batch->depositaccountnumber,
];

$latte = new \Latte\Engine;
$latte->setLoader(new \Latte\Loaders\StringLoader());

$mail = new Message;

if (str_contains($batch->depositemailtemplate,'{$cidqr}')) {
	$cidQr = $mail->addEmbeddedFile($qrFile)->getHeader('Content-ID');
	$params['cidqr'] = substr($cidQr,1,-1);
} else {
	$params['cidqr'] = null;
}

$mail->setFrom($batch->depositemailfrom);
$mail->addTo($contactEmail);
$mail->setSubject( $latte->renderToString($batch->depositemailsubject, $params) );
$mail->setHtmlBody( $latte->renderToString($batch->depositemailtemplate, $params) );

if ($id === null && $batch->depositemailfrom !== $contactEmail) {
	$mail->addBcc($batch->depositemailfrom);
}
if ($id === null && (int)$batch->depositaddattachment === 1) {
	$mail->addAttachment($attachment);
}

$mailer = new Nette\Mail\SendmailMailer();
$mailer->setSigner(new Nette\Mail\DkimSigner($this->dkimConf));

try {
	$mailer->send($mail);
	$this->depositManager->updateProcessedBatchRow($rowId, 'SENT_OK');
} catch (Nette\Mail\SendException $e) {
	$this->depositManager->updateProcessedBatchRow($rowId, 'SENT_ERROR', $e->getMessage());
}

E-mail je odeslán, ale když si dám zobrazit zdroj doručeného e-mailu na Gmailu, tak vidím DKIM FAIL:

SPF: Výsledek pro IP adresu 178.251.187.18: PASS Další informace
DKIM: Výsledek pro doménu: 'FAIL' Další informace
DMARC: 'PASS' Další informace

Takto vypadá obsah zprávy:

Delivered-To: xxx@gmail.com
Received: by 2002:a05:6022:219e:b0:36:1e17:cf40 with SMTP id 30csp505441lab;
        Thu, 12 Jan 2023 13:02:40 -0800 (PST)
X-Google-Smtp-Source: AMrXdXuqMGVMC3ii2FVvqTMIy5REkm2TuNDKqA8PuDuXbGMtVdA0hdzBYes4pe+sPmNoy0Y89Dun
X-Received: by 2002:a17:906:2859:b0:7c1:32:3574 with SMTP id s25-20020a170906285900b007c100323574mr55174391ejc.12.1673557359867;
        Thu, 12 Jan 2023 13:02:39 -0800 (PST)
ARC-Seal: i=1; a=rsa-sha256; t=1673557359; cv=none;
        d=google.com; s=arc-20160816;
        b=wFSZlB8sYvpXMbrHzBchq+juOzPiUdU8DqMIdiK8wYrJt8Ri+lgMXfPNOgu5pEcx0g
         1GHtoI2sxoUKN0GgNrNpFnz0n36gVNeCdDLwVRZ1MSqlLztpZbTeSY0yK6yuRgOuMnK/
         bYlCnE6oia+VlTJ5LHM5vy1MjhFVblvLadmdFABuW38BNQGMmAtjWxX39GJ4cHpbXr2E
         SuRx95zVV5RaLNDkhciVi1Zb+pe5rUMaCG9GszrXsZGYFj3oztWypVEKYrbqw5JLijIK
         woip5I1VLJeAWKr28vpQuRGz5pfyABxL/aohicAb+8d4laaTe+NLbevtgYLTCuVfVXvW
         YeGg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
        h=dkim-signature:message-id:from:date:mime-version:subject:to;
        bh=BEUvXykRYgY+CAn7+OsJwip/5FaW3Cea0LEBX1gazHE=;
        b=xH6JfAgBNNBzkoXEVyKzP3chdrKh6AvxV0jTp5Pj2Qv8/NNWzWfWGQyHYDwCcfFfFa
         TeAdqPWGYBGIcb5q5hxCih0NtO1fwYBXn5NrjX5vfXMO1dzKlX55UrYD8eT2xPjUTknj
         h43Cuq72rWtgqXq63jga7t5s7NieGVefzIWjN2m4l4nj67RZoDceq0f1yCy4Huw/Yj4t
         u5LA0XwzodX48U+zhDRUI4eKaWY1A0sxuSwAXqRWDmUNFkreCkztwF0KB90VDSBObc8O
         gZ4OowdNKDdPkhVjvqsh/ZyIEZN5F6buK5JcsdjaNI+jMJX8DcTSsfWiFQin3Qd83SVS
         ei6w==
ARC-Authentication-Results: i=1; mx.google.com;
       dkim=neutral (body hash did not verify) header.i=@yyy.cz header.s=yyy header.b="J2/jER1P";
       spf=pass (google.com: domain of postmaster@yyy.cz designates 178.251.187.18 as permitted sender) smtp.mailfrom=postmaster@yyy.cz;
       dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=yyy.cz
Return-Path: <postmaster@yyy.cz>
Received: from bb.miniserver.cz (bb.miniserver.cz. [178.251.187.18])
        by mx.google.com with ESMTPS id xa5-20020a170906fd8500b0084d3fbc7accsi11222217ejb.492.2023.01.12.13.02.39
        for <xxx@gmail.com>
        (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
        Thu, 12 Jan 2023 13:02:39 -0800 (PST)
Received-SPF: pass (google.com: domain of postmaster@yyy.cz designates 178.251.187.18 as permitted sender) client-ip=178.251.187.18;
Authentication-Results: mx.google.com;
       dkim=neutral (body hash did not verify) header.i=@yyy.cz header.s=yyy header.b="J2/jER1P";
       spf=pass (google.com: domain of postmaster@yyy.cz designates 178.251.187.18 as permitted sender) smtp.mailfrom=postmaster@yyy.cz;
       dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=yyy.cz
Received: (qmail 83452 invoked by uid 89); 12 Jan 2023 21:02:39 -0000
Received: from hyperion.blueboard.cz (178.251.187.9)
  by bb.miniserver.cz with SMTP; 12 Jan 2023 21:02:39 -0000
Received: (qmail 55683 invoked by uid 80); 12 Jan 2023 21:02:36 -0000
To: xxx@gmail.com
Subject: =?UTF-8?B?Wm3Em25hIMO6aHJhZHkgemEgcG9za3l0b3ZhbsOpIHNsdQ==?=  =?UTF-8?B?xb5ieSBvZCAxLiDDum5vcmEgMjAyMyAoVGVzdENlbMOpSm3DqW5vKQ==?=
X-PHP-Originating-Script: 80:Callback.php
MIME-Version: 1.0
X-Mailer: Nette Framework
Date: Thu, 12 Jan 2023 22:02:36 +0100
From: aaa@yyy.cz
Message-ID: <3y8l454e0f@www.yyy.cz>
Content-Type: multipart/alternative;
	boundary="--------8rawt8nxr9"
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; l=7851; s=yyy; t=1673557356; c=relaxed/simple; h=From:Date:Message-ID:X-Mailer:Content-Type; d=yyy.cz; bh=uGChDXlptA+OfcDucFmN/kC2mDkN7+HI8pcC17lsRuE=; b=J2/jER1PMEis0WjHx2w+2guvfx56TMj1ezM2mkpGBpreQ/MC5ZP4v7pjLelBoUWJx2EY/I/3XV5eeYRwvXZO3uPwOvBLiWXIQh/kr+agBtMZZ4sDz/HSiyzwrpZCvJvbRFJx1HWzfejpyNM5lv5Kx1b2Et32b7/J6kj/vdvwy6M=


----------8rawt8nxr9
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Vážení klienti,

s ohledem na pokračující nárůst nákladů, především cen energie a potravin, a v souladu s novelou vyhlášky k zákonu o sociálních službách č. 505/2006 Sb., dochází od 1. února 2023 k úpravě výše úhrad za poskytované služby yyy Mělník.

Nová denní úhrada: 1 234,50 Kč (měsíčně 37 553,00 Kč)

Děkujeme za pochopení.

S pozdravem

Váš yyy

Jednoduchá platba pomocí QR kódu:
----------8rawt8nxr9
Content-Type: multipart/related;
	boundary="--------ynr2uvuh9b"

----------ynr2uvuh9b
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit

<p>Vážení klienti,</p>
<p>s ohledem na pokračující nárůst nákladů, především cen energie a potravin, a v souladu s novelou vyhlášky k zákonu o sociálních službách č. 505/2006 Sb., dochází <strong>od 1. února 2023</strong> k úpravě výše úhrad za poskytované služby yyy Mělník.</p>
<p>Nová denní úhrada: <strong>1 234,50 Kč</strong> (měsíčně 37 553,00 Kč)</p>
<p>Děkujeme za pochopení.</p>
<p>S pozdravem</p>
<p>Váš yyy</p>
<p style="text-align:center">Jednoduchá platba pomocí QR kódu:<br><img src="cid:wn8v8lymmb@www.yyy.cz" alt="QR kód pro platbu"></p>

----------ynr2uvuh9b
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=
	"BZAYQaAP16nowAYCQFCCBBCAIQQIIQACCFQqv4DOi2jpkqRhQsAAAAASUVORK5CYII="
Content-ID: <wn8v8lymmb@www.yyy.cz>

iVBORw0KGgoAAAANSUhEUgAAAOEAAAD3CAYAAADrPDP8AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAL
pUlEQVR42u3dTWhUVx/H8d/VMZlIaxJRzKQSNTYYJeLGhd2E+kIVW8WFiy5LlNBWIShSXKgLEXER
dFWrIsVFlCjWhbgIEjBdCK7iCyIhhFJFQ0zRZFGMiHq68HFwnpmYa+7JOWcy3w+ESpmZe+fm/jzn
/j33fyNJRgC8SUmSMeQQ8CGKIs3gMAB+EUKAEAKEEAAhBAghAEIIEEIAhBAghAAIIUAIARBCgBAC
IIQAIQRACAFCCGCKpWx/YBRFwXy5JG07Cn2PQp+X5Pva3j9fxyrJ8Su184qREGA6CoAQAoQQwIdS
Ljbioq9p3At32wUDF8WGQtvw1Ss2yfFL8n1DP68YCQGmowAIIUAIAUxGyteGfa00sX3Rb3tljYuV
Ky7YXl0U+nnFSAgwHQVACAFCCGAyUqX2hV1cuNteVeKrSJTkmPL0Z0ZCgBACIIQAIQQwsZIrzMQt
VCRZWVPo8+Juw3YhJclKHdvvpVjDSAgQQgCEECCEAHJ5K8yE1CPF9ntt91xJckxDKjq5KNYUY/GH
kRAghAAhBEAIgdLlpDAT0hN14l7M274tyHbxIqTbkWx/D1+FLUZCgOkoAEIIEEIArlkvzIS+YsFF
cSUuX7f7FOOjp6fzbVCMhAAhBAghAEIIlC7rhRkXF/0uVpD4KuCE/khpX6t8XKzK8VUoYyQEmI4C
hBAAIQRKV/Tu2tP9agQXj5n2tY24Qu9FY/vzXDyZyvb55yIHjIQA01GAEAIghEDp8tZjxsWFdhIu
VqTYXh3jYhvF+JQn2w2fbZ+7jIQA01GAEAIghEDpclKYKcaLdF/Nel30rAnpUda+CnQubodjJASY
jgIghAAhBDCR4FfM2C42uChU+Oox42KfQ7ptKaTb3BgJAaajAAghQAgBTEbK14Zd3F7iYmVISH1n
QuqfE1KPGZr/AiCEACEEQAiBUAV/K5Ptz7NdbEjCxeqYJIUFX7eRhV5ko8cMwHQUACEECCEAW4ry
Vqa4F9VJ9sVFTxgXn+erKbKvfi22sWIGYDoKgBAChBDAVLJemLHdXDfJNkJ6ak/oBSHbv18X/VpC
f9oSIyHAdBQAIQQIIYCJpELaGV+rY3wVB+J+t0Lb8HUrmO3v5uL3FvrqHUZCgBAChBAAIQRKV1CF
GV+9Y5IUB3w98We6rC6yfR64KLzRYwZgOgqAEAKEEIAt1gszvnqu2F6NYbtpru33+npUtK/jEtI5
yUgIMB0FQAgBQgjAFm89ZmxfVPtajRF6jxkXPX9snwcutuvrdi5GQoDpKABCCBBCAB/yditT6AWX
uPtie6WJrx4zto+97eLKdC7WMBICTEcBQgiAEAKly0lhxlfxIslFv+0VLsX42GrbhQoXfXt8HStG
QoDpKABCCBBCAJNRlD1mXBRXXPRc8fXIZheNdIvxmLJiBmA6CoAQAoQQgGtOVswkuVj2dYFv+8I9
ycqQJPvnqxlz3N+l7aPK9vnHSAgwHQVACAFCCGAqBdX811fD2CT7kqQnjO1iTUiPxi7GHjPcygQw
HQVACAFCCMA1bz1mXBQMbG/X9jEI/XHUvhruhvT0K0ZCgOkoAEIIEEIAUykV0s4U4woNF01pQ19F
htAYY3744YfsPwXcuXPnoyE8e/as2bRpk0mn02bx4sXmzJkzH10x09HRYb788kuTTqfNhg0bTH9/
v5k3b56RZHp7e7NBWr16tUmn06axsdE8f/48J4SXL182a9asMWVlZaa+vj4n9HG3gdIU+Xw44cjI
iA4cOKAHDx6oq6tL5eXliT4vk8loaGhIXV1d2rhxI9MclHZ1NI7q6mr9+uuv/BZAYQaAP16nowAY
CQFCCBBCAIQQIIQACCFQqv4DOi2jpkqRhQsAAAAASUVORK5CYII=
----------ynr2uvuh9b--
----------8rawt8nxr9--

Uměl by mi někdo poradit jak zfunkčnit DKIM ověřování přes Nette Mail?

Díky!

Lukes
Silver Partner | 68
+
0
-

Prosím co máš v $this->dkimConf, neposílej hlavně privateKey a passPhrase, chtělo by zkontrolovat jestli máš správně nastavený selektor a případně headers, které podepisuješ. Dále by to chtělo zkontrolovat jestli máš DKIM správně nastavený v DNS.

Milo
Nette Core | 1283
+
0
-

Když takhle obfuskuješ zdroj té zprávy, tak nelze moc pomoci. TXT záznam se selektorem máš funkční?

akmt
Člen | 20
+
0
-

$this->dkimConf obsahuje:

$this->dkimConf = [
	'domain' => $this->domain,
	'selector' => $this->additionalParameters['dkimselector'],
	'privateKey' => file_get_contents($this->additionalParameters['dkimPrivateKey'],),
];

výpis hodnot:

Array
(
    [domain] => senlife.cz
    [selector] => senlife
    [privateKey] => -----BEGIN RSA PRIVATE KEY-----
MIICWwIBA ... iRpEvl3K2tczSaBQ==
-----END RSA PRIVATE KEY-----
)

Obsah e-mailu doručeného na Gmail včetně hlaviček jsem uložil na https://senlife.cz/…kim-fail.eml

akmt
Člen | 20
+
0
-

Provedl jsem ještě jedno srovnání – e-mail zaslaný z localhostu a e-mail zaslaný z hostingu:

  1. E-mail z localhostu prošel s dkim: pass – odkaz na zdroj https://www.senlife.cz/…kim-pass.eml
  2. E-mail z hostingu prošel s dkim: neutral (body hash did not verify) – odkaz na zdroj https://www.senlife.cz/…kim-fail.eml

Obsahově jsou oba e-maily skorot totožné, přes diffchecker jsem našel hlavní rozdíl v tom, že e-mail z hostingu (který neprošel přes dkim) obsahuje v hlavičce navíc řádek X-PHP-Originating-Script: 80:Callback.php

Může být špatné vyhodnocování DKIMu způsobené tímto? Díky!

Milo
Nette Core | 1283
+
0
-

Nemůže. V DKIM-Signature hlavičce máš uvedeno, jaké hlavičky se kontrolují. Konkrétně From:Date:Message-ID:X-Mailer:Content-Type, tedy X-PHP-Originating-Script na to vliv nemá.

DNS selektor máš dobře, hlavičky jsou validní a padá to na ověření těla zprávy, něco se s ním po cestě přes hosting stane.

Milo
Nette Core | 1283
+
0
-

Porovnávám ty dva eml a je to divný. Zkus si ten e-mail před odesláním uložit lokálně na hostingu do souboru třeba v tempu a pak to porovnat s tím, co ti přijde na GMail.

Milo
Nette Core | 1283
+
0
-

V tom fail je navíc jeden prázný řádek, před ----------bl8err665x a ten se započítá do výpočtu hashe.

akmt
Člen | 20
+
0
-

Milo napsal(a):

Porovnávám ty dva eml a je to divný. Zkus si ten e-mail před odesláním uložit lokálně na hostingu do souboru třeba v tempu a pak to porovnat s tím, co ti přijde na GMail.

Já se snažil najít způsob, jak e-mail s vygenerovaným DKIM uložit/zobrazit, ale žádnou odpovídající metodu jsem v Nette\Mail\SendmailMailer() nenašel… Existuje nějaký jednoduchý způsob jak to udělat? Děkuji.

Milo
Nette Core | 1283
+
+2
-

Dočasně si dej třeba file_put_contents() do https://github.com/…ilMailer.php#L51

akmt
Člen | 20
+
0
-

Než vyzkouším ten výpis odeslaného e-mailu, tak zatím mi odepsali z Blueboard:

bude to asi souviset s chybou v PHP 8+

https://github.com/…/issues/8086

https://bugs.php.net/bug.php?…

Milo
Nette Core | 1283
+
0
-

Neříkal bych tomu chyba v PHP, je to zkrátka korektní implementace protokolu se kterou Unixový sendmail nepočítá. Nemají v Bluebord SMTP server, přes který bys to posílal přímo SmtpMailerem?

Anebo ať pro PHP 8 upraví php.ini sendmail_path. Měla by ho využívat pouze funkce mail() a ta teď už produkuje konzistentní výstup s \r\n.

akmt
Člen | 20
+
0
-

Už jsem si to přenastavil na SmtpMailer, takže DKIM již funguje.

Ohledně sendmail_path – zeptám se jich. Máš nějaké konkrétní doporučení, jak ho mají přenastavit?

Děkuji.

m.brecher
Generous Backer | 758
+
+1
-

@akmt

Už jsem si to přenastavil na SmtpMailer, takže DKIM již funguje.

Vidíš, to bych Ti poradil hned, kdybych věděl, že Jsi na Blueboardu, přesně takhle jsem to také vyřešil ;)