ugrás a tartalomhoz

PHP mail() Gmail hiba

vizes · 2011. Aug. 6. (Szo), 15.49
Üdv mindenki!

Segítség reményébe fordulok hozzátok. Egy ajánlót írtam PHP-ban (neve, mail címe, ismerőse mail címe, üzenet). Működik a kód freemail-ra citromail-ra teszteltem. Csupán Gmail-es email címekre nem továbbítja az üzenetet.
Miért van ez, és hogy tudom kiküszöbölni a hibát?

Előre is köszönöm a válaszokat!
 
1

Spam?

janoszen · 2011. Aug. 6. (Szo), 19.28
Ez nagy valószínűség szerint a szervered levelezőszerverének és / vagy a levél formázásának a hibája.

Először is nézd meg, hogy nem ment-e spam mappába. Ha igen, akkor több dolgot tudsz tenni. Nézd meg, rendben vannak-e a fejléceid (From, To, Subject, stb). Ha nincsenek, akkor az automatice spam mappa. Ezen felül még megnézheted, hogy a küldő szerver nincs-e valamiféle fekete listán, jól van-e felconfolva.

A Gmail nem szokott csak úgy eldobálni leveleket, szal ha megtalálod, akkor másold be a levél fejlécét és akkor tudunk továbbiakat mondani.
2

hol "tartod"?

Peete · 2011. Aug. 6. (Szo), 22.50
Üdv! Csak kerültem kapcsolatba egy precedenssel, ezért kérdezem: a tárhelyed "rendes, boltban vett, fizetős, simán .valami domainnel" féle, vagy valamely ingyenesen beszerezhető szolgáltatás?
3

Forrás + válasz

vizes · 2011. Aug. 8. (H), 11.05
<?php

//$youremail = "molnarne45##kukac##citromail.hu";
// a mail cím, ahova a levelek menni fognak

$subject = "contact form";
// a levél tárgya

$thankyou = "sikeresmail.html";
// sikeres küldés után ez fog megjelenni a küldőnek

// innentől kezdve már ne módosíts semmit
function check($postArg) { return (IsSet($_POST[$postArg]) && !Empty($_POST[$postArg])); }

if(!check('email')){
?>
Nem adtál meg mail címet, nyomd meg a VISSZA gombot.<br/>
<?php
}elseif(!check('name')){
?>
Nem adtál meg nevet, nyomd meg a VISSZA gombot.<br/>
<?php
}elseif(!check('message')){
?>
Nem írtál be üzenetet, nyomd meg a VISSZA gombot.<br/>
<?php
}else{

$msg = ereg_replace("\\\'", "'", $_POST['message']);
$msg = ereg_replace('\\\"', "\"", $msg);
$message1 = "from: " . $_POST['name'] . "\nemail: " . $_POST['email'] . "\nmessage:\n" . $msg;
mail($_POST['mailto'], $subject, $message1, "From: " . $_POST['email'] . "\r\nReply-to: " . $_POST['email'] . "\r\n");
?>
<meta http-equiv="refresh" content="0; url=<?echo $thankyou;?>"">
<?php
}
?>

Íme a forrás. Internetről találtam, de módosítanom kellet rajta. Lehetséges hogy akkor rontottam el valamit.
Amúgy igaz ingyenes atw-s tárhelyen vagyok. De a többi levélszolgáltatónak elküldi (citromail, freemail), csak a Gmail válogatja ki ezeket. Szóval nem értem ezzel mi lehet a probléma.
4

csak tipp: a mailban a from

Kubi · 2011. Aug. 8. (H), 11.57
csak tipp:

a mailban a from részhez bármilyen email cím bekerülhet, amit a formon megad a user, szerintem azért dobja el, mert a domain (ahonnan a levelet küldöd) nem egyezik a from -ban szereplő mail domainjével.
5

javítási lehetőség?

vizes · 2011. Aug. 8. (H), 11.59
És ezt ki lehet valahogy küszöbölni, vagy csak normális tárhelyen lesz csak jó?
6

Légyszi amúgy használj kódszínezőt,

Peete · 2011. Aug. 8. (H), 12.41
Pont azért kérdeztem, hogy hol tartod, mert nemrég kapcsolatba kerültem egy hasonló problémával: haver megkért, hogy segítsek; neki is spam lett..

Nem tudom erős szakmai érvekkel alátámasztani, ez csak "józan paraszti ésszel szerzett tapasztalat":
A túl bonyolult kódot spamként jelölik.

Én úgy oldottam meg, hogy nekiálltam onnan, hogy:
Adott egy űrlap, rajta egy darab textarea, name="tartalom", form action=feldolgoz.php, ami:

<?php
$akinekkuldom = "cimed##kukac##gmail.com";
$cim = "Üzenet a teoldalad.atw.hu-ról";
$tartalom = $_POST['tartalom'];
mail($akinekkuldom, $cim, $tartalom); 
?>
Ez így működik, csak rossz, mert üresen is elmegy a levél..
Szóval: if-else ciklussal ellenőriztem, hogy létezik-e a $tartalom, és nemegyenlő-e " "-vel..
...
stb... lépésenként bővítettem a fenti kódot..

Nem tudom megindokolni, de összességében azt tapasztaltam, hogy:
1.) A mail függvényben lévő tagoknak változóknak kell lenniük.. tehát a
mail($akinekkuldom, $_POST['cim'], $_POST['tartalom']); 
nekem spam lett, helyette:

$cim = $_POST['cim'];
$tartalom = $_POST['tartalom'];
mail($akinekkuldom, $cim, $tartalom); 
így már nem lett spam..

2.) A kód összetettsége, pár dalab if-else ciklusnál, néhány $_POST['xyz'], és kettő echo (); -nál ne legyen összetettebb, mert az már spam lesz..

Remélem, segítettem, és bocs mindenkitől a szakbarbárkodó megközelítésért, de nekem így eredményre sikerült jutnom az ingyentárhely vs. Gmail szituációban.
7

Sikerült

vizes · 2011. Aug. 8. (H), 13.08
$message1 = "from: " . $name . "\nemail: " . $mail . "\nmessage:\n" . $msg;
    $name = $_POST['name'];
$cim = $_POST['email'];  
$mailto = $_POST['mailto'];
mail($mailto, $subject, $message1);


Köszönöm a jó tanácsot. Átírtam úgy ahogy mondtad változókkal helyettesítettem és azóta működik megfelelően. Köszönöm még egyszer!
8

látom már müködik, de itt

Kubi · 2011. Aug. 9. (K), 09.16
látom már müködik, de itt megoldás lehet még talán az, hogy a from mezőt békénhagyod, és van egy olyan reply to, oda beírhatsz bármilyen email címet attól nem lesz spam.

http://php.net/manual/en/function.mail.php
example2