27. oktober 2010 - 09:28 Der er 25 kommentarer og
1 løsning

Sende indkoebskurv med email.

Jeg er i gang med at udvikle en web application hvor brugere kan soege efter og vaelge varer og placere dem i en indkoebskurv.  De enkelte varer vises, paa soegesiderne og i indkoebskurven, som raekker i en tabel, og der vises et billed (thumbnail), beskrivelse, pris, og forskellige karakteristika.  Det er ikke en webshop med betaling (det ordnes mellem ejer og brugeren udenfor applikationen,) men det er et krav at indkoebskurven skal kunne sendes via email til ejeren og til brugeren.

Det ligger et godt stykke over mine nuvaerende php-evner.  Jeg har googlet og 'Ekspertet' og er nu i stand til at sende multipart emails med attachments.  Men videre?  Skal jeg konvertere indkoebskurven til et pdf dokument og saa sende det som attachment?  Hvis ja, hvordan konverterer jeg til pdf (googling ikke konklusiv)?  Hvis nej, i hvilken retning skal jeg gaa?  Skulle jeg maaske placere applikationen i et (open source) cms der har den funktion?  (Indtil nu bestaar applikationen af haandkodede php sider.)  Hvem kan give mig et skub i den rigtige retning?
Avatar billede repox Seniormester
27. oktober 2010 - 09:34 #1
Det nemme svar er at det er ejeren der bestemmer, hvad resultatet skal være. Hvis bolden er lagt over til dig som den der skal finde den bedst mulige løsning, så må det være den løsning du finder mest elegant for løsningens krav.

Umiddelbart kan du blot kopiere funktionaliteten i præsentationen i din indkøbskurv og derved lave samme opstilling i en MIME mail.
Avatar billede majbom Novice
27. oktober 2010 - 09:41 #2
som repox nævner, synes jeg også det lyder som om at din bedste (nemmeste) mulighed er, at bruge mere eller mindre samme kode, som der på siden viser kurven, til at generere listen som sendes i en html-mail - hvis billederne også skal med i mailen, skal du naturligvis sørge for at have den fulde adresse til billederne.

du kunne tage et kig på phpmailer
27. oktober 2010 - 10:12 #3
Tak for to hurtige indlaeg.  Jeg skal kikke paa dem (og de der maatte komme) i dagens loeb og komme tilbage.
Avatar billede Slettet bruger
27. oktober 2010 - 10:45 #4
Hvis det var op til mig (!) ville jeg nok lave mailen som "dum tekst".
- Selvfølgelig med et (prominent) link til browser-versionen (+ links til hver "vare").

Fordi det er lettere at "snakke videre" om (klippe/klistre) i mails frem og tilbage mellem brugeren og ejeren.
28. oktober 2010 - 08:18 #5
Undskyld ventetiden, jeg blev indfanget af andre ting.
#1, ja ejeren har bestemt hvad resultatet skal vaere og jeg skal nu  finde den bedst mulige loesning.  Derfor banker jeg paa her.
#2, jeg har set at jeg kan downloade phpmailer.  Nu ligger det saaledes at jeg bruger One.com som webhost og de vil (velsagtens) ikke placere phpmailer paa deres server.  Burde jeg kunne placere phpmailer paa min konto ved One.com og bruge den fra der?
#4, det med "dum tekst" skal nok vise sig at vaere det der bedst passer til mit nuvaerende php niveau.  Det er skrevet med et glimt i oejet, men aerligt: hvad betyder "dum tekst" og hvordan skal jeg implementere det?

#1 og #2 - hvordan kopierer jeg kode/functionalitet til emailen?  Koden er i php.  Jeg har proevet disse babysteps:

(1) I en af multipart delene i emailen denne kode:
 
$message .= "--{$mime_boundary}\n" .
        "Content-Type: 'text/html';\n" .
        "This is your <b>HTML</b> mail" . "\n\n" .
   
Den kommer godt igennem med html delen i hovedemailen og plaintextdelen (ikke vist her) som en attachment.

(2)  Saa putter jeg html koden i $code og aendrer emailen til

$message .= "--{$mime_boundary}\n" .
        "Content-Type: 'text/html';\n" .
        $code . "\n\n" .

