Avatar billede kongknabe Nybegynder
02. marts 2009 - 13:24 Der er 22 kommentarer og
1 løsning

Sende mail i PHP...

Hej.

Forsøger at afsende en mail igennem PHP men løber ind i det problem at Arkiv kodningen går i ged nogle gange og ikke viser æ, ø og å rigtigt.

Har forsøgt at løse problemet ved at putte en header med charset=utf-8 på, men det lader ikke til at virke.

Min kode ser ud som følger:

$Name = $email; //senders name
$recipient = $friend_email; //recipient
$mail_body = $besked; //mail body
$subject = $emne; //subject
$header = "From: ". $Name . " <" . $email . ">\r\n"; //optional headerfields
$header .= "Content-Type: text/plain; charset=utf-8\r\n";
   
mail($recipient, $subject, $mail_body, $header); //mail command :)
Avatar billede bitkid Nybegynder
02. marts 2009 - 13:25 #1
prøv at kaste en utf8_encode() omkring $besked og se om det ændrer noget.
Avatar billede kongknabe Nybegynder
02. marts 2009 - 13:36 #2
Nu har jeg desværre ikke lige selv mulighed for at teste da jeg sidder med en Mac, men når jeg tester på www.hotmail.com lader det bare til at gøre problemet endnu større? :(
Avatar billede arne_v Ekspert
02. marts 2009 - 13:48 #3
$mail_body = qp_encode($besked, true);

og

saet

"Content-Transfer-Encoding: quoted-printable"

i header.
Avatar billede kongknabe Nybegynder
02. marts 2009 - 13:53 #4
Altså, som følger?:

$Name = $email; //senders name
$recipient = $friend_email; //recipient
$mail_body = qp_encode($besked, true);//mail body
$subject = qp_encode("$name siger hejsa", true); //subject
$header = "From: ". $Name . " <" . $email . ">\r\n"; //optional headerfields
$header .= "Content-Transfer-Encoding: quoted-printable";
   
mail($recipient, $subject, $mail_body, $header); //mail command :)
Avatar billede bitkid Nybegynder
02. marts 2009 - 13:58 #5
arne_v mener quoted_printable_encode()

Men ellers har han ret :-)
Avatar billede arne_v Ekspert
02. marts 2009 - 13:59 #6
Nej.

Den her metode er til body ikke til subject.

Er det subject du vil have danske bogstaver i?
Avatar billede arne_v Ekspert
02. marts 2009 - 14:00 #7
Hvis du vil encode subject skal du bruge:

function header_encode($str) {
    return '=?ISO-8859-1?Q?' . qp_encode($str) . '?=';
}
Avatar billede arne_v Ekspert
02. marts 2009 - 14:02 #8
Hvis man er paa 5.3 saa quoted_printable_encode() ja.

Ellers:

function qp_encode($str, $wrap=true) {
    $res = '';
    for($i = 0; $i < strlen($str); $i++) {
        if(ord($str[$i]) < 128) {
            $res .= $str[$i];
        } else {
            $res .= sprintf('=%02X', ord($str[$i]));
        }
    }
    return ($wrap === true) ? wordwrap($res, 74, "=\n") : $res;
}
Avatar billede kongknabe Nybegynder
02. marts 2009 - 14:04 #9
Hmm.. Jeg vil bare sikre mig at alt ser ud som det skal uanset hvilken email klient man bruger.. Da der er tekst hvor æ, ø og å kan forekomme både i emne, og besked tænker jeg at begge dele skal encodes!?

Da jeg er nybegynder vil jeg sætte stor pris på hvis der er en af jer der vil vise hvordan jeg skal gøre det i forhold til den kodestump jeg postede ovenfor.. Kan ikke helt overskue det :)

Selve hjemmesiden er encoded i utf-8 derfor tænker jeg at det også er det jeg skal bruge når jeg sender mailen ud. - Beskeden bliver taget fra et textarea, og emnet er skrevet direkte ind i kodestumpen ovenfor.
Avatar billede bitkid Nybegynder
02. marts 2009 - 14:04 #10
ahh... du havde lige glemt at sende funktionen med :-)

