2011-10-06 2 views
11

Come posso inviare una mail formattato come "Name <[email protected]>" per:Come utilizzare caratteri speciali nel nome dei destinatari quando si utilizza la funzione di posta di PHP

ŠŒŽœžŸ¥µÀÁÃÄÅÆÇÉÊËÍÎÏÐÒÓÕÖØÙÜÝßàáâåæçèéëìíîïðñóôõöøùûýÿ <[email protected]> 

Ovviamente, molti di questi personaggi non potrà mai presentarsi in un nome, ma nel caso lo facessero, preferirei che non impedissero l'invio di un'email.

Attualmente, questo viene a mancare, come indicato nella error.log di Apache con

Ignorando non valido 'A:' indirizzo del destinatario '¥ μÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ ' Operazione interrotta: non destinatari specificati

Se possibile , Vorrei mantenere i caratteri speciali "così come sono". Altrimenti, posso usare una sorta di funzione di traslitterazione per pulire il nome?

Esempio di utilizzo:

<?php 
$to = "ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ <[email protected]>"; 
$subject = "Test Subject"; 
$body = "Test Body"; 
if (mail($to, $subject, $body)) { 
    echo("<p>Message successfully sent!</p>"); 
    } else { 
    echo("<p>Message delivery failed...</p>"); 
    } 
?> 

risposta

16

mb_encode_mimeheader dovrebbe farlo, proprio come mostrato nell'esempio:

mb_internal_encoding('UTF-8'); 

$name = '山本'; 
$email = '[email protected]'; 
$addr = mb_encode_mimeheader($name, 'UTF-8', 'Q') . " <$email>"; 

Per una migliore compatibilità è necessario impostare l'intestazione Mime-Version: 1.0 in modo che tutti i client di posta si capisce' usando la codifica MIME.

Le intestazioni dei messaggi finale dovrebbe essere simile a questo:

To: =?UTF-8?Q?=E5=B0=81=E3=83=90=E3=83=BC?= <[email protected]> 
Subject: =?UTF-8?Q?=E3=81=93=E3=82=93=E3=81=AB=E3=81=A1=E3=81=AF?= 
Mime-Version: 1.0 

rende come:

To: 山本 <[email protected]> 
Subject: こんにちは 

correlati: https://stackoverflow.com/a/13569317/476

+0

Forse anche aggiungere un puntatore a RFC2048 che definisce questo comportamento. Il MIME è essenziale se vuoi gestire la posta elettronica. – tripleee

+0

Grazie all'inganno, funziona perfettamente. @ triple Grazie per il riferimento RFC. Non mi ero reso conto che questo si applicava a tutte le parti di un'email. – Citricguy

+0

È anche possibile codificare caratteri speciali ** e ** spazi? (http://stackoverflow.com/questions/11963712/how-to-correctly-encode-strings-for-usage-in-mail-headers-in-php) Sfortunatamente 'mb_encode_mimeheader' non aiuta in questo caso. –

1

RFC-821 (2821) ci dice, che tutto e qualsiasi dati a 8 bit nel campo intestazioni deve essere codificato. Base64 o QuotedPrintable, come vuoi e puoi. La maggior parte dei lettori di e-mail decodifica automaticamente le stringhe codificate