ugrás a tartalomhoz

PHP Mail - A MEGOLDÁS

szabonorbert · 2012. Jan. 6. (P), 21.55
Sziasztok!

Sokat szívtam különböző fórumokról összeollózott header kódrészletekkel, de mindig sántított valahol a kiküldött levelem: pl karakterkódolás a tárgyban, vipmail-freemail-citromail probléma, stb.

Most elkészült a kód, ami 100%-ban működik mindenféle előbb említett trágya levelezővel is SMTP szerver és php_ini babrálás nélkül - legalábbis az eddigi tapasztalataim és 633 felhasználó szerint.

Tehát megosztom veletek a kódot, használjátok egészséggel:
function sendmail ($fromname, $frommail, $to, $subject, $message) {

	//Feladó név és tárgy átkódolás
	$fromname = '=?UTF-8?B?'.base64_encode($fromname).'?=';
	$subject  = '=?UTF-8?B?'.base64_encode($subject).'?=';
	
	//Header
	$header   = "Reply-To: " . $fromname . " <" . $frommail . ">" . "\r\n";
	$header  .= "Return-Path: " . $fromname . " <" . $frommail . ">" . "\r\n";
	$header  .= "From: " . $fromname . " <" . $frommail . ">" . "\r\n";
	$header  .= "MIME-Version: 1.0" . "\r\n";
	$header  .= "Content-type: text/html; charset=UTF-8" . "\r\n";
	$header  .= "Organization: ide írj valamit" . "\r\n";
	
	mail($to, $subject, $message, $header);

};
Ez egy hihetetlenül egyszerű kód, tudom, de ennek ellenére ha ebbe valami apró hiba csúszik, már borul az egész, mert nem lesz valid a kiküldött leveled és fenn fog akadni bizonyos szűrőkön. Én úgy használom, hogy van egy sendmail.php file, aminek összesen ennyi a tartalma, amit beillesztettem. Abban a php file-ban, amiben levelet akarok küldeni behívom a sendmail -t, így:
require_once ($_SERVER['DOCUMENT_ROOT'] . '/php/sendmail.php');
(A $_SERVER['DOCUMENT_ROOT'] tulajdonképpen a gyökérkönyvtáradba vezet, így onnan meg tudod adni a sendmail.php elérését egyszerűen, így ha különböző mappában vannak a levélküldő php-id, akkor sem kell állandóan átírogatni az elérési útvonalat. Tehát require-once, és onnantól sima funkcióként lefuttatod.)

Azt remélem mondanom sem kell, hogy a sendmail.php-t és a funckiót futtató php-t is UTF-8-ban kell menteni.

Sok időt spóroltam volna magamnak, ha ezt a fenti kódot megtalálom és nem nekem kell összeizzadni. Remélem segítettem ezzel.

Ha valamivel kiegészítenétek a headert, írjátok meg az ötleteteket nyugodtan.
 
1

Néhány észrevétel

Pepita · 2012. Jan. 7. (Szo), 01.39
- Szerintem egy picit jobban megírod és ez egy cikk. Fórumtémában nekem szokatlan, hogy nem problémafelvetés, hanem megoldás a téma.
- $header .= "Organization: ide írj valamit" . "\r\n"; Ez viszont nagyon csúnya. Mit írjak oda?
- Hamár fejléc, én hiányolom ezeket: "Cc:", "Bcc:", "Reply-To:", stb. (Csatolmány még esetleg).
- A $message=wordwrap($message,70); kihagyása elég súlyos hiba, vagy az űrlap html-ét is közölnöd kéne, de ez a fv. a jobb megoldás.
- "...ha ezt a fenti kódot megtalálom..." kicsit bővebben benne van a php manual-ban.
- Több mail (pl. hírlevél) kiküldésére nem ez a fv. jó.

Hát ennyi. Remélem nem voltam túl lehangoló, szerintem kijavítva, kibővítve és csúnya szavak nélkül kezdőknek való cikk is lehetne belőle, sokat szokták kérdezni.