Saa kommer mailen ogsaa igennem, men med et tomt attachment.

(3)  Ligeledes, hvis jeg proever at sende php kode saasom:

$message .= "--{$mime_boundary}\n" .
        "Content-Type: 'text/html';\n" .
        "<? echo 'This is your <b>HTML</b> mail ?>';" . "\n\n" .

faar jeg et tomt attachment.

Jeg konkluderer (maaske forhastet) at multipartmailen med content-type text/html ikke accepterer php kode og ikke accepterer en variabel. 

Som jeg mener at have demonstreret, jeg har virkelig brug for hjaelp (i form af hjaelp til selvhjaelp, skub i den rigtige retning som jeg kan foelge og maaske komme tilbage med yderligere spoergsmaal.)
Avatar billede majbom Novice
28. oktober 2010 - 09:42 #6
nu har jeg ikke læst hele dit indlæg (har lidt travlt), men phpmailer er et script - ikke noget der skal smides på serveren...
Avatar billede repox Seniormester
28. oktober 2010 - 10:00 #7
#5
Som #6 skriver, så er phpmailer en samling af objekter, skrevet i PHP, der hjælper dig med at sende MIME mails. Altså, du slipper for at skrive dine boundaries selv (se eksempel her: http://phpmailer.worxware.com/index.php?pg=examplebmail )
Det er for at undgå usikkerhederne i at ramme klienternes krav for at korrekt visning - phpmailer er trods alt temmelig gennemprøvet og har været under udvikling i flere år - med andre ord er der ingen grund til at genopfinde den dybe tallerken ;)

