Portál AbcLinuxu, 24. října 2025 14:43
Řešení dotazu:
Funkce mail() je jednoduchá na použití, ale emaily odesílané pomocí této funkce bývají detekovány jako SPAM. Raději bych to odesílal přes SMTP s ověřením, kde k tomu nedochází.Funkce
mail() odesílá e-maily úplně stejně, jako byste je posílal přes SMTP. Jediný rozdíl je v tom, že mail() používá existující lokální SMTP klient (sendmail), místo aby sama implementovala SMTP protokol. Tak si nastavte lokální (odesílající) sendmail tak, ať používá pro odeslání SMTP server, který chcete použít, a máte to vyřešeno.
function SendUtf8QuotedTextMail($to,$subject,$body,$fromName,$fromEmail,
$returnPath = false,$addParam = false)
{
$delimiter = "==M_Boundary_x-Z-" . MD5(time() . mt_rand());
$headers = "X-Mailer: PHP\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed; ";
$headers .= "boundary=\"{$delimiter}\"\n";
$pom = "$fromName <$fromEmail>";
$headers .= "From: $pom\n";
$headers .= "X-Sender: $pom\n";
if($returnPath)
$headers .= "Return-Path: <$returnPath>\n";
$headers .= "Content-Transfer-Encoding: 7bit\n";
$message = "It is multipart mime e-mail.\nUpgrade your's e-mail client.\n\n--{$delimiter}\n";
$message .= "Content-Type: text/plain; charset=utf-8\n";
$message .= "Content-Transfer-Encoding: quoted-printable\n\n";
$message .= "\n" . imap_8bit($body);// . "\n\n--{$delimiter}\n";
$message .= "\n--{$delimiter}--";
$subject = str_replace("\n",'',$subject);
$subject = str_replace("\r",'',$subject);
$subject = "=?utf-8?B?".base64_encode($subject)."?=";
if($addParam === false)
return @mail($to, $subject, $message,$headers);
else return @mail($to, $subject, $message,$headers,$addParam);
}
SendUtf8QuotedTextMail("vase@adresa.kam",
"Testovací email s (ěščřžýáíé)",
"Testovací zpráva - šup (ěščřžýáíé)",
"Twiggy","kdo@to.posila","kdo@to.posila");
mail() úplně stejné, jako jakékoli jiné maily – jediný rozdíl je, že ve vašem případě je odesílatelem onen sdílený hosting, takže chyba musí být v něm. A nebo je chyba ve vašich e-mailech, a vy jste učinil špatný závěr, že je to tou PHP funkcí – zkuste ten e-mail poslat jiným způsobem, nebo naopak onou funkcí mail() poslat nějaký normální e-mail, a uvidíte, zda se to bude chovat jinak.
From, jak se píše:
Note: When sending mail, the mail must contain a From header. This can be set with the additional_headers parameter, or a default can be set in php.ini.
A pokud server sám doplní hlavičku něco jako například pepa@pc.skupina místo pepa@mojedomena.cz, tak například seznam.cz to švihne do spamu. (aspoň mně to tak dělal, bez ohledu na obsah) :).From a ověřit si na došlém mailu co v ní je a to co tam je by mělo obsahovat existující doménu a nejlépe tu, od které to jde.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.