Avatar billede m-rachlitz Nybegynder
22. marts 2008 - 21:22 Der er 14 kommentarer og
1 løsning

Hjælp til mail af sessions

Hej allesammen,

Jeg har kigget rundt på diverse tråde med henblik på alt phpmail() / mail() scripts. Men jeg må erkende jeg ærligt ikke forstår hvordan jeg skal bruge det.

Min situation er således, at jeg har en række sessions som jeg ønsker at skulle kunne afsendes til min egen email når man trykker send på siden.

Sessions er som følge:

$_SESSION["navn"]
$_SESSION["vej"]
$_SESSION["by"]
$_SESSION["telefon"]
$_SESSION["email"]
$_SESSION["fradato"]
$_SESSION["tildato"]

også har jeg en række sessions/variabler/arrays som en ven hjalp mig sætte op tidligere som også skal med, hvordan jeg lige nævner dem bedst ved jeg ikke - så derfor vil jeg lige kopiere et stykke at mit script.

----------------------------------------------------

<?php
                    if (isset($_SESSION["shop"])) {
                        foreach ($_SESSION["shop"] AS $item){
                            if ($item["antal"] > 0) {
                                ?>
                                <tr>
                                    <td class="space"></td>
                                    <td class="produkt"><?php echo varenavn($item['id']); ?></td>
                                    <td class="type"><?php echo varetype($item['id']); ?></td>
                                    <td class="pris"><?php echo varepris($item['id']); ?></td>
                                    <td class="tekst"><?php echo antal_af_varen($item["id"]); ?></td>
                                    <td class="pris" align="right"><?php echo vareprisialt($item['id']); ?></td>
                                </tr>
                                <?php
                            }
                        }
                    }
                    ?>
                    <tr>
                        <td height="17" colspan="6"></td>
                    </tr>
                    <tr>
                        <td colspan="6" class="total" align="right"><b>Total: <?php echo vareprisikurv(); ?> DKK</b></td>
                    </tr>

---------------------------------------------------

Dette er alt den info jeg vil sende i emailen, det er et forespørgsels script til udlejning af Service så som bestik osv.

Hvis det kan lade sig gøre at jeg kan "designe" selve mailen med tables vil jeg føle mig i himlen. Men jeg er på herrens mark, og da dette er det aller sidste jeg mangler jeg mangler på hele min side, håber jeg at der er en venlig sjæl der vil forbarme sig over mig og hjælpe mig, igen. :-)

Sådan som jeg ønsker det sku være er - at jeg har min print.php side, som egentlig fungerer som en slags bekræftigelses side, hvorfra man også kan printe hele forespørgslen ud. Men altså der er en knap "Send!" som skal trigger det script der sender de omtalte variables/sessions/arrays.

Alle sessions er udfyldt på nuværende tidspunkt, de skal bare sendes. Men jeg begriber ikke hvordan det virker.

Efter som mit spørgsmål omfatter en del arbejde og tid - og efter min mening har en hvis sværhedsgrad så vil jeg gerne give lidt ekstra points for dem som nu kan hjælpe :-)
Avatar billede coderdk Praktikant
23. marts 2008 - 00:48 #1
Download http://www.swiftmailer.org/download/

Extract arkivet, upload "lib"-folderen til roden af dit webdir.

Jeg antager at du bruger PHP5, og at det script der sender mailen skal være i roden af webdir'et. Du bør også erstatte DIG@DIN_EMAIL.DK med en mail der har lov at sende fra serveren.

<?php

    require_once( "lib/Swift.php" );
    require_once( "lib/Swift/Connection/Sendmail.php" );

    if ( isset( $_SESSION["shop"] ) )
    {
        $swift = new Swift( new Swift_Connection_Sendmail( Swift_Connection_Sendmail::AUTO_DETECT ) );
   
        $body = "<html><head><title>Email</title></head><body>";
        $body .= "<h1>Hej $_SESSION[navn],</h1><p>Her er din bestilling:</p>";
        $body .= "<table>";
   
        foreach ( $_SESSION["shop"] AS $item )
        {
            if ( $item["antal"] > 0 )
            {
                $body .= '
                <tr>
                    <td class="space"></td>
                    <td class="produkt">' . varenavn($item['id']) . '</td>
                    <td class="type">' . varetype($item['id']) . '</td>
                    <td class="pris">' . varepris($item['id']) . '</td>
                    <td class="tekst">' . antal_af_varen($item["id"]) . '</td>
                    <td class="pris" align="right">' . vareprisialt($item['id']) .'</td>
                </tr>
                ';
            }
        }
        $body .= '
                <tr>
                    <td height="17" colspan="6"></td>
                </tr>
                <tr>
                    <td colspan="6" class="total" align="right"><b>Total: ' . vareprisikurv() . ' DKK</b></td>
                </tr>
            </table>
            </body>
            </html>
            ';
           
        $subject = "Bestilling";
        $message = new Swift_Message( $subject, $body, "text/html" );
        if ( $swift->send( $message, $_SESSION['email'], "DIG@DIN_EMAIL.DK" ) )
        {
            echo "Der er afsendt en email";
        }
        else
        {
            echo "Kunne ikke sende email";
        }
    }
    else
    {
        echo "Ikke noget at sende.";
    }
   
?>

Det er ikke sikkert at du kan bruge Sendmail-metoden, hvis din ISP/host har en SMTP-server som du skal bruge, kan du erstatte linjerne:

require_once( "lib/Swift/Connection/Sendmail.php" );

og

$swift = new Swift( new Swift_Connection_Sendmail( Swift_Connection_Sendmail::AUTO_DETECT ) );

med hhv

require_once( "lib/Swift/Connection/SMTP.php" );