Det er ikke en standard php function.
Jeg havde ikke lige lagt mærke til at quoted_printable_encode var en php 5.3 function.
Avatar billede arne_v Ekspert
02. marts 2009 - 14:12 #11
Hvis baade subject og body skal klare danske bogstaver skal begge encodes.
Avatar billede arne_v Ekspert
02. marts 2009 - 14:12 #12
#10

Jeg copy paster bare fra noget tidligere kode.
Avatar billede bitkid Nybegynder
02. marts 2009 - 14:55 #13
#12 hehehe... den kendte copy/paste fejl ;-)
Avatar billede kongknabe Nybegynder
02. marts 2009 - 15:02 #14
Der er ikke en af jer der kan hjælpe mig med at flette det ind i min kode herunder - kan ikke lige finde rundt i det :)


$Name = $email; //senders name
$recipient = $friend_email; //recipient
$mail_body = $besked; //mail body
$subject = "En lille hilsen fra $navn" ; //subject
$header = "From: ". $Name . " <" . $email . ">\r\n"; //optional headerfields
$header .= "Content-Type: text/plain; charset=utf-8\r\n";

mail($recipient, $subject, $mail_body, $header); //mail command :)
Avatar billede kongknabe Nybegynder
02. marts 2009 - 15:03 #15
Siden ligge ri øvrigt på one.com der kører med PHP 5 :)
Avatar billede arne_v Ekspert
02. marts 2009 - 15:32 #16
$Name = $email; //senders name
$recipient = $friend_email; //recipient
$mail_body = qp_encode($besked); //mail body
$subject = header_encode("En lille hilsen fra $navn") ; //subject
$header = "From: ". $Name . " <" . $email . ">\r\n"; //optional headerfields
$header .= "Content-Type: text/plain; charset=utf-8\r\n";
$header .= "Content-Transfer-Encoding: quoted-printable";

og saa de 2 funktioner som er ovenfor
Avatar billede kongknabe Nybegynder
02. marts 2009 - 15:36 #17
Altså følgende to funktioner:

function header_encode($str) {
    return '=?ISO-8859-1?Q?' . qp_encode($str) . '?=';
}

og

function qp_encode($str, $wrap=true) {
    $res = '';
    for($i = 0; $i < strlen($str); $i++) {
        if(ord($str[$i]) < 128) {
            $res .= $str[$i];
        } else {
            $res .= sprintf('=%02X', ord($str[$i]));
        }
    }
    return ($wrap === true) ? wordwrap($res, 74, "=\n") : $res;
}
Avatar billede arne_v Ekspert
02. marts 2009 - 16:29 #18
Jep.
Avatar billede kongknabe Nybegynder
02. marts 2009 - 17:19 #19
Takker! :d

Men bør ISO-8859-1 så ikke erstattes med utf-8 i den første funktion?

arne_v - Smid et svar for point :)
Avatar billede arne_v Ekspert
02. marts 2009 - 18:00 #20
argh

min qp_encode er ISO-8859-1 orienteret (eller ihvertfald enkelt byte charset orienteret)

prøv og brug UTF-8 men erstat qp_encode(x) med qp_encode(utf8_encode(x))
Avatar billede arne_v Ekspert
02. marts 2009 - 18:00 #21
og et svar
Avatar billede kongknabe Nybegynder
02. marts 2009 - 18:06 #22
Takker mange gange.. Det prøver jeg :)
Avatar billede kongknabe Nybegynder
04. marts 2009 - 16:15 #23
Nu fik jeg lige prøvet det af og det virkede ikke helt, men fandt ud af at udskifte din linje:

return '=?ISO-8859-1?Q?' . qp_encode($str) . '?=';

med:

return '=?UTF-8?B?' . base64_encode($str) . '?=\n';

Og nu virker det :)
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