Avatar billede Peto Praktikant
13. januar 2017 - 15:04 Der er 13 kommentarer

Mailscript og danske tegn

Hej
Jeg har lige opdaget at email som sendes ud fra min formular med nedenstående php-mailscript ser forkert ud m.h.t. danske æøå. Det er dog kun på mobiltelefoner det vises forkert. Grunden til at jeg ikke har opdaget det før, er at det ser rigtig ud på en PC.

Kan nogen her på "Eksperten" foreslå ændringer til det bestående script, således at problemet løses på mobiltelefoner.

<?php
$afsendermail = "xxxxx@xxxxx.com";
$mail = "xxxxxt@xxxxx.dk";
$viderestil = "svar.htm";

/* Her hentes oplysningerne fra de udfyldte felter */
$Kontakt = $_REQUEST['Kontakt'] ;
$email = $_REQUEST['E-mail'] ;
$kopi = $_REQUEST['kopi'];
$Til = $_REQUEST['Til'] ;
$Dag = $_REQUEST['Dag'] ;
$Dat = $_REQUEST['Dat'] ;
$Mdr = $_REQUEST['Mdr'] ;
$klokken = $_REQUEST['klokken'] ;
$Boadressen = $_REQUEST['Boadressen'] ;
$Postnummer = $_REQUEST['Postnummer'] ;
$Besked = $_REQUEST['Besked'] ;
$Aar = $_REQUEST['Aar'] ;
$Telefon = $_REQUEST['Telefon'] ;
$computer = $_REQUEST['computer'] ;
$Omtale = $_REQUEST['Omtale'] ;

$emne="Forespørgsel vedr. $Dag d. $Dat $Mdr $Aar";

$headers="From: $Kontakt <$email>\r\n";

/* Her indsttes din mailadresse, så afsenderen kan svare på kopimailen */
$formularheaders="From: $hjemmeside <$afsendermail>\r\n";

/* Her samles afsenderens navn, mailadresse og besked i en enkelt variabel */
$oplysninger="Forespørgsel vedr. $Til\r
$Dag d. $Dat $Mdr $Aar, kl. $klokken
\r
Boadressen: $Boadressen
Postnummer: $Postnummer
\r
Kontakt: $Kontakt
E- mail: $email
Telefon: $Telefon
\r
Besked: $Besked
\r
Omtale: $Omtale
\r
Computer: $computer
";

/* Her samles oplysningerne til afsenderens kopi af mailen */
$kopimail="Til $Kontakt
\r
Du har lavet en forespørgsel vedr.
$Dag d. $Dat $Mdr $Aar, kl. $klokken
\r
Boadressen: $Boadressen
Postnummer: $Postnummer
\r
E- mail: $email
Telefon: $Telefon
\r
Besked: $Besked
\r
Omtale: $Omtale
\r
Vi sender en mail, senere i dag.
\r
venlig hilsen
xxxxx
";

  /* Her sendes til modtageradressen */
  mail($mail, $emne, $oplysninger, $headers);

  /* Her sendes en kopimail til afsenderen */
  mail($email, $emne, $kopimail, $formularheaders);

/* Når mailen er sendt, viderestilles til denne hjemmeside */
header("Location: $viderestil");
?>

hilsen Peto
Avatar billede arne_v Ekspert
13. januar 2017 - 15:24 #1
Hvor er MIME headers og QP (eller B64) encoding?
Avatar billede Peto Praktikant
13. januar 2017 - 15:47 #2
Hej arne_v

De ting du nævner har jeg aldrig hørt om før.
Scriptet som fungerer upåklageligt sammen med min formular, er lavet ved venners hjælp for 5 år siden, uden min "indblanding"

Kan du hjælpe mig med at løse problemet med de danske tegn.
Jeg kan næsten høre på dig at det er temmelig "langhåret". Jeg er fuldstændig ukyndig m.h.t. php

hilsen Peto
Avatar billede arne_v Ekspert
13. januar 2017 - 16:09 #3
Avatar billede Peto Praktikant
13. januar 2017 - 16:29 #4
Hej arne_v

Jeg mangler at der er 3 elementer i alt: Formularen + Script + Svar

Formular oplysningerne sender til php-scriptet og afslutter med svar.htm

Dette her står øverst i formularen:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

hilsen Peto
Avatar billede Peto Praktikant
13. januar 2017 - 17:42 #5
Hej arne_v

Jeg har kigget eksemplerne igennem som du har linket til,
Det er svært for mig at forstå og gennemskue. Man skal vist være programør uddannet for at forstå php.

