2015-07-05 29 views
13

io mando una e-mail utilizzando i pacchetti di posta e mail_mime di pera e codice di esempio, come di seguito:dot s mancano qua e là nel codice HTML durante l'invio di messaggi di posta elettronica PEAR Mail_Mime

$sendStart=array(); 
require_once('Mail.php'); 
require_once('Mail/mime.php'); 

$sendStart['mail'] =& Mail::factory('mail'); 
$sendStart['mime'] = new Mail_mime("\n"); 

$sendStart['mime']->setHTMLBody($html); 
$sendStart['headers']['Subject']=$title; 
$sendStart['headers']['X-SMTPAPI']='{"category": ["MailID-XXX"]}'; 

$body=$sendStart['mime']->get(array(
     'html_charset'=>'UTF-8', 
     'text_charset'=>'UTF-8', 
     'head_charset'=>'UTF-8' 
    )); 

//echo ($sendStart['mime']->_htmlbody); exit; 
$sendStart['mail']->send('[email protected]',$sendStart['mime']->headers($sendStart['headers']),$body); 

sto affrontando un strano problema durante l'invio delle mail attraverso questo codice. Ho immagini all'interno del corpo dell'email, a volte le immagini non vengono visualizzate. Quando eseguo il debug del problema, ho riscontrato che nell'url dell'immagine manca .. Ma se stampo la posta appena prima della riga di invio (come commento nel codice), stampa perfettamente l'immagine.

corretta immagine url: http://www.domain.com/image.png

nella posta: http://www.domaincom/image.png o http://www.domain.com/imagepng ... ecc

parte del codice HTML, che ha l'immagine come di seguito:

<table cellpadding="0" cellspacing="0" border="0" class="image-table image-2" align="center" style="float:none;margin-left:auto;margin-right:auto;text-align:left;"> 
    <tbody> 
     <tr> 
     <td class="element" style="text-align: left;height: auto;overflow: hidden;-webkit-text-size-adjust: none;"> 
      <!--[if gte mso 9]><img alt="Placeholder Image" src="http://www.domain.com/image.png" style="outline: none; text-decoration: none; display: block; clear: none; float: none; margin-left: auto; margin-right: auto;display:none; mso-hide: none;" align="center" width="394"><![endif]--><![if !mso]><!-- --><img alt="Placeholder Image" src="http://www.domain.com/image.png" style="outline: none;text-decoration: none;display: block;clear: none;float: none;width: 100%;height: auto;max-width: 394px;margin-left: auto;margin-right: auto;*width: 394px;-ms-interpolation-mode: bicubic;" align="center"><!--<![endif]--> 
     </td> 
     </tr> 
    </tbody> 
</table> 

E il la cosa molto strana è che sta visualizzando correttamente in Outlook ma non in altri client come per Outlook ho codice separato (come da codice).

Qualcuno ha idea di come eseguire il debug del problema o di qualsiasi commento su questo problema.

Modificato:

Questo problema è niente a che fare con qualsiasi tag specifico (anche se mi spiego utilizzando tag di immagine), ho esperienza in diversi luoghi come negli stili.

esempio: line-heigth:1.5; è l'originale e cambia in line-heigth:15; durante l'invio.

Fondamentalmente è sufficiente rimuovere lo . qui nel & nell'email HTML.

+0

Quali sono i valori di '$ html' e' $ body'? –

+0

in realtà il suo piccolo template html che non riesco a inserire nella domanda anche se lo modificherò con la parte dell'immagine pertinente, @DaveChen si prega di controllare la domanda modificata –

+0

Interessante ... si inviano email diverse per MS-Outlook? Come fai a sapere in anticipo quale ricevitore utilizza quale client di posta elettronica? – arkascha

risposta

6

Sono abbastanza sicuro che questo è causato da riempimento di punti; poiché il punto viene utilizzato come indicatore speciale nelle e-mail. Si può leggere su questo in the rfc dove si dice (enfasi aggiunta):

Per consentire tutto il testo utente composto da trasmettere in modo trasparente, le seguenti procedure vengono utilizzate:

  • Prima di inviare una linea di posta elettronica testo, il client SMTP controlla il primo carattere della linea. Se si tratta di un periodo, viene inserito un ulteriore periodo all'inizio della riga.
  • Quando una riga di testo di posta viene ricevuta dal server SMTP, controlla la linea. Se la linea è composta da un singolo periodo, viene considerata come l'indicatore di fine posta. Se il primo carattere è un punto e ci sono altri caratteri sulla linea, il primo carattere viene cancellato.

Sembra che il cliente si sta utilizzando per comporre queste email fa non implementare la prima procedura, mentre il server invia la posta a non attuarla; portando a punti che scompaiono.

La soluzione sarebbe quella di far implementare il padding al client.

2

Usa PHPMailer, renderà la vita molto più facile.

+0

Non riesco a modificare il sistema di posta elettronica per alcuni motivi. ma grazie per il suggerimento. –

0

Ecco l'esempio di esso -

 // Set up the headers that will be included in the email. 
    $recipient = '[email protected]'; 
    $from = '[email protected]'; 

    $headers = array(
     'To'   => $recipient, 
     'From'   => $from, 
     'Return-Path' => $from, 
     'Reply-To'  => $replyto, //based on your need 
     'Subject'  => $subject, 
     'Errors-To'  => '<<a href="mailto:[email protected]">[email protected]</a>>', 
     'MIME-Version' => '1.0', 
    ); 

    // Set up parameters for both the HTML and plain text mime parts. 
    $textparams = array(
     'charset'  => 'utf-8', 
     'content_type' => 'text/plain', 
     'encoding'  => 'quoted/printable', 
    ); 
    $htmlparams = array(
     'charset'  => 'utf-8', 
     'content_type' => 'text/html', 
     'encoding'  => 'quoted/printable', 
    ); 

    // Create the email itself. The content is blank for now. 
    $email = new Mail_mimePart('', array('content_type' => 'multipart/alternative')); 

    // Add the text and HTML versions as parts within the main email. 
    $textmime = $email->addSubPart($textbody, $textparams); 
    $htmlmime = $email->addSubPart($htmlbody, $htmlparams); 

    // Get back the body and headers from the MIME object. Merge the headers with 
    // the ones we defined earlier. 
    $final = $email->encode(); 
    $final['headers'] = array_merge($final['headers'], $headers); 

    // Perform the actual send. 
    $smtp_params = array(); 
    $smtp_params['host'] = '127.0.0.1'; 
    $smtp_params['port'] = '25'; 
    $smtp_params['persist'] = TRUE; 

    $mail =& Mail::factory('smtp', $smtp_params); 
    $status = $mail->send($recipient, $final['headers'], $final['body']);