Claudiogarau.it :: Tutorials & Scripts, PHP, Linux and more.

Home ~ Php :: Un client di posta elettronica in PHP. Parte II. :: Indice Php

Un client di posta elettronica in PHP. Parte II.

Categoria: Php Inserito il: 15-11-2006 Stampa (13205 click)

Per visualizzare il testo di ogni e-mail pervenuta nel nostro server di posta, creeremo un file in grado di leggere un determinato messaggio il cui 'Id' gli verrà comunicato tramite il metodo GET.

Inoltre, il file per la lettura delle email sarà in grado di rilevare la presenza di allegati e in caso di esito positivo, di creare un link per il download di questi ultimi:

<?php
if (isset($_GET['id']))
{
  $var = $_GET['id'];
}
@include 'cnf.php';
$fetchstructure = @imap_fetchstructure($conn, $var);

$v1 = "0";
$i = "";
$ctrl = 0;
$ed = 0;
$mail_or_link = 0;

foreach($fetchstructure as $k => $val)
{
  if (($ctrl=="") && ($k=="subtype"))
  {
    if ($val=="RELATED")
    {
      $i = ".2";
      $ctrl=1;
    }
    if ($val=="MIXED")
    {
      $i = ".2";
      $ctrl=1;
      $ed=1;
      echo "<b>Allegati:</b> ";
    }
  }
  if ($k=="parts")
  {
    $items = $fetchstructure -> parts;
    foreach($items as $k0 => $val0)
    {
      $v1 = $v1+1;
      foreach($val0 as $k1 => $val1)
      {
        if (($k1=="disposition") && ($val1=="ATTACHMENT"))
        {
          $atch = $fetchstructure -> parts[$v1-1] -> dparameters[0] -> value;
          echo "<a href=\"attach.php?id=$var&item=".$v1."\">".$atch."</a>";
        }
      } 
    }
  }
}
if ($v1=="0")
{
  $v1 = 1;
  $mail_or_link=1;
}
if ($ed)
{
  $v1=1;
  echo "<br /><br />";
}
$string=@imap_fetchbody($conn, $var, $v1.$i);
$string=@quoted_printable_decode(@str_replace("=\r\n","",$string));
if ($mail_or_link=="")
{
  echo $string;
}else{
  $word="";
  $row = @explode("\n", $string);
  for ($inc=0;$inc<@sizeof($row);$inc++)
  {
    $row[$inc] = $row[$inc]."<br />";
    $word=@array_merge($word,@explode(" ", $row[$inc]));
  }
  for ($k=0;$k<@sizeof($word);$k++)
  {
    $address = @strpos($word[$k], "www");
    $url = @strpos($word[$k], "http");
    $link = @strpos($word[$k], "href");
    $ftp = @strpos($word[$k], "ftp");
    if ($link == 0)
    {
      if (($url == 0) && ($address == 0))
      {
        echo $word[$k]." ";
      }else{
        echo "<a href=\"".@str_replace('<br />','',$word[$k])."\">";
        echo $word[$k]."</a>";
      }
    }else{
      echo $word[$k]." ";
    }
  }
}
@imap_close($conn);
?>

Il codice proposto è lungo ma di per sè non estremamente complicato: in pratica lo script controlla la struttura del messaggio relativo all''Id' comunicato dal metodo grazie all'azione della funzione imap_fetchstructure(); se è presente un allegato, questo viene linkato ad un file in modo che sia possibile scaricarlo, diversamente viene proposto essenzialmente il testo della e-mail.

Da notare come il codice svolga un'azione di parsing sul contenuto del messaggio, se vengono trovate entità linkabili come URL o indirizzi di posta elettronica, queste vengono ipertestualizzate e corredate di colegamento.

Attenzione: questo articolo è stato concesso in esclusiva per la pubblicazione a Mrwebmaster.it; ne è vietata la riproduzione,
anche parziale, senza l'esplicito consenso dell'autore e della redazione di Mrwebmaster.it.

Cerca nel sito
Per sito
Sviluppatore di applicazioni Web con competenze evolute nella progettazione delle basi di dati, autore per alcune delle più importanti testate on line dedicate alla manualistica tecnica (HTML.it, MrWebmaster.it, Edit) e consulente per l'e-learning.
Tutte le categorie
Tutorial Random
La sicurezza in PHP
Quando si creano delle applicazioni in PHP non è importante soltanto creare script che funzionino correttamente, bisogna inoltre fare sempre... Leggi l'articolo
Corsi online per sviluppatori
Corsi per Webmaster, Web Designer, Programmatori, Grafici e Sistemisti