Interfaccia per webmail-interno al sito

megarospo

Utente Attivo
25 Set 2007
147
0
0
Ciao.
Vorrei realizzare un servizio di messaggistica (interno al sito) che graficamente sia come una normale webmail (posta in arrivo, castino, allegati, bozze, rubrica, elimina tutto ecc.). Gli utenti dovrebbero inviarsi messaggi tramite questo servizio.
Avete qulache consiglio? Esiste qualcosa da personalizzare? Ciao e grazie :book:
 
funziona anche su server windows e per sola messaggistica interna al sito?
 
Ultima modifica:
si.
l'idea è questa.
l'utente "A" messaggia a "B" (tramite il sito e il messaggio rimane nella banca dati del sito).
Il sistema avverte "B" (tramite il sul indirizzo di posta elettronica) che sul sito è presente un mess per lui.
"B" si collega al sito e legge il messaggio. Se vuole può risponde ad "A" (sempre nel sito e dentro il sito).
Le uniche e-mail VERE che vengono spedite sono quello del sistema che avverte gli utenti di nuovi mess.
Ciao! :book:
 
Al momento non ho tempo per scriverti il codice ma ti illustro brevemente come può funzionare una cosa del genere.

Ti serve una tabella per i messaggi che contenga l'ID del messaggio, l'oggetto, il testo, ID del mandante ed ID del ricevente e la cartella dove viene salvato (inbox/outbox), oltre ad un campo che può essere 0 o 1 e che servirà per capire se il messaggio è stato letto oppure no.

Quando A compone un messaggio verso B, oltre ad effettuare tutti i dovuti controlli, salvi il messaggio nell'inbox di A e nell'outbox di B. Nel primo caso il campo che determina se un messaggio è stato letto avrà valore 0, nel secondo valore 1 (A conosce il messaggio che ha mandato!). Inoltre invii una e-mail a B con tutti i dati relativi al messaggio.

Quando B legge il messaggio di A, imposti la variabile che determina se il messaggio è stato letto oppure no ad 1.

Per la risposta userai lo stesso principio dell'invio.

Probabilmente ti starai chiedendo perché c'è un campo che determina se un messaggio deve finire in inbox o in outbox, senza fare direttamente una cartella per tutti e poi capire dinamicamente se vanno visualizzati in posta ricevuta o posta inviata. Te lo spiego subito: tempo fa ho fatto un sistema di MP per un mio CMS senza quel campo, e mi sono reso conto che quando cancellavo un messaggio dall'outbox di A spariva anche nell'inbox di B, perché lo cancellavo dal database! In questa maniera invece A elimina solo la copia del messaggio nel suo outbox e B continua a tenersi la sua.

Questa è un'idea abbastanza astratta su come potresti fare la cosa, che poi immagino sia il sistema usato anche dai CMS famosi. Ovviamente si può migliorare moltissimo, ad esempio aggiungendo anche un'altra cartella (il cestino) e tutte quelle boiate che non servono a niente ma che fanno sembrare il portale tremendamente figo :D
 
in realtà ho già iniziato a lavorarci e sono ad un buon punto, ma mi rendo conto che un programma fatto da esperti risulterebbe più robusto e più gradevole all'utente.
E poi avrebbe già superato decine di problematiche che io mi trovo a risolvere man mano che proseguo la compilazione.
 
No, no! Sono stato frainteso! :)
Come ti dicevo ho già iniziato a lavorarci. Ho scritto diverso codice e studiato il database.
Infatti quello che hai scritto precedentemente mi è stato utile per riflettere sulla struttura del database. :book:
Nella mia idea immagino che l'utente "A" possa inviare a più utenti contemporaneamente. Quindi nel campo id_dest ci potrebbe essere anche una cosa tipo: 34, 587,1365, 13, 52, 767.
E questo comporta altre considerazioni ancora.... :book: :)
 
per il database la mia idea è questa:

DATABASE
TABELLA OUTBOX
| id_mess | id_user | id_dest | oggetto | testo | allegati | tipo | data |

TABELLA INTBOX
| id_mess | id_user | id_mitt | oggetto | testo | allegati | tipo | data |


Dove su campo “tipo” pensavo di inserire una lettera identificativa della situazione del messaggio. Cioè se è una bozza metto “B”, se è letto metto “L” o no “A”, se è nel cestino “C”.
Così facendo c’è un po’ di ridondanza di dati sui campi ”oggetto”, “testo” e “allegati”, ma solo nel caso il mittente invia a più soggetti. È anche il modo più semplice e logico per permettere ad ogni destinatario di amministrare i propri messaggi indipendentemente dagli altri.

Per il campo “testo” mi consigliate di fare dei collegamenti a file di testo o è più pratico inserirlo nel database?
 
Ultima modifica:
Questo codice dovrebbe realizzare un ciclo e compilare una tabella.
Mi stampa solo l'ultimo record dei tre che ho inserito nel database.


prima parte per la query nel database:
PHP:
$sql_posta_in_arrivo = "SELECT * FROM m_inbox WHERE id_user_i=$id_userOK"; 
$result_posta_in_arrivo = mysql_query($sql_posta_in_arrivo,$film) or die (mysql_error());
$array_posta_in_arrivo = mysql_fetch_array($result_posta_in_arrivo);
$array_posta_in_arrivo_assoc = mysql_fetch_assoc ($result_posta_in_arrivo);
$numero_messaggi_posta_in_arrivo=mysql_num_rows($result_posta_in_arrivo);