Ved at bruge phpmailer, skal du faktisk bare koncentrere dig om at formattere et simpelt html table, ligesom præsentationen i indkøbsvognen, og så løser resten sig selv:
<?php
    require_once("class.phpmailer.php");
    $mail = new PHPMailer();
   
    $body = $streng_med_din_table;
   
    $mail->AddReplyTo("info@example.com","Min Shop");
    $mail->SetFrom("info@example.com", "Min Shop");
   
    $mail->AddAddress("modtager@example.com, "John Doe");
   
    $mail->Subject = "Din ordrebekræftelse";
    $mail->AltBody = "For at se denne mail, skal din klient kunne vise HTML";
   
    $mail->MsgHTML($body);
   
    $mail->Send();
?>
29. oktober 2010 - 20:52 #8
En statusrapport:  Jeg satte mig for idag at downloade phpmail og eksperimentere med den og saa komme tilbage her med mine erfaringer.  Men saa langt kom jeg ikke.  Jeg haaber i morgen.
30. oktober 2010 - 16:03 #9
Nu har jeg downloaded phpmailer og kan bruge den til at sende php mail med attachments.  Saa naar foerst jeg har indkoebskurven i det noedvendige format saa kan jeg faa emailen afsted. 

Saa vidt jeg kan se hjaelper phpmailer ikke med jobs saasom at omdanne en indkoebskurv til en attachment.

Indlaeg #1 taler om "..blot kopiere functionaliteten i praesentationen i din indkoebskurv.."  $4 om "..lave mailen som 'dum tekst,' og #7 viser som et af elementerne i eksemplet $body=$streng_med_din_table;  Hvordan goer man rent konkret det?

Naar indkoebskurven er paa skaermen kan jeg sende den i sin helhed til printeren.  Hvis det ogsaa var muligt at 'printe' billedet af indkoebskurven til en fil som saa kan sendes som attachment saa ville det maaske vaere loesningen.

For at forklare yderligere:  Hver vare har et unikt varenummer.  Varenumrene paa varer puttet i indkoebskurven opbevares i en $_SESSION variabel.  Naar paginaen med indkoebskurven kaldes trigger det en MYSQL query:  "SELECT .. [otte felter] .. FROM .. [fem tabeller] .. WHERE Stock.id IN .. [session-variabelen]".  Resultatet bruges til at indsaette i en tabel.  Her et et billed af en indkoebskurv med tre varer: http://poststamp.dk/ScreenHunter.gif .
Avatar billede majbom Novice
30. oktober 2010 - 22:51 #10
du må have noget kode der genererer visningen af indkøbeskurven (altså noget php-kode der genererer noget HTML-kode) - denne kode kan du højst sandsynligt mere eller mindre bruge til at generere en html-mail, med samme indhold...
31. oktober 2010 - 05:25 #11
Koden til indkoebskurven har jeg sat her:

http://pastebin.com/LQeCxumd   

Som du kan se, for at danne indkoebskurven traekker koden paa anden kode (stylesheet, require()) og paa en session-variabel og faar detaljerne fra et database kald.  Nu er jeg meget uvidende, jeg har mindst to spoergsmaal: 

(1) Jeg ved at hvis man i emailens message indsaetter den rigtige MIM type og en simpel html kode saasom <html>Dette er din <b>HTML </b><i>tekst</i></html> saa bliver teksten presenteret korrekt.  Siger du at det ogsaa er tilfaeldet med php code?  Mine spaede forsoeg slog fejl, saasom <? echo "<html>Dette er din <b>HTML </b><i>tekst</i></html>"; ?>

(2) Hvordan faar jeg dynamisk fanget koden, inklusiv indholdet i session variabelen og resutatet fra database-kald, til en tekst jeg kan sende?  Er der en 'this' funktion eller lignende? 

Men et alternativ til at sende koden og lade mailfunktionen danne siden kunne jeg forestille en mulighed hvor jeg kopierer et billed af siden til en fil og saa sender denne fil som attachment.  Ligesom naar jeg trykker paa print knappen, saa kommer der et billed af siden ud paa papir.  Kan man maaske printe den faerdige indkoebskurv-side elektronisk til en fil?

Eller er det mig der er for fantasifuld og for uvidende?
Avatar billede majbom Novice
31. oktober 2010 - 19:50 #12
du skal jo ikke sende php-koden i din email, du skal køre php-koden der genererer html-koden.

og det er jo den kode du har smidt på pastebin, der opbygger en tabel, som viser indholdet af kurven - samme kode skal du blot bruge til at generere din mail...

[...]
$body .= din php-kode her
$mail->MsgHTML($body);
[...]
31. oktober 2010 - 21:52 #13
Det kikker jeg paa i morgen.
01. november 2010 - 18:55 #14
Ja, det er der jeg gaar fortabt.  Hvis jeg i $body putter ren html kode saa gaar det godt, i nedenstaaende eksempel1 faar jeg html tabellen i emailen plus to billeder som attachment.  Men hvis jeg putter den samme tabel i php kode faar jeg en tom email, stadig med de to billeder som attachment.

Har jeg misforstaaet dig?

Her er eksempel1 (som virker):
require_once('class.phpmailer.php');
$mail = new PHPMailer();
$body = "<html>
<head>
</head>
<body>
<table>
<tr>
<td>ABC</td>
<td>DEF</td>
</tr>
<tr>
<td>GHI</td>
<td>JKL</td>
</tr>
</table>
</body>
</html>
";
$mail->MsgHTML($body);
$mail->AddReplyTo("christian.jorgensen@skynet.be", "Christian Jorgensen");
$mail->SetFrom("christian.jorgensen@skynet.be", "Christian Jorgensen");
$address = "christian.jorgensen@skynet.be";
$mail->AddAddress($address, "Christian Jorgensen");
$mail->Subject = "PHPMailer Test Subject via mail(), basic";
$mail->Altbody = "To view the message, please use an HTML compatible email viewer!";
$mail->AddAttachment('pictures/picture3.jpg');
$mail->AddAttachment('pictures/picture4.jpg');
if(!$mail->Send())
{
  echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
  echo "Message sent!";
}
?>

og her er eksempel 2 (som ikke virker):
require_once('class.phpmailer.php');
$mail = new PHPMailer();
$body = "<html>
<head>
</head>
<body>
<?
echo '<table>';
echo '<tr>';
echo '<td>ABC</td>';
echo '<td>DEF</td>';
echo '</tr>';
echo '<tr>';
echo '<td>GHI</td>';
echo '<td>JKL</td>';
echo '</tr>';
echo '</table>';
?>
</body>
</html>
";
$mail->MsgHTML($body);
$mail->AddReplyTo("christian.jorgensen@skynet.be", "Christian Jorgensen");
$mail->SetFrom("christian.jorgensen@skynet.be", "Christian Jorgensen");
$address = "christian.jorgensen@skynet.be";
$mail->AddAddress($address, "Christian Jorgensen");
$mail->Subject = "PHPMailer Test Subject via mail(), basic";
$mail->Altbody = "To view the message, please use an HTML compatible email viewer!";
$mail->AddAttachment('pictures/picture3.jpg');
$mail->AddAttachment('pictures/picture4.jpg');
if(!$mail->Send())
{
  echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
  echo "Message sent!";
}
?>
Avatar billede majbom Novice
02. november 2010 - 20:00 #15
du skal ikke echo'e det, du skal tilføje det til $body som du gør i dit første eksempel (sjovt nok det der virker ;) )
04. november 2010 - 21:26 #16
Information for medlemmer andre end splazz.  Jeg saa en ny traad, http://www.eksperten.dk/spm/923105 , hvor problemet mindede om dette men ikke saa kompleks.  Den gav jeg mig i kast med som en oevelse til denne traad.  Ved hjaelp af ideer fra splazz, der ogsaa var aktiv i den traad (han synes at vaere aktiv over det hele for tiden) lykkedes det rent faktisk at faa lavet en email der sendte indholdet af en side. splazz's ideer i den traad svarer til de ideer han har presenteret ovenfor.

Og nu splazz:  Ved at bruge samme metode som i ovennaevnte traad fik jeg lavet en email der sender en version af indkoebskurven, men en version der ikke tager images med og som ikke respekterer css'en.  Paa siden bygger jeg en string op, $message=""; $message .= "<table><tr>"; $message .= "<td>Min tekst</td>"; o.s.v.  $message bruger jeg saa til to ting.  (1) jeg echoer $message, og derved faar jeg et synligt billed af hvad strengen skal producere.  (2)  Jeg indsaetter $message som emailens body.

Her er et billed af hvordan indkoebskurven skal se ud: http://poststamp.dk/ScreenHunter_03%20Nov.%2004%2020.59.gif og her er et billed af hvad jeg modtager i emailen: http://poststamp.dk/ScreenHunter_02%20Nov.%2004%2020.58.gif .  Sidens kode er her: http://pastebin.com/bPHfLtpW

Jeg takker for din taalmodighed indtil nu, og jeg proever at traekke den endnu et stykke (naar man giver draevlen en lillefinger....).  Hvad vil du raade mig til for at faa emailen til at respektere css'en og inkludere imagerne (hvoraf nogle er billeder, andre er ikoner)?
Avatar billede majbom Novice
04. november 2010 - 21:44 #17
grunden til at den ikke tager billederne med er at du bruger relative stier. når mailen lander i modtagerens indbakke, har klienten ingen anelse om hvor 'iconer/arrow.gif' er henne - du er nødt til at give den absolutte sti: http://dinside.be/images/iconer/arrow.gif' eller hvor de nu ligger.

ja, jeg har desværre ikke så meget at se til pt, så kan jeg jo lige så godt hjælpe herinde og lære lidt selv :)

