20. juni 2005 - 20:14Der er
61 kommentarer og 1 løsning
Hjælp med phpmailer
Jeg vil gerne lave en funktion, som sender en nyhedsmail ud i både text og html format, når der er lagt en nyhed op i et system jeg har lavet.
Efter at have læst lidt her og der, faldt valget på phpmailer, men jeg kan ikke få den til at virke.
Det er i kodelinien if(!$mail->Send()), så fejler den, så jeg får fejlmeddelelsen jeg har skrevet.
Hvor er fejlen? Jeg har en ide, om det er smtp-opsætningen, for kræver det ikke noget specielt?
Bemærk, se bort fra diverse udkommenteringer, slam-kode og hvad der ellers er, for jeg er der ud, hvor jeg bare prøver et eller andet desperat for at få det til at virke.
$query = mysql_query("SELECT * FROM sport_nyhed ORDER BY `id` DESC LIMIT 0,1"); //$result = @MYSQL_QUERY($query);
while ($row = mysql_fetch_array ($query)) { // HTML body $body = "Hello <font size=\"4\">" . $row["overskrift"] . "</font>, <p>"; $body .= "<i>Your</i> personal photograph to this message.<p>"; $body .= "Sincerely, <br>"; $body .= "PHPMailer List manager";
// Plain text body (for mail clients that cannot read HTML) $text_body = "Hello " . $row["overskrift"] . ", \n\n"; $text_body .= "Your personal photograph to this message.\n\n"; $text_body .= "Sincerely, \n"; $text_body .= "PHPMailer List manager";
$mail->Subject = "Email fra mig "; //$mail->Body = "Hej hej, her er en email fra mig"; //$mail->AddAttachment("billedeafmig.jpg");
Der bliver investeret massivt i AI. Teknologien er mere tilgængelig end nogensinde, og ambitionerne er høje. Alligevel oplever mange virksomheder, at resultaterne udebliver.
Det kan jeg sige de ikke gør, for det var en linie jeg fandt et andet sted her på E!, og brugeren skrev i det spg. at det bare virkede, så jeg prøver da bare at udkommentere den, for jeg har slet ingen sprogfiler.
Det er de sgu da også, når dem ligger jeg lige op. Grunden til at jeg ikke havde gjort det, var at jeg læste et sted, at man kunne nøjes med de 2 "top" php filer. Hvis jeg ligger dem i samme bibliotek som det andet, så skulle det ikke give nogle problemer vel?
Det er nu også bare for at skjule den adresse jeg bruger i koden. Men det burde da ikek gøre nogle forskel, den skal da sendes ud af set hvad, at der så ikke er nogen modtager i den anden ende, er da en anden ting.
$query = mysql_query("SELECT * FROM sport_nyhed ORDER BY `id` DESC LIMIT 0,1");
while ($row = mysql_fetch_array ($query)) { // HTML body $body = "Hello <font size=\"4\">" . $row["overskrift"] . "</font>, <p>"; $body .= "<i>Your</i> personal photograph to this message.<p>"; $body .= "Sincerely, <br>"; $body .= "PHPMailer List manager";
// Plain text body (for mail clients that cannot read HTML) $text_body = "Hello " . $row["overskrift"] . ", \n\n"; $text_body .= "Your personal photograph to this message.\n\n"; $text_body .= "Sincerely, \n"; $text_body .= "PHPMailer List manager";
$query = mysql_query("SELECT * FROM sport_nyhed ORDER BY `id` DESC LIMIT 0,1");
while ($row = mysql_fetch_array ($query)) { $mail->AddAddress("lsskaarup@hipsomhap.dk");
$mail->Subject = "Email fra mig";
// HTML body $html_body = "Hello <font size=\"4\">" . $row["overskrift"] . "</font>, <p>"; $html_body .= "<i>Your</i> personal photograph to this message.<p>"; $html_body .= "Sincerely, <br>"; $html_body .= "PHPMailer List manager";
$mail->Body = $html_body;
// Plain text body (for mail clients that cannot read HTML) $text_body = "Hello " . $row["overskrift"] . ", \n\n"; $text_body .= "Your personal photograph to this message.\n\n"; $text_body .= "Sincerely, \n"; $text_body .= "PHPMailer List manager";
if (!$mail->Send()) { echo "There has been a mail error sending to fejl@hipsomhap.dk<br>"; echo "Mailer Error: " . $mail->ErrorInfo; }
// Clear all addresses and attachments for next loop $mail->ClearAddresses(); $mail->ClearAttachments(); }
Den største ændring i forhold til din oprindelige kode er at jeg bruger AddAtachment i stedet for AddStringAttachment. Denne bruges nemlig hvis man rent faktisk har sine attachment-data i en string i stedet for at have dem som en fil i filsystemet (f.eks. hvis de er gemt i databasen og hentes ud som en del af SELECT'en). Nu ved jeg ikke om du sidder på en Windows-maskine eller en Linux, og jeg ved heller ikke om du har gemt det afsluttende '/'- eller '\'-tegn i databasen, så du skal lige se lidt kritisk på mit forslag:
Undskyld, jeg har slet ikke haft tid til at kigge på det før nu. Men det virker stadig ikke.
Kan vi ikke tage det helt fra bunden af, ikke nødvendig vis ved hjælp af phpmailer. Det eneste krav er at det enten skal sendes tekst eller html mail. Hvis du da er med endnu, så kan du få koden jeg har indtil videre, og så kan vi forhåbentlig komme frem til en løsning, hvis du gider?
Nå, men den komplette kender jeg jo ikke. Den øverste mappen jeg har er public_html og så kommer diverse mapper der under. Jeg ved jo reelt ikke hvorden ligger på serveren, om det er C:, D: e.l.
/*@MYSQL_CONNECT("localhost","root","password"); @mysql_select_db("my_company");*/ $query = "SELECT * FROM sport_nyhed ORDER BY id DESC LIMIT 0,1"; $result = @MYSQL_QUERY($query);
while ($row = mysql_fetch_array ($result)) { // HTML body $body = "Hello <font size=\"4\">" . $row["overskrift"] . "</font>, <p>"; $body .= "<i>Your</i> personal photograph to this message.<p>"; $body .= "Sincerely, <br>"; $body .= "PHPMailer List manager";
// Plain text body (for mail clients that cannot read HTML) $text_body = "Hello " . $row["overskrift"] . ", \n\n"; $text_body .= "Your personal photograph to this message.\n\n"; $text_body .= "Sincerely, \n"; $text_body .= "PHPMailer List manager";
if(!$mail->Send()) echo "There has been a mail error sending to test@test.dk<br>";
// Clear all addresses and attachments for next loop $mail->ClearAddresses(); $mail->ClearAttachments(); }
Men den melder stadigvæk fejlen. Som du kan se har jeg prøvet helt at fjerne AddAttachment men det gjorde ingen forskel. Jeg kan simpelthen ikke se, hvad der går galt.
Jeg tror at vi taler forbi hinanden - lad os ikke hidse os op over det.
Første trin i at finde løsningen er at glemme alt om din egen kode og så bare se om du overhovedt kan få phpmailer til at sende en mail. Ikke engang noget med en attachment i første omgang.
Jeg kiggede class filerne igennem, at der bl.a. skulle skrives en sti til sendmail programmet, men den sti har jeg ikke. Så slog det mig, om jeg manglede noget der.
Ja, men host siger vel ikke noget om, hvor i filsystemet send mail programmet ligger. Det mærkelige er at der intet stå i dokumentationen om det skal ændres eller ej.
Ahh, problem måske løst. Jeg sad og kiggede efter hvilket installation min server kørte på, da jeg læste noget om mailscript, og at deres server kun tillod en bestemt host, og nu ser det ud til at virke.
Men blive lige hængede, det kan være jeg skal have hjælp til at sætte mailen ordentlig op.
Okay, det ser ud til at virke. Nu har jeg forsøgt med lidt simpel html og det virker næsten. Men hvordan jeg kan få billeder med som <img src="...">. Jeg forsøgte først med en reletive sti, snarere fordi jeg ikke lige huskede at ændre den. Resultat, billedet kom ikke med. Så prøvede jeg med den absolute sti, som virker i IE, men her kom billedet heller ikke med.
Hvad skal jeg gøre for at få et billede med i html mailen?
Det er ikke meningen. Meningen er faktisk at lave en nyhedsmail, opbygget i html, så den altså ligner en webside, for dem som valgt kun at se deres mails i tekst, så skal der også være det.
Så altså selve bodyen skal være opbygget som html, og det ser ud til at virke, bort set fra, at jeg ikke kan få den til at vise billeder.
Om billedet kommer med eller ej selvom du inkludere den komplette sti (og det skal være den komplette sti) afhænger udelukkende af email kilenten, og ikke af afsenderen. Nogle email klienter vil kunne se billedet mens andre ikke vil. Det er altså en størrelse som kan opsættes i mail klienten, men som default er det slået fra for at imødegå de såkaldte ”web bugs” som er en meget anvendt taktik blandt spammere.
Det du så ønsker at gøre i stedet kaldes for at indlejre billedet i e-mailen. På engelsk kaldes det at ”embed” og du vil få mange Google-hits ved f.eks. at søge på ”embed image mail”.
Desværre er det slet ikke simpelt at indlejre billeder i en email. For det første skal du i gang med at encode villedet sådan at det kommer på en eller anden form som egner sig til at blive sendt med email. Den mest anvendte er base64. Dernæst skal du til at arbejde med MIME-headere og det er heller ikke helt simpelt.
Jeg har fundet et eksempel på noget PHP kode som gør det (formentlig for et andet mail program end det du anvender), og som du kan set så er det bestemt ikke trivielt:
Na, byt jeg har fået det til at virke med billedet, jeg havde bare glemt at skrive http:// foran, dumme mig, men du må godt ligge et svar, så du kan få dine velfortjente point.
Ja, jeg ved godt, at det ikke er alle der kan se html-mails. Derfor vil jeg også have en text-mail især til dem som bevidst har fravalgt html. Det andet problem men at klienten ikke vil vise billeder i html, kender jeg selv fra Outlook 2003, men her er det meget let, at indstille den til, at hente billederne automatisk ved hver enkelt mailafsender. Så jeg vil sige, at jeg næsten er så godt dækket ind som muligt.
Synes godt om
Ny brugerNybegynder
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.