$array_posta_in_arrivo_assoc = mysql_fetch_assoc($result_posta_in_arrivo);



Seconda parte nell'HTML
PHP:
<?php do { ?>
<tr>
<td width=10% colspan=2 valign=top> <?php echo "<input name=\"".$array_posta_in_arrivo_assoc['id_mess_i']." \" value=\"".$numero_messaggi_posta_in_arrivo['id_mess_i']."\" type=\"checkbox\">"; ?>
</td>
 <td width=10% colspan=2 valign=top> <?php echo "stampa".$array_posta_in_arrivo_assoc['allegati_i']."";?>
</td>
 <td width=50% colspan=2 valign=top> <?php echo "stampa".$array_posta_in_arrivo_assoc['oggetto_i'].""; ?>
</td>
<td width=20% colspan=2 valign=top> <?php echo "stampa".$array_posta_in_arrivo_assoc['id_mittente_i'].""; ?>
</td>
<td width=10% colspan=2 valign=top> <?php echo "stampa".$array_posta_in_arrivo_assoc['data_i']."";?>
</td>
</tr>
</table>
</form>

<?php } while ($array_posta_in_arrivo_assoc = mysql_fetch_assoc($result_posta_in_arrivo));
?>


Secondo voi cosa sbaglio?:confused:
 
Ciao, in questa riga:
PHP:
$sql_posta_in_arrivo = "SELECT * FROM m_inbox WHERE id_user_i=$id_userOK";
Quell'OK finale non è anche nell'originale, vero?
E comunque non usare do while, perché comunque esegue il ciclo una volta. Usa direttamente while.
 
Rispondo prima a MarcoGrazia
Sto cercando di creare, non una chat che lavora nell'immediatezza dello scambio di messaggi di utenti contemporaneamente collegati, ma un sistema di mail, o di messaggi che dir si voglia, tra utenti che per leggere i messaggi devono collegarsi al sito. Un modo come un altro per generare traffico. :)

Ora rispondo ad alessandro1997:
L'OK finale è corretto.
Ho usato "do while" perchè che io sappia produce un ciclo! L'ho usato in un'altra pagina e funziona. Mi compila una tabella con tutti i dati pescati dal database. In questa pagina invece no! :confused:

Cosa ne pensate?:book:
 
Infatti la prima chat era fatta come la vuoi fare tu, ne più e ne meno, la contemporaneità è venuta dopo, ma dopotutto è la stessa cosa, i messaggi vengono messi in attesa in uno stack fino a quando l'utente designato non li legge e decide cosa farne.
Lo stack è un ciclo while infinito che controlla per prima cosa se c'è qualcuno loggato, se sì prosegue leggendo la posta dallo stack.
Il ciclo termina solo e soltanto quando anche l'ultimo utente si disconnette e ricomincia quando qualcuno fa il log.
Comunque, mi spieghi perché due tabelle, una inbox e una outbox?
Ti bastava una sola tabella con un campo flag, se false il messaggio contenuto era in arrivo, se true in uscita.
Facevi due sole tabelle, una con i dati per userID, account, password per l'autenticazione, e l'altra per le email, con userID per fare un collegamento con la persona autenticata, poi leggi i dati in funzione di un campo mail (true|false) che ti dice se ciò che leggerai negli altri campi della tabella è in arrivo o in partenza, puoi anche metterci un campo cestino(true|false) per definire ciò che va buttato e ciò che non va buttato.
 
il codice ora mi funziona. avevo saltato questi passaggi:

$maxRows_ric = 10000;
$pageNum_ric = 0;
if (isset($_GET['pageNum_ric'])) {
$pageNum_ric = $_GET['pageNum_ric'];
}
$startRow_ric = $pageNum_ric * $maxRows_ric; :byebye:

Avevo valutato la possibilità di una sola tabella ma l'avevo esclusa per una serie di ragionamenti. Non voglio farti del male quindi te li risparmio :)
Comunque credo che ritornerò sui miei passi e proverò a seguire il tuo consiglio.
Ciao e buona notte! :dormo:
 
Intendevo dire che ti avrei annoiato a morte e che non sarebbe stato utile renderti partecipe dei voli pindarici che mi hanno portato a pensare (erroneamente) che fossero necessarie più tabelle :)

Invece pongo un altro quesito.
Questo codice non mi stampa il numero dei record estratti. Secondo voi cosa sbaglio? Ovviamente ho letto e riletto e riprovato il codice decine di volte prima di postaro.
Non sono riuscito a vedere errori. Ma qualcosa c'è sicuramente. :confused:


$sql_posta_in_arrivo = sprintf ("SELECT * FROM m_inbox WHERE id_user_i=$id_userOK");
$result_posta_in_arrivo = mysql_query($sql_posta_in_arrivo,$db) or die (mysql_error());
$numero_messaggi_posta_in_arrivo = mysql_num_rows($result_posta_in_arrivo);
echo "numero mess:".$numero_messaggi_posta_in_arrivo;

La stampa a video è: numero mess: 0

Eppure la stampa del contenuto dei record la fà correttamente!

ciao!!!
 
0 (zero) può essere anche un risultato di errore, sicuro che la query sia giusta?
Sicuro che per useridOK ci siano ancora messaggi da leggere in quel momento?
Hai controllato magari con un echo, cosa c'è in $sql_posta_in_arrivo dopo che l'hai processato?
 

Discussioni simili