og

$swift = new Swift( new Swift_Connection_SMTP( "smtp-server.din-isp.dk", 25 ) );

:)
Avatar billede coderdk Praktikant
23. marts 2008 - 00:49 #2
Ah, hvis du bruger SMTP-metoden til sidst, bør du efter $swift->send()-kaldet give et kald til:

$swift->disconnect();

:)
Avatar billede m-rachlitz Nybegynder
23. marts 2008 - 13:24 #3
Godmorgen Coderdk :-)

Jeg faldt lige i søvn igår.

Jeg har prøvet at indsætte scriptet og downloaded swiftmailer.

Når jeg trykker på min print knap som kalder det ovenstående script du har skrevet (som jeg har kaldet sendmail.php) så får jeg tilbage meldningen "Ikke noget at sende."

Når jeg får den besked går jeg ud fra if (isset($_SESSION["shop"]) står som tom, hvilket jeg ikke kan forstå.

Tror måske også jeg har formuleret det lidt forkert, det er meningen at scriptet skal sende mailen til mit udlejningsservice, altså min egen mail hver gang - med "Kundens" data og forespørgsel :-)

Jeg tænkte på om det ikke kunne være lettere at hjælpe over msn hvis du har det? Så kunne du eventuel tilføje eid@kss-andst.dk hvis du har tid til at hjælpe mig :)

Mvh Michael
Avatar billede m-rachlitz Nybegynder
23. marts 2008 - 13:32 #4
Folders:

VSU - denne mappe er selve roden til hele siden, her i ligger min index.php
/admin
/css
/db
/images
/php
- /functions
- /shop
- - /css
- - /db
- - /functions
- - - /lib
- - - sendmail.php (det ovenstående script som du skrev)
- - /images
- /system

Der hvor vi arbejder lige nu er i php/shop i den mappe har jeg følgende filer.

index.php - siden indeholder prislisten og det er her du vælge de produkter du ønsker
kurv.php - kurven hvor du kan se hvad du har valgt og ændre antal
forespoergsel.php - her kan du ikke længere ændre i din kurv, men du skal indtaste navn,email,vej,by,lejeperiode osv.
print.php - er siden som jeg gerne ville kunne sende med mail, det er her jeg har min <a href="functions/sendmail.php"><img src="images/knap_naeste.jpg" border="0"></a>

Håber det her kan hjælpe lidt :-)
Avatar billede coderdk Praktikant
23. marts 2008 - 17:55 #5
Du skal sikkert også have en session_start() og hente dine funktioner ;)
Avatar billede m-rachlitz Nybegynder
23. marts 2008 - 18:04 #6
når jeg tilføjer session_start(); i starten af scriptet crasher det hele og den melder ikke fejl, til gengæld tager siden virkelig lang tid om at load
Avatar billede m-rachlitz Nybegynder
23. marts 2008 - 18:09 #7
altså:

    session_start();
    include('../db/db.php');
    require("../functions.php");
    require_once( "lib/Swift.php" );
    require_once( "lib/Swift/Connection/SMTP.php" );
Avatar billede coderdk Praktikant
23. marts 2008 - 18:57 #8
Det lyder som om at den laver timeout - måske skal du bruge SMTP-metoden?
Avatar billede m-rachlitz Nybegynder
23. marts 2008 - 19:07 #9
det er den jeg bruger - altså ikke den auto detect, men den hvor jeg selv angiver min smtp - som i dette tilfælde må være one.com's eftersom det er der mit webhotel ligger ikke?

customer-smtp.one.com
Avatar billede m-rachlitz Nybegynder
23. marts 2008 - 19:48 #10
Forresten - hvis jeg benytter denne linje så viser den fejl ved ")" efter AUTO_DETECT. Bruger zend studio, og den sætter røde bølge streger under, men synes ikke jeg kan se hvad fejlen burde være, men det er som sagt heller ikke den jeg bruger.

$swift = new Swift( new Swift_Connection_Sendmail( Swift_Connection_Sendmail::AUTO_DETECT ) );

Den jeg bruger er:
require_once( "lib/Swift/Connection/SMTP.php" );
$swift = new Swift( new Swift_Connection_SMTP( "customer-smtp.one.com", 25 ) );
$swift->disconnect();
Avatar billede coderdk Praktikant
23. marts 2008 - 20:49 #11
customer-smtp.one.com skal du bruge hvis du sender mail fra f.eks. outlook. For at sende fra deres webservere skal du bruge mailout.one.com jf. http://www.one.com/da/support/faq/kan-jeg-sende-mails-fra-min-webside
Avatar billede m-rachlitz Nybegynder
23. marts 2008 - 23:42 #12
Hvor er det klasse - det virker perfekt coderdk. :-)

Smider du et svar så får du lige dine velfortjente points.

Igen, tusind tak for din hjælp, har været kanon.

MVH Michael
Avatar billede m-rachlitz Nybegynder
23. marts 2008 - 23:55 #13
lige et enkelt spørgsmål mere - hvis jeg vil bruge samme css koder til min email som i min shop hvordan gør jeg så ?

har prøvet med følgende:
        $body = '<html><head><title>Email</title><link rel="stylesheet" type="text/css" href="http://www.Mit-Domain.dk/vsu/php/shop/css/css.css"></head><body>';

for at hente css, men det hjælper ikke (har husket og sætte class's på mine tables)
Avatar billede m-rachlitz Nybegynder
24. marts 2008 - 00:32 #14
Har løst det med ccs. har brugt <style> indsat i headeren på det jeg poster :-)

Smid svar - checker løbende i morgen . endnu engang tak =)
Avatar billede coderdk Praktikant
24. marts 2008 - 00:43 #15
ok :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester