Levelezés a Gmail-en keresztül
Végül csak sikerült megoldani a DarkRPG levelezését. Ugyebár az új honlaphoz azért nem készült privát üzenetküldési szolgáltatás, (és még pár dolog) mert a tárhelyen nem működik a levelezés. Eleinte próbáltuk kivárni, hogy csak megjavítják. Hát ez nem történt meg. Aztán pedig belekezdtünk egy saját program írásába, ami megkerüli a dolgot, de időhiány miatt nem igazán halad a dolog. Kezdett nagyon kínos lenni az ügy…
De mivel egyre több levél érkezik, hogy jó volna már pontot tenni az ügy végére, ma reggel nekiláttam egy külső (mások által írt) program felhasználásával megoldani a problémát. Ez pediglen Brent R. Matzelle PHPMailer-e. Már bevált más honlapjaimnál, de persze ennek ellenére csak nem ment oly egyszerűen a beüzemelése, mivel mi a Gmail smtp szolgáltatását szerettük volna igénybe venni leveleink elküldéséhez. Arra pedig ezen kód jelenlegi verziója nem alkalmas. Így kezdhettem átnézni magát a kódot, meg pár fórumot, hátha valakinek sikerült már átalakítania.
Végül kiderült, hogy egészen egyszerű a megoldás. A class.phpmailer.php forráskódjában úgy az 537. sornál található egy ilyen kód:
537 538 539 540 541 542 543 | if(strstr($hosts[$index], ":")) list($host, $port) = explode(":", $hosts[$index]); else { $host = $hosts[$index]; $port = $this->Port; } |
Nos ez okozza a fő zavart, mivel a gmail-nél ezt a hostot kell adni: sslv2://smtp.gmail.com. Amit a fenti kód szépen két részre bont a : mentén, aminek első felét host-ként értelmez, a második felét meg portnak. Ezen okból a fenti kódot le kell cserélni erre:
537 538 539 540 541 542 543 544 545 546 | if (preg_match('#(([a-z]+://)?[^:]+):(\d+)#i', $hosts[$index], $match)) { $host = $match[1]; $port = $match[3]; } else { $host = $hosts[$index]; $port = $this->Port; } |
Illetve levélküldésnél portnak 465-öt kell adni. De itt egy példakód egy levél elküldésére:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | $mail = new PHPMailer(); $mail->SetLanguage("en", "./phpmailer/language/"); $mail->IsSMTP(); $mail->Host = "sslv2://smtp.gmail.com"; $mail->Port = 465; $mail->SMTPAuth = true; $mail->Username = "******@gmail.com"; $mail->Password = "****"; $mail->From = "*******@gmail.com"; $mail->FromName = "DarkRPG infó"; $mail->AddAddress("*******@cimzett.hu", "Edward"); $mail->WordWrap = 60; $mail->IsHTML(true); $mail->Subject = "Teszt"; $mail->Body = "Ez itt egy HTML-es teszt <b>szöveg</b>"; $mail->AltBody = "Ez itt egy szimpla HTML nélküli teszt szöveg"; if(!$mail->Send()) { echo "Üzenetet nem sikerült elküldeni. <p>"; echo "Hiba oka: " . $mail->ErrorInfo; exit; } |
Természetesen még meg kell írnom hozzá egy külön osztályt, ami elfedi a PHPMailer logikáját. Így nem kell ahhoz igazodnom, küldhetem a leveleket a saját szokásaim szerint. Pl valahogy így:
1 2 3 4 | $levelkuldes = new levelkuldes(); $levelkuldes->privatuzenet($cimzett_mail,$cimzett_nev,$targy,$tartalom_html,$tartalom_egyszeru); $levelkuldes->ujjelszo($cimzett_mail,$cimzett_nev,$felhasznaloi_nev,$jelszo); unset($levelkuldes); |
Azért kicsit átláthatóbb és egyszerűbb. Csak azokat a paramétereket kell megadnom, ami annál a levéltípusnál változik, a többit beállítja a rendszer. (Persze lehetne pl. az összes paramétert egy tömbben is átadni mindig ugyanannak a metódusnak. Az első paraméter pedig tartalmazná, hogy milyen típusú levelet szeretnék küldeni. És innentől mindent lekezel az osztály. Nagy előnye, hogy csak egy metódus nevét kell megjegyezni, és azt hívogatni)
Ha valaki kíváncsi lenne erre az “elfedő” osztályra is, szóljon és közzéteszem.
Köszönet a prog.hu-nak és látogatóinak, mert sokat segített az oldal a megoldás megtalálásában!
Szerzô: ED2 hozzászólás
Nagyon örülök, hogy sikerült megoldani, és gratulálok hozzá :)
Pár “belső” részen már használatban is van (pl ha érkezik új feltöltés, akkor kapok róla értesítő levelet). Ha minden jól megy, akkor hamarosan elkészül a privát üzenetküldő is, és akkor abba is be lesz építve.
Leave a comment
Keresés
Kategóriák
art ego hardware mmorpg mozgókép programozás rendszerüzenet seo software szerepjáték találkozó-verseny vendégpost
2009. január 26. hétfő