Portál AbcLinuxu, 5. května 2025 09:11
Ř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.