Jump to content
GSForum - Segélyvonal

PHP mail küldés


Recommended Posts

Posted

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.

Posted

Sajnos nem sikerült.

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

Posted

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

Posted

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);
?>

Posted

Ó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.

Posted

Szia,

igen, engedélyezve van.

Posted

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?

Posted

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

Posted

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");
?>

Posted

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.

Posted

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.

Posted
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.

Posted

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

  • 2 weeks later...
Posted

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.

[OP]Destroy-man
Posted

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

Posted

Köszi

Ezt a hibát kapom:

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

Mit javítsak?

Posted

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.

[OP]Destroy-man
Posted

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.

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...