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 :)
Skrevet man. d. 02. marts 2009 kl. 13:25:36| #1
prøv at kaste en utf8_encode() omkring $besked og se om det ændrer noget.
Skrevet man. d. 02. marts 2009 kl. 13:36:24| #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? :(
Skrevet man. d. 02. marts 2009 kl. 13:48:23| #3
$mail_body = qp_encode($besked, true);
og
saet
"Content-Transfer-Encoding: quoted-printable"
i header.
Skrevet man. d. 02. marts 2009 kl. 13:53:54| #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 :)
Skrevet man. d. 02. marts 2009 kl. 13:58:09| #5
arne_v mener quoted_printable_encode()
Men ellers har han ret :-)
Skrevet man. d. 02. marts 2009 kl. 13:59:04| #6
Nej.
Den her metode er til body ikke til subject.
Er det subject du vil have danske bogstaver i?
Skrevet man. d. 02. marts 2009 kl. 14:00:35| #7
Hvis du vil encode subject skal du bruge:
function header_encode($str) {
return '=?ISO-8859-1?Q?' . qp_encode($str) . '?=';
}
Skrevet man. d. 02. marts 2009 kl. 14:02:10| #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;
}
Skrevet man. d. 02. marts 2009 kl. 14:04:10| #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.
Skrevet man. d. 02. marts 2009 kl. 14:04:31| #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.
Skrevet man. d. 02. marts 2009 kl. 14:12:15| #11
Hvis baade subject og body skal klare danske bogstaver skal begge encodes.
Skrevet man. d. 02. marts 2009 kl. 14:12:56| #12
#10
Jeg copy paster bare fra noget tidligere kode.
Skrevet man. d. 02. marts 2009 kl. 14:55:40| #13
#12 hehehe... den kendte copy/paste fejl ;-)
Skrevet man. d. 02. marts 2009 kl. 15:02:56| #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 :)
Skrevet man. d. 02. marts 2009 kl. 15:03:41| #15
Siden ligge ri øvrigt på one.com der kører med PHP 5 :)
Skrevet man. d. 02. marts 2009 kl. 15:32:16| #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
Skrevet man. d. 02. marts 2009 kl. 15:36:43| #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;
}
Skrevet man. d. 02. marts 2009 kl. 16:29:50| #18
Skrevet man. d. 02. marts 2009 kl. 17:19:01| #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 :)
Skrevet man. d. 02. marts 2009 kl. 18:00:38| #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))
Skrevet man. d. 02. marts 2009 kl. 18:00:46| #21
Skrevet man. d. 02. marts 2009 kl. 18:06:25| #22
Takker mange gange.. Det prøver jeg :)
Skrevet ons. d. 04. marts 2009 kl. 16:15:17| #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 :)