Chyba při odeslání mailu – maximální délka řetězce v setFrom()

roman.campula
Člen | 60
+
0
-

Zdravím,
narazil jsem na situaci, kterou si nedokážu vysvětlit. Snažím se odeslat mail pomocí

function __construct(private Nette\Mail\Mailer $mailer) {
}

$mail = new Nette\Mail\Message;
$mail->setFrom("test@test.cz", "abcdabcdabcd abcde abcde abcde abcde abcde a")
     ->addTo("test@test.cz")
     ->addReplyTo("test@test.cz")
     ->setSubject("Test")
     ->setHtmlBody("Test");
$this->mailer->send($mail);

Tato funkce, ve které jsem pro případ této otázky upravil parametry, funguje.

Jenže jakmile změním setFrom a přidám jeden znak

$mail->setFrom("test@test.cz", "abcdabcdabcd abcde abcde abcde abcde abcde ab")

Tak už se mail neodešle a vrátí se chyba
SMTP server did not accept . with error: 550 5.7.0 From address is not one of your addresses
Zřejmě proto, že aplikace neodešle jako odesílatele celý řetězec, ale jen znak . A nebo odešle, ale SMTP server to není schopen zpracovat.

Pokud použiji v odesílateli diakritiku, např.

$mail->setFrom("test@test.cz", "Čeněk Starý")

Tak už to zhavaruje při mnohem menším počtu znaků.

Existuje nějaký limit, jak dlouhý může být řetězec v setFrom()? Můj příklad s aaabbb… je poněkud absurdní, nicméně nezvládne to ani běžné zadání, jako právě $mail->setFrom("test@test.cz", "Čeněk Starý")

SMTP server je iCloud Mail.

Díky za nápady

nightfish
Člen | 472
+
0
-

@romancampula
Jak vypadá komunikace s tím SMTP serverem?
Používáš Nette SmtpMailer? Pokud ano, tak si do jeho metody protected function write(string $line, $expectedCode = null, ?string $message = null): void přidej nějaké logování toho $line do souboru (v nejjednoduší podobě třeba jako \file_put_contents('cestaksouboru.log', $line, FILE_APPEND); a pak pošli posledních pár řádků z toho logu. Mělo by z něj být patrné, jakou adresu Nette v rámci From hlavičky posílá a tedy jestli je problém na straně Nette nebo až někde dál v řetězci. Alternativně je možné zjistit stejnou informaci debuggerem, případně dumpem třeba přes Tracy.

roman.campula
Člen | 60
+
0
-

Díky za nasměrování.

Verze s setFrom("info@meteo-tvarozna.cz", "abcdabcdabcd abcde abcde abcde abcde abcde a")

(...)
DATA
MIME-Version: 1.0
X-Mailer: Nette Framework
Date: Fri, 16 Feb 2024 14:57:50 +0100
From: abcdabcdabcd abcde abcde abcde abcde abcde a <info@meteo-tvarozna.cz>
To: info@meteo-tvarozna.cz
Reply-To: info@meteo-tvarozna.cz
(...)

Verze s setFrom("info@meteo-tvarozna.cz", "abcdabcdabcd abcde abcde abcde abcde abcde ab")

MIME-Version: 1.0
X-Mailer: Nette Framework
Date: Fri, 16 Feb 2024 15:01:26 +0100
From: abcdabcdabcd abcde abcde abcde abcde abcde ab
     <info@meteo-tvarozna.cz>
To: info@meteo-tvarozna.cz
Reply-To: info@meteo-tvarozna.cz

Je tam podivné zalomení, viz obrázek: https://ibb.co/6BH93Cs

A když tam přidám diakritiku, je to ještě zajímavější. Verze s setFrom("info@meteo-tvarozna.cz", "Meteo Tvarožná")

MIME-Version: 1.0
X-Mailer: Nette Framework
Date: Fri, 16 Feb 2024 15:10:54 +0100
From: =?UTF-8?B?TWV0ZW8gVHZhcm/Fvm7DoQ==?= <info@meteo-tvarozna.cz>
To: info@meteo-tvarozna.cz
Reply-To: info@meteo-tvarozna.cz

Editoval roman.campula (16. 2. 15:12)

nightfish
Člen | 472
+
0
-

@romancampula Podle zalomení ve 2. ukázce tipuju, že to má na starosti tento kód: https://github.com/…MimePart.php#L293

Co se týká třetí ukázky, tak to je base64 kódování hlavičky, která obsahuje znaky mimo 7bit ASCII.

Osobně si myslím, že Nette v tomto případě posílá data správně a chyba je na straně zpracování v SMTP serveru. Co se stane, když stejnou zprávu (např. z ukázky 2), pošleš přes nějaký jiný mail server (třeba smtp.gmail.com, SMTP server webhostingu atd.)?

roman.campula
Člen | 60
+
+1
-

Pokud použiji SMTP Gmailu, tak to funguje. Zajímavé. Takže Apple neumí zpracovat mého odesílatele, super… Díky za podporu.