Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  4 772
Hei der...

Jeg har prøvd å søke en del, men har ikke funnet noe veldig fornuftig. Saken er enkelt og greit den at når jeg sender mail via Pear's Mail_Mime klasse (i php) så kødder æ ø og å seg på HTMLBody delen. De ser slik ut: æ, ø og Ã¥.

Alt script er UTF-8, men det ser ut til at html-delen blir forstått som ASCII (ut i fra utseende på de norske bokstavene slik de vises i Gmail). Teksten i TXTBody er som den skal være...

Spørsmålet blir da:
Hvordan går jeg frem for å sette HTMLBody til UTF-8 med Mail_Mime?

(og om du har peiling: bør jeg gjøre noe mht. håndteringen av norske tegn i e-post addresser/emner etc)

Kode

$body = $mail->get();
$headers = $mail->headers(array('Content-Type' => 'text/html; charset=UTF-8'), true);
Tror jeg. Det blir forresten oppfattet som ISO-8859-1, ikke ASCII. Hvis det ikke virker kan du og prøve å bytte å bytte ut ø med ø og slikt.
NaN
Dominic's Avatar
Trådstarter
Takker, det ser logisk ut så jeg satser på at det vil funke.
ø og etc. er liksom litt sitste utvei ^^

Bør jeg gjøre noe med Content-Transfer-Encoding btw, eller eller er default (quoted-printable) bra?
Så lenge ting blir encodet på riktig måte kan jeg ikke se at det skal spille noen rolle.
NaN
Dominic's Avatar
Trådstarter
Fant en løsning for eventuelle andre udrende:

Etter å ha googlet en del fant jeg ut at det går ann å endre charset direkte i klassen "Mail_mime" (linje 143 i versjon 1.7.0, fil mime.php):

Kode

    
        var $_build_params = array(
        // What encoding to use for the headers
        // Options: quoted-printable or base64
        'head_encoding' => 'quoted-printable',
        // What encoding to use for plain text
        // Options: 7bit, 8bit, base64, or quoted-printable
        'text_encoding' => 'quoted-printable',
        // What encoding to use for html
        // Options: 7bit, 8bit, base64, or quoted-printable
        'html_encoding' => 'quoted-printable',
        // The character set to use for html
        'html_charset'  => 'ISO-8859-1',
        // The character set to use for text
        'text_charset'  => 'ISO-8859-1',
        // The character set to use for headers
        'head_charset'  => 'ISO-8859-1',
        // End-of-line sequence
        'eol'           => "\r\n",
        // Delay attachment files IO until building the message
        'delay_file_io' => false
    );
Dette er derimot ikke til mye hjelp dersom en ikke har mulighet til å endre i PEAR filene (Viss PEAR biblioteket er delt på host-server etc...)

En bedre løsning blir derfor å bruke Mail_mimes setParam metode etter at en har oprettet objektet, omtrent slik:

Kode

include('{path}/Mail.php');
include('{path}/Mail/mime.php');

$html = '<h1>HTML-melding</h1>';
$text = 'Tekst';
$crlf = "\n";

$hdrs = array(
    'From'    => 'avsender@example.com',
    'Subject' => 'Emne',
    'Content-Transfer-Encoding' => 'quoted-printable',
    'Content-Type' => 'text/html; charset=UTF-8'
);

$mime = new Mail_mime($crlf);
// Følgende tre linjer setter charset til utf-8...
$mime->setParam('head_charset', 'UTF-8');
$mime->setParam('text_charset', 'UTF-8');
$mime->setParam('html_charset', 'UTF-8');

$mime->setHTMLBody($html);
$mime->setTXTBody($text);
$mime->addCc('kopi@example.com');

//do not ever try to call these lines in reverse order
$body = $mime->get();
$hdrs = $mime->headers($hdrs);

$mail =& Mail::factory('mail');
$stat = $mail->send('mottaker@example.com', $hdrs, $body);

if ($stat){
    //echo 'Mail ble sendt';
} else {
    //echo 'Mail ble ikke sendt';
}
Jeg vet ikke om det er nødvendig å sette header-tegnsett to ganger, men jeg bestemmte meg for at det var greit å være på den sikre siden.

Det går også ann å sette:
$mime->setParam('text/head/html_encoding', 'quoted_printable/base64');

Håper dette kan komme til nytte for noen