Chyba při odeslání mailu – maximální délka řetězce v setFrom()
- roman.campula
- Člen | 60
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 | 516
@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
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 | 516
@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
Pokud použiji SMTP Gmailu, tak to funguje. Zajímavé. Takže Apple neumí zpracovat mého odesílatele, super… Díky za podporu.