Jeg har prøvet at finde det som jeg umiddelbart ser ud til mangle.
Er det her det du omtaler ? MIME headers og QP (eller B64) encoding?
Skal det sættes ind aller øverst, inden det script eller skal det indlagres i det bestående ?

<?php
// http://www.computerworld.dk/eksperten/spm/961816?k=7937170
function escapeAddr($addr) {
    $check = preg_match('/(.*)<(.*)>/', $addr, $a);
    if ($check) $addr = '=?UTF-8?B?'.base64_encode($a[1]).'?= <'.$a[2].'>';
    return $addr;
}
// http://www.computerworld.dk/eksperten/spm/961816?k=7937170
function mail_utf8($to, $subject='Intet emne', $message='', $from='', $cc='', $bcc='', $type='plain') {
    $from = escapeAddr($from);
    $header = 'From: '.$from.PHP_EOL
            . 'Return-Path: '.$from.PHP_EOL
            . 'Reply-To: '.$from.PHP_EOL
            . 'MIME-Version: 1.0'.PHP_EOL
            . 'Content-type: text/'.$type.'; charset=UTF-8'.PHP_EOL
            . 'X-Mailer: PHP/'.phpversion().PHP_EOL
            . 'Content-Transfer-Encoding: 8bit'.PHP_EOL;
    if ($cc!='') $header .= 'Cc: '.escapeAddr($cc).PHP_EOL;
    if ($bcc!='') $header .= 'Bcc: '.escapeAddr($bcc).PHP_EOL;
    $header .= PHP_EOL;
    return mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header);
}
?>
Avatar billede Peto Praktikant
13. januar 2017 - 18:04 #6
<?php
// http://www.computerworld.dk/eksperten/spm/961816?k=7937170
function escapeAddr($addr) {
    $check = preg_match('/(.*)<(.*)>/', $addr, $a);
    if ($check) $addr = '=?UTF-8?B?'.base64_encode($a[1]).'?= <'.$a[2].'>';
    return $addr;
}
// http://www.computerworld.dk/eksperten/spm/961816?k=7937170
function mail_utf8($to, $subject='Intet emne', $message='', $from='', $cc='', $bcc='', $type='plain') {
    $from = escapeAddr($from);
    $header = 'From: '.$from.PHP_EOL
            . 'Return-Path: '.$from.PHP_EOL
            . 'Reply-To: '.$from.PHP_EOL
            . 'MIME-Version: 1.0'.PHP_EOL
            . 'Content-type: text/'.$type.'; charset=UTF-8'.PHP_EOL
            . 'X-Mailer: PHP/'.phpversion().PHP_EOL
            . 'Content-Transfer-Encoding: 8bit'.PHP_EOL;
    if ($cc!='') $header .= 'Cc: '.escapeAddr($cc).PHP_EOL;
    if ($bcc!='') $header .= 'Bcc: '.escapeAddr($bcc).PHP_EOL;
    $header .= PHP_EOL;
    return mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header);
}
?>

<?php
$afsendermail = "xxxxx@xxxxx.com";
$mail = "xxxxxt@xxxxx.dk";
$viderestil = "svar.htm";

/* Her hentes oplysningerne fra de udfyldte felter */
$Kontakt = $_REQUEST['Kontakt'] ;
$email = $_REQUEST['E-mail'] ;
$kopi = $_REQUEST['kopi'];
$Til = $_REQUEST['Til'] ;
$Dag = $_REQUEST['Dag'] ;
$Dat = $_REQUEST['Dat'] ;
$Mdr = $_REQUEST['Mdr'] ;
$klokken = $_REQUEST['klokken'] ;
$Boadressen = $_REQUEST['Boadressen'] ;
$Postnummer = $_REQUEST['Postnummer'] ;
$Besked = $_REQUEST['Besked'] ;
$Aar = $_REQUEST['Aar'] ;
$Telefon = $_REQUEST['Telefon'] ;
$computer = $_REQUEST['computer'] ;
$Omtale = $_REQUEST['Omtale'] ;

$emne="Forespørgsel vedr. $Dag d. $Dat $Mdr $Aar";

$headers="From: $Kontakt <$email>\r\n";

/* Her indsttes din mailadresse, så afsenderen kan svare på kopimailen */
$formularheaders="From: $hjemmeside <$afsendermail>\r\n";

/* Her samles afsenderens navn, mailadresse og besked i en enkelt variabel */
$oplysninger="Forespørgsel vedr. $Til\r
$Dag d. $Dat $Mdr $Aar, kl. $klokken
\r
Boadressen: $Boadressen
Postnummer: $Postnummer
\r
Kontakt: $Kontakt
E- mail: $email
Telefon: $Telefon
\r
Besked: $Besked
\r
Omtale: $Omtale
\r
Computer: $computer
";

