Jump to content
GSForum - Segélyvonal

PHP mail küldés


doctorwho

Recommended Posts

doctorwho

Sziasztok!

 

Van egy formom, amiben az adatokat kitöltve a küldés gombra egy MYSQL adatbázisban tárolódnak az adatok.

A formon az e-mail címet is bekérem.

Hogy lehet megoldani, hogy a formon megadott e-mail címre kiküldjek üzenetet?

Elõre is köszönöm segítségeteket.

Link to comment
Share on other sites

Kiskalóz

PHP mail függvény.

 

Lásd itt:

Link

Link to comment
Share on other sites

doctorwho

Sajnos nem sikerült.

Valaki tudna egy mini példát küldeni hozzá?

Link to comment
Share on other sites

arpsoft

A link alatt található millió példa nem jó?

Link to comment
Share on other sites

Kiskalóz

Ez a példa a link alatt volt.

 

Mi az amit nem értesz benne?

?php
$to      = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);
?>

Link to comment
Share on other sites

payskin

Óvatosan kérdezem, hogy a szerveren, ahol a PHP-t futtatni szeretnéd, engedélyezve van számodra, hogy levelet tudjál küldeni? Nem mindig olyan egyértelmû, hogy igen.

Link to comment
Share on other sites

doctorwho

Szia,

igen, engedélyezve van.

Link to comment
Share on other sites

doctorwho

Eddig jutottam:

<?php

$szoveg = "<HTML>";
$szoveg = $szoveg . "<BODY bgcolor=lightblue>";
$szoveg = $szoveg . "<br><br><br>";
$szoveg = $szoveg . "<font color=crimson size=7><b>Köszönjük, adatai bekerültek adatbázisunkba!</b></font>";
$szoveg = $szoveg . "</BODY>";
$szoveg = $szoveg . "</HTML>";

mail ("example@example.com","proba level",$szoveg,"From: felado@emailcim.hu(Felado Ember)\nX-Priority: 1 (Highest)\nMIME-Version: 1.0\nContent-type: text/html; charset=iso-8859-1");

?>

 

Hogy lehet azt megcsinálni, hogy a formon éppen megadott e-mail címre küldjön egy levelet?

Link to comment
Share on other sites

Kiskalóz

Úgy hogy a címzett helyére, az ûrlapról érkezõ adatot írod be. ($_GET, $_POST)

Link to comment
Share on other sites

doctorwho

Valahogy így?

<?php

$szoveg = "<HTML>";
$szoveg = $szoveg . "<BODY bgcolor=lightblue>";
$szoveg = $szoveg . "<br><br><br>";
$szoveg = $szoveg . "<font color=crimson size=7><b>Köszönjük, adatai bekerültek adatbázisunkba!</b></font>";
$szoveg = $szoveg . "</BODY>";
$szoveg = $szoveg . "</HTML>";

mail ("$_GET[e_mail]","proba level",$szoveg,"From: felado@emailcim.hu(Felado Ember)\nX-Priority: 1 (Highest)\nMIME-Version: 1.0\nContent-type: text/html; charset=iso-8859-1");
?>

Link to comment
Share on other sites

kléni

Ha a felhasználó által beküldött e-mail címre szeretnél levelet küldeni, elsőnek ellenőrizzük le, ha üres, vagy formailag nem szabályos, kapjon hibaüzenetet:

if (empty($email) or preg_match("/^[w-]+(.[w-]+)*@([w-]+.)+[a-zA-Z]{2,7}$/", $email))

Ha megfelelő, küldjük el a levelet, majd ha elment, írjuk be az adatbázisba az adatokat. Ha csak a fent látható szöveget szerenéd elküldeni tartalomként, nem fontos html formájú levelet küldeni:

mail($email, "Test", "Köszönjük, adatai bekerültek adatbázisunkba!", "From: Én Nevem <cim@email.hu>");

Ha azonban szeretnél formázásokat a levélben, kicsit többet kell beállítani:

$beallitas = "From: Én Nevem <cim@email.hu>\r\n";
$beallitas.= "MIME-Version: 1.0\n";
$beallitas.= "Content-Type: multipart/mixed; boundary=\"".md5(time())."\"\n";
$szoveg = "--".md5(time())."\n";
$szoveg .= "Content-Type: text/html; charset=utf-8\n";
$szoveg .= "Content-Transfer-Encoding: 8bit\n\n";
$szoveg .= "<html><body>Köszönjük!<br />Adatai <b>Sikeresen</b> bekerültek adatbázisunkba!</body></html>";
mail($email, "Test", $szoveg, $beallitas);

Ezzel a pár beállítással elérhetjük, hogy html-ként legyen elküldve, és ne érzékelje spam-nek a levelet.

Használd a "combined operator"-t a szövegek összefűzésére.