(nogle der mangler en webudvikler? :D )
06. november 2010 - 14:18 #18
splazz, min undskyldning, jeg havde ikke set dit sidste indlaeg foer nu for en time siden.  Du sendte det straks efter jeg sendte mit, derfor troede jeg, naa jeg saa paa oversigten, at det sidste indlaeg var mit.

Du siger at jeg skal bruge absolutte i stedet for relative stier til mine images.  Ja, selvfoelgelig, hvorfor havde jeg ikke taenkt paa det.  Men at bruge absolutte stier er ikke tilstraekkelig.  Jeg har for eksempel et billed med denne absolutte sti: http://poststamp.dk/pictures/picture1.jpg . (Den kan jeg aabne i en browser, saa stien er korrekt.)  Jeg indsatte billedet i nedenstaaende testfile som jeg echoer til skaermen og indsaette i en email.  Paa skaermen faar jeg billedet vist korrekt, paa emailen faar jeg et lille roedt kryds.

splazz (eller andre) er det mig der alligevel kludrer i det eller skal der mere til end blot den absolutte sti for at faa et billed indsat i emailen?

Her er filen:

<?
require_once('class.phpmailer.php');
$mail = new PHPMailer();
$body = "<table>";
$body .= "<tr>";
$body .= "<td>ABC</td>";
$body .= "<td>DEF</td>";
$body .= "</tr>";
$body .= "<tr>";
$body .= "<td><img src='http://poststamp.dk/pictures/Animal10.jpg' height='100' /></td>";
$body .= "<td>JKL</td>";
$body .= "</tr>";
$body .= "</table>";
echo "$body <br/>";
//$mail->AddReplyTo("christian.jorgensen@skynet.be", "Christian Jorgensen");
$mail->SetFrom("abc@skynet.be", "def");
$mail->AddAddress("christian.jorgensen@skynet.be", "Christian Jorgensen");
$mail->Subject = "PHPMailer Test Subject via mail(), basic";
$mail->Altbody = "To view the message, please use an HTML compatible email viewer!";
$mail->MsgHTML($body);
$mail->AddAttachment('pictures/picture3.jpg');
$mail->AddAttachment('pictures/picture4.jpg');
if(!$mail->Send())
{
  echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
  echo "Message sent!";
}
?>
Avatar billede majbom Novice
06. november 2010 - 20:24 #19
det går nok :)