/* Her samles oplysningerne til afsenderens kopi af mailen */
$kopimail="Til $Kontakt
\r
Du har lavet en forespørgsel vedr.
$Dag d. $Dat $Mdr $Aar, kl. $klokken
\r
Boadressen: $Boadressen
Postnummer: $Postnummer
\r
E- mail: $email
Telefon: $Telefon
\r
Besked: $Besked
\r
Omtale: $Omtale
\r
Vi sender en mail, senere i dag.
\r
venlig hilsen
xxxxx
?>
Avatar billede showsource Seniormester
14. januar 2017 - 08:36 #7
Du kan også prøve at bruge phpmailer:
https://github.com/PHPMailer/PHPMailer

Evt. videoer "how to":
https://www.youtube.com/watch?v=fcLXsxpk2dc
Avatar billede ErikHg Ekspert
19. januar 2017 - 15:51 #8
Jeg har flere gange været ude for at en mail jeg ville printe ud, pludselig indeholdt nogle forkerte tegn, på de steder hvor bogstaverne æ,ø og å skulle være.
Når jeg trykkede på "vis udskrift" var det den var gal. Jeg har aldrig fundet årsagen til dette, og det er efterhånden længe siden det senest skete.
Mailprogrammet er Windows Live, og OS er Windows 7 64 bit Ultimate.
Avatar billede Zochko Juniormester
28. januar 2017 - 21:54 #9
Hej Peto :)

Prøv evt. at sætte charset utf-8 på din mail header variable:
$formularheaders="From: $hjemmeside <$afsendermail>\r\n; charset=UTF-8";

Bemærk det kan være nødvendig at tilføje noget til subject hvis du også har problemet der:

Nogen har skrevet det bedre end mig :)
https://ncona.com/2011/06/using-utf-8-characters-on-an-e-mail-subject/
Avatar billede Peto Praktikant
28. januar 2017 - 22:32 #10
Hej Zockho
Som nybegyndere kender jeg ikke betydningen af subject. Er det det samme som selve mail-indholdet ? Så ja !!! Problemet findes både i mailens overskrift (header) samt i mail-indholdet.
Kan du evt. lave en yderligere tilføjelse til ovennævnte således at æ, ø og å også vises rigtigt i mailteksten. På forhånd. Tak !
hilsen Peto
Avatar billede Zochko Juniormester
28. januar 2017 - 22:49 #11
Okay lad os starte med den jeg nævnte først prøv at skifte:
$formularheaders="From: $hjemmeside <$afsendermail>\r\n";
Og
$headers="From: $Kontakt <$email>\r\n";

Ud med:
$formularheaders='From: $hjemmeside <$afsendermail>' . "\r\n" . 'Content-Type: text/plain; charset=utf-8'."\r\n";
Og
$headers="From: $Kontakt <$email>' . "\r\n" . 'Content-Type: text/plain; charset=utf-8'."\r\n";

Og så

/* Her sendes til modtageradressen */
  mail($mail, $emne, $oplysninger, $headers);

  /* Her sendes en kopimail til afsenderen */
  mail($email, $emne, $kopimail, $formularheaders);

Ud med:

/* Her sendes til modtageradressen */
  mail($mail,'=?UTF-8?B?'.base64_encode($emne).'?=', $oplysninger, $headers);

  /* Her sendes en kopimail til afsenderen */
  mail($email, '=?UTF-8?B?'.base64_encode($emne).'?=', $kopimail, $formularheaders);

Hvad sker der så ? :)
Avatar billede Peto Praktikant
31. januar 2017 - 22:56 #12
Hej Zochko

Jeg får denne fejlmeddelse.

Parse error: syntax error, unexpected '"\r\n"' (T_CONSTANT_ENCAPSED_STRING) in /var/www/xxxxx.dk/xxxxx.dk/o1.php on line 28

hilsen Peter
Avatar billede Zochko Juniormester
13. juni 2017 - 20:07 #13
Det er pinligt Peto... Jeg har glemt dig, men det havde du nok regnet ud.

Brug denne:
$formularheaders='From:' . $hjemmeside . '<' . $afsendermail . '>' .  "\r\n" . 'Content-Type: text/plain; charset=utf-8'."\r\n";

Og

$headers='From:' . $Kontakt . '<' . $email . '>' . "\r\n" . 'Content-Type: text/plain; charset=utf-8'."\r\n";

De 2 sidste ser fine ud :)

Jeg beklager.
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

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