Végül így nézne ki a mail.php:

<?php
if (isset($_POST["kuldes"]))
{
    $email = $_POST["email"];
    if (empty($email) or preg_match("/^[w-]+(.[w-]+)*@([w-]+.)+[a-zA-Z]{2,7}$/", $email))
        $hiba = "Hibás e-mail cím!";
    else
    {
        $beallitas = "From: Én Nevem <cim@email.hu>\r\n";
        $beallitas.= "MIME-Version: 1.0\n";
        $beallitas.= "Content-Type: multipart/mixed; boundary=\"".md5(time())."\"\n";
        $szoveg = "--".md5(time())."\n";
        $szoveg .= "Content-Type: text/html; charset=utf-8\n";
        $szoveg .= "Content-Transfer-Encoding: 8bit\n\n";
        $szoveg .= "<html><body>Köszönjük!<br />Adatai <b>Sikeresen</b> bekerültek adatbázisunkba!</body></html>";
        if (!mail($email, "Test", $szoveg, $beallitas))
            $hiba = "Hiba az e-mail elküldése során!";
        else
        {
            mysql_query("...");
            header("Location: index.php");
        }
    }
}
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Teszt</title>
    </head>
    <body>
        <?php if (isset($hiba)) echo "<p>".$hiba."</p>" ?>
        <form action="mail.php" method="post">
            <p>Az e-mail címe:</p>
            <input type="email" name="email" /><br />
            <input type="submit" name="kuldes" value="Kiválaszt" />
        </form>
    </body>
</html>

Mint látható, a feldolgozás ugyan abban a fájlban van, ahol a fomr is, ez ugyanakkor nem baj, hiszen ha még nem kattintottunk az elküldés gombra (nem ismert a kuldes post), nem fut le a feldolgozás, ha pedig igen, hiba esetén ki tudjuk írni a hibát, majd elküldheti újra az adatokat, ha sikere minden, elirányítjuk onnan.

 

Ha még többet szeretnél, például csatolmányokat, vagy ékezetes címet (bár lenet ezt csak én nem tudtam még megoldani ügyesen :D) használhatsz előre elkészített rendszereket is, például a PHPMailer-t, viszont kis levelekhez felesleges ennyi sok funkcióval rendekező rendszer, a fenti példám is elég lesz.

 

A font html elem már évek óta elavult, használata tilos! Helyette css formázást használj. Ez igaz a többi, már évek óta nem használt tulajdonságokra, és a másik témában írt példádra is. Nézd végig a http://w3schools.com/ oldalon lévő tutorialokat.

Link to comment
Share on other sites

arpsoft

Csak egy apróság a fenti kódhoz: az md5(time())-ot inkább rakd le a legelején egy változóba, mert extrém esetben elõfordulhat, hogy a két hívás között éppen vált a time() értéke és akkor a levelezõ program nem fogja tudni értelmesen megjeleníteni a levelet.

Link to comment
Share on other sites

Kiskalóz
Valahogy így?

 

Hadd kérdezzem meg.. Miért nem próbálod ki? Szerintem senki nem fogja helyetted tesztelni.

 

Amúgy ez így nem jó :

mail ("$_GET[e_mail]", ... 

 

Találd ki miért nem.

Link to comment
Share on other sites

kléni

Attól függetlenül, hogy tényleg ne használjon ilyet, még tökéletesen lefut. :)

Link to comment
Share on other sites

  • 2 weeks later...
doctorwho

Sziasztok!

 

Ezt a hibát kapom:

 

SMTP Error: The following recipients failed: valaki@freemail.hu

A levél nem került elküldésre

A felmerült hiba: SMTP Error: The following recipients failed: valaki@freemail.hu

SMTP server error: relay not permitted

 

Belső hálózaton rendesen működik, a külső hálózatra viszont nem küldi ki a leveleket.

Link to comment
Share on other sites

[OP]Destroy-man

Valószínűleg nem jó az SMTP beállítás. Az SMTP-nek meg kell egyeznie a kimenő domain SMTP-jével.

Link to comment
Share on other sites

doctorwho

Köszi

Ezt a hibát kapom:

stream_socket_enable_crypto(): this stream does not support SSL/crypto in ...

Mit javítsak?

Link to comment
Share on other sites

doctorwho

Javítottam a hibát.

Már csak egy gondom van:

A levélben nem jelenik meg a kép:

$mail->Body = "<img src=kep.jpg>".$uzenet ;

 

Mit kell benne javítani?

 

Csatolmányban megérkezik, csak a levél szöveg részében nem jeleníti meg a képet.

Link to comment
Share on other sites

[OP]Destroy-man

Csatolmányként kell a képet mellékelni, és CID-ként kell rá hivatkozni, vagy külső serveren fixen tárolni a képet, és külső linkként kell azt meghívni.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...