er det ikke bare fordi outlook beskytter mod billeder fra domæner du ikke har godkendt? det virker fint for mig, med din kode...
06. november 2010 - 20:41 #20
Det lyder godt at det virker hos dig med min kode.  Det vil vel saa sige at jeg skal godkende domainen http://poststamp.dk (eller hedder domainen kun poststamp.dk?)  Hvordan goer jeg det?  Men vil det ogsaa sige at brugerne hver for sig skal godkende det domaine?
Avatar billede majbom Novice
06. november 2010 - 21:09 #21
nu ved jeg ikke om det er outlook du bruger, men hos mig skal jeg tilføje afsenderen til en whitelist, eller vælge at vise billederne, medmindre afsender allerede er på den whitelist.

det sker hver gang jeg får en mail med billeder fra en afsender der ikke er på min whitelist...
06. november 2010 - 21:42 #22
Jo, jeg bruger outlook.  Men jeg faar ikke automatisk valg om at inkludere afsendere i en whitelist. 

Jeg gav mig til at kikke paa de forskellige indstillinger.  Nu ligger det saaledes at min Microsoft Office er hollandsksproget (det valgte jeg fordi jeg saa faar hollandsk stavekontrol og det har jeg tit brug for paa min bopael i Belgien), saa jeg roder noget rundt mellem hvad ting ting hedder paa hollandsk, engelsk, og dansk.  Men jeg fandt under tools et 'vertrouwenscentrum' (som jeg vil oversaette til sikkerhedscentrum) hvor jeg under 'Automatic downloading' hvor jeg finder et flueben i 'Billeder i emails ikke downloade automatisk' og derunder flueben i hvad jeg vil oversaette til: "Tillad downloads i emails naar afsender og modtager staar i den liste over sikre afsendere og sikre modtagere der bruges af filteret for uoensket mail."

Men jeg kan ikke finde saadan en liste over sikre afsendere og modtagere.  Ved du (eller andre) hvor jeg skal lede efter saadan en liste?  Eller skal jeg gribe det an paa en anden maade?
Avatar billede majbom Novice
07. november 2010 - 16:54 #23
det plejer at virke på den måde at der kommer en boks over mailen (i læseruden) hvor der står at der ikke er tillid til afsenderen og man skal klikke for at downloade billeder, eller eksternt indhold eller noget i den stil...
08. november 2010 - 06:42 #24
splazz.  Saa faldt tioeren.  Det var den laenge om.  Nu faar jeg billedet.  Tak for din taalmodighed. 

Saa er det vist paa tide at jeg faar lukket denne traad.  splazz, opretter du et svar?  repox og T4NK3R, ogsaa tak for interressen og bidragene.
Avatar billede majbom Novice
08. november 2010 - 08:57 #25
super! og selv tak :)
Avatar billede majbom Novice
08. november 2010 - 09:36 #26
tfp :)
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