E-mailový klient pre webmail v PHP – adresár a doplnkové funkcie
V tomto záverečnom článku o tvorbe webmailu vás oboznámim s doplnkovými funkciami, vymazávaním e-mailov, čítaním odoslaných e-mailov a adresárom.
Posledné súbory tohto webmailu sú nasledovné:
- delete.php – súbor pre vymazávanie e-mailov
- delete_address.php – vymazávanie adries z adresára
- insert_address.php – vkladanie adries do adresára
- read_sent.php – čítanie odoslaných správ
- select_address.php – výber viacerých adries prijímateľov e-mailu
- send_to_address.php – tieto adresy upraví a vloží do formulára na písanie správ (new.php)
- sent.php – odoslané správy
Vymazávanie e-mailov (delete.php)
Začneme od prvého súboru delete.php, ktorý vymazáva e-mailové správy. Zdrojový kód súboru a funkcie:
<?php
session_start();
require „./functions.php“;
html_header();
delete_message($id);
html_footer();
?>
// functions.php
<?php
function delete_message($id)
{
global $userid;
$imap = open();
if(!$imap) return false;
$num_id = count($id);
if($num_id>0):
for($i=0;$i<$num_id;$i++):
imap_delete($imap,$id[$i]);
endfor;
imap_expunge($imap);
if($num_id==1) echo „<div align=’center‘ class=’middle‘>Správa bola vymazaná.</div>“;
elseif($num_id>1) echo „<div align=’center‘ class=’middle‘>Správy boli vymazané.</div>“;
imap_close($imap);
else:
echo „<div align=’center‘ class=’warning‘>Žiadna správa nebola vybraná k vymazaniu.</div>“;
endif;
}
?>
Mazanie e-mailových správ prebieha vo funkcii delete_message() na základe identifikačného čísla správy. Vymazávať sa dá viac správ zároveň, premenná $id je teda pole. Vstup je z výberu správ, kde označíme tie, ktoré chceme vymazať a formulár odošleme. Vo funkcii môžete nájsť tieto IMAP funkcie:
- int imap_delete(int spojenie, int cislo_spravy); – funkcia označí správu pre zmazanie
- int imap_expunge(int spojenie); – funkcia vymaže správy označené funkciou imap_delete()
- int imap_close(int spojenie, int moznosti); – uzatvorí spojenie
Adresár
Adresár je užitočná vec, ktorá nebude chýbať ani v našom webmaile. Ten náš bude schopný pridávať, vymazávať a hlavne zobrazovať a prakticky využívať kontakty. Začneme pekne od začiatku – pridávanie (insert_address.php):
<?php
session_start();
require „./functions.php“;
html_header();
insert_address_form($_GET);
html_footer();
?>
// functions.php
function insert_address_form($form)
{
global $userid;
$form[‚name‘] = trim($form[‚name‘]);
$form[‚mail‘] = trim($form[‚mail‘]);
if(!isset($form[‚sent‘])):
?>
<form action=“insert_address.php“ method=“get“>
<table cellpadding=“0″ cellspacing=“0″ border=“0″>
<tr>
<td><div align=“left“ class=“middle“>Meno </div></td>
<td><input type=“text“ class=“textinput“ name=“name“ /></td>
</tr>
<tr>
<td><div align=“left“ class=“middle“>Adresa </div></td>
<td><input type=“text“ class=“textinput“ name=“mail“ value=“<?php echo form[‚mail‘]?$form[‚mail‘]:““?>“ /></td>
</tr>
<tr>
<td colspan=“2″ align=“center“><button type=“submit“ class=“button“>Vložiť</button></td>
</tr>
</table>
<input type=“hidden“ name=“sent“ value=“1″ />
</form>
<?php
else:
db_connect();
$query = „insert into address values(“,’$userid‘,’$form[name]‘,’$form[mail]‘)“;
$result = mysql_query($query);
if(!$result)
{
echo „<div class=’warning‘ align=’center‘>Kontakt sa nepodarilo vložiť.</div>“;
return;
}
echo „<div class=’warning‘ align=’center‘>Kontakt bol úspešne pridaný.</div>“;
endif;
}
Jednoduchá funkcia, ktorá umožňuje vkladať nové kontakty. Pokiaľ je formulár odoslaný, tak sa údaje spracujú – vložia do databáze. V opačnom prípade sa zobrazí formulár na vkladanie nových kontaktov.
Vymazávanie kontaktov bude prebiehať v súbore delete_address.php:
<?php
session_start();
require „./functions.php“;
html_header();
delete_address($_GET);
html_footer();
?>
// functions.php
function delete_address($form)
{
global $userid;
$address = trim($form[‚address‘]);
if(empty($address)):
db_connect();
$query = „select * from address where userid = ‚$userid'“;
$result = mysql_query($query);
$num_result = mysql_num_rows($result);
if($num_result>0):
?>
<select name=’address‘ class=’select‘>
<option value=’false‘>–vyber–</option>
<?php
for($i=0;$i<$num_result;$i++):
$name = mysql_result($result,$i,“name“);
$address = mysql_result($result,$i,“mail“);
echo „<option value=’$address‘>$name <“.$address.“></option>“;
endfor;
?>
</select>
<button class=“button“ type=“submit“>Vymazať</button>
<?php
else:
echo „<div class=’warning‘ align=’center‘>V adresári nemáte žiadne záznamy.</div>“;
endif;
else:
db_connect();
$query = „delete from address where userid = ‚$userid‘ and address = ‚$address'“;
$result = mysql_query($query);
if(!$result)
{
echo „<div class=’warning‘ align=’center‘>Záznam sa nepodarilo vymazať.</div>“;
return;
}
else echo „<div class=’middle‘ align=’center‘>Záznam bol úspešne vymazaný.</div>“;
endif;
}
Vymazávanie prebieha tiež veľmi jednoducho – kontakt, ktorý chceme vymazať, vyberieme z formulárového prvku select a formulár odošleme. Funkcia ako v predošlom prípade aj v tomto funguje na princípe, že ak sme niečo posielali, tak sa spracuje, pokiaľ nie, tak sa zobrazí formulár.
Adresár slúži hlavne k výberu adries prijímateľov správy. To sa odohráva v súbore select_address.php:
<?php
session_start();
require „./functions.php“;
html_header();
select_address($_GET);
html_footer();
?>
// functions.php
function select_address($form)
{
global $userid;
$address = trim($form[‚address‘]);
if(empty($address)):
db_connect();
$query = „select * from address where userid = ‚$userid'“;
$result = mysql_query($query);
$num_result = mysql_num_rows($result);
if($num_result>0):
?>
<form action=’send_to_address.php‘ method=’post‘>
<div class=’middle‘>
<?php
for($i=0;$i<$num_result;$i++):
$name = mysql_result($result,$i,“name“);
$address = mysql_result($result,$i,“mail“);
echo „<input type=’checkbox‘ name=’adresy[]‘ value=’$address‘ />$name <“.$address.“> <br />“;
endfor;
?>
</div>
<button class=“button“ type=“submit“>Poslať</button>
</form>
<?php
else:
echo „<div class=’warning‘ align=’center‘>V adresári nemáte žiadne záznamy.</div>“;
endif;
else:
db_connect();
$query = „delete from address where userid = ‚$userid‘ and address = ‚$address'“;
$result = mysql_query($query);
if(!$result)
{
echo „<div class=’warning‘ align=’center‘>Záznam sa nepodarilo vymazať.</div>“;
return;
}
else echo „<div class=’middle‘ align=’center‘>Záznam bol úspešne vymazaný.</div>“;
endif;
}
Výber adries sa realizuje zaškrtnutím prvku checkbox. Ten má názov adresy[], čím docielime to, aby na výstupe bolo pole, ktoré bude obsahovať adresy prijímateľov.
Posledný súbor týkajúci sa adresáru je send_to_address.php, ktorý je vizuálne totožný s new.php, kde sa píše nová správa. Tento súbor len vytvára adresu odosielateľa z výberu adries z predošlej stránky select_address.php.
<?php
session_start();
require „./functions.php“;
html_header();
$to = get_address($_POST[‚adresy‘]);
show_form($to);
html_footer();
?>
// functions.php
function get_address($adresy)
{
$count = count($adresy);
if($count==0) return “;
for($i=0;$i<$count;$i++):
if($i==($count-1)) $to .= $adresy[$i];
else $to .= $adresy[$i].“,“;
endfor;
return $to;
}
Funkcia get_address e-mailové adresy zoradí za sebou, oddelí čiarkou a uloží do premennej $to. Túto potom predá funkcií show_form(), ktorú sme si popísali už v prvom článku.
Čítanie odoslaných mailov (sent.php)
Webmail nám dovolí si čítať aj odoslané e-mailové správy. Tieto sa budú ukladať do databázy. Kód súboru sent.php k zobrazovaniu a čítaniu odoslaných mailov vyzerá nasledovne:
<?php
session_start();
require „./functions.php“;
html_header();
list_sent($_GET);
html_footer();
?>
// function.php – funkcia list_sent();
function list_sent($form)
{
global $userid;
if(empty($form[‚orderby‘])) $form[‚orderby‘] = „date“;
db_connect();
$query = „select * from sent where userid = ‚$userid‘ order by $form[orderby] desc“;
$result = mysql_query($query);
$num_result = mysql_num_rows($result);
if($num_result>0):
echo „<table cellpadding=’0′ cellspacing=’0′ border=’0′>“;
echo „<tr>“;
echo „<td width=’150′><div class=’middle‘ align=’center‘><a href=’sent.php?orderby=to‘ title=’attachment‘>Príjmateľ</a></div></td>“;
echo „<td width=’200′><div class=’middle‘ align=’center‘><a href=’sent.php?orderby=subject‘ title=’attachment‘>Predmet</a></div></td>“;
echo „<td width=’100′><div class=’middle‘ align=’center‘><a href=’sent.php?orderby=date‘ title=’attachment‘>Odoslané</a></div></td>“;
echo „</tr>“;
for($i=0;$i<$num_result;$i++):
$id = mysql_result($result,$i,“id“);
$to = mysql_result($result,$i,“to_address“);
$subject = mysql_result($result,$i,“subject“);
$date = mysql_result($result,$i,“date“);
$date = date(„j.m.Y H:i:s“,$date);
if($i%2==0) echo „<tr bgcolor=’#CCCCCC‘>“;
else echo „<tr bgcolor=’#DDDDDD‘>“;
echo „<td><div class=’middle‘ align=’left‘><a href=’read_sent.php?id=$id‘> $to</a></div></td>“;
echo „<td><div class=’middle‘ align=’left‘><a href=’read_sent.php?id=$id‘> $subject</a></div></td>“;
echo „<td><div class=’middle‘ align=’left‘><a href=’read_sent.php?id=$id‘> $date</a></div></td>“;
echo „</tr>“;
endfor;
echo „</table>“;
else:
echo „<div class=’warning‘ align=’center‘>V odoslanej pošte nemáte žiadne správy.</div>“;
endif;
}
// read_sent.php – čítanie odoslaného mailu
<?php
session_start();
require „./functions.php“;
html_header();
show_sent_message($id);
html_footer();
?>
// function.php – funkcia show_sent_message();
function show_sent_message($id)
{
global $userid;
if(isset($id)):
db_connect();
$query = „select * from sent where userid = ‚$userid‘ && id = ‚$id'“;
$result = mysql_query($query);
$num_result = mysql_num_rows($result);
if($num_result>0):
$id = mysql_result($result,0,“id“);
$to = mysql_result($result,0,“to_address“);
$subject = mysql_result($result,0,“subject“);
$message = mysql_result($result,0,“message“);
$date = mysql_result($result,0,“date“);
$date = date(„j.m.Y H:i:s“,$date);
// zobrazíme správu
?>
<table cellpadding=“0″ cellspacing=“0″ border=“0″ width=“100%“>
<tr>
<td width=“25%“><div class=“middle“ align=“left“>Príjmateľ:</div></td>
<td width=“25%“><div class=“middle“ align=“left“><?php echo $to?></div></td>
<td></td>
</tr>
<tr>
<td><div class=“middle“ align=“left“>Kópia:</div></td>
<td><div class=“middle“ align=“left“><?php echo $cc?></div></td>
<td></td>
</tr>
<tr>
<td><div class=“middle“ align=“left“>Predmet:</div></td>
<td><div class=“middle“ align=“left“><?php echo $subject?></div></td>
<td></td>
</tr>
<tr>
<td><div class=“middle“ align=“left“>Dátum:</div></td>
<td><div class=“middle“ align=“left“><?php echo $date?></div></td>
<td></td>
</tr>
<tr><td height=“15″></td></tr>
<tr><td colspan=“3″>
<div class=“text“>
<?php
echo nl2br($message);
?>
</div>
</td></tr>
</table>
<?php
else:
echo „<div class=’warning‘ align=’center‘>Správa nebola nájdená.</div>“;
endif;
else:
echo „<div class=’warning‘ align=’center‘>Správa nebola nájdená.</div>“;
endif;
}
Doplnkové funkcie
Na záver ešte nesmú chýbať spomínané doplnkové funkcie:
function address()
{
global $userid;
db_connect();
$query = „select * from accounts where userid = ‚$userid'“;
$result = mysql_query($query);
$num_result = mysql_num_rows($result);
if($num_result>0) $address = mysql_result($result,0,“address“);
return $address;
}
function name()
{
global $userid;
db_connect();
$query = „select * from accounts where userid = ‚$userid'“;
$result = mysql_query($query);
$num_result = mysql_num_rows($result);
if($num_result>0) $name = mysql_result($result,0,“name“);
return $name;
}
Funkcia address() vyberie z databázy vašu e-mailovú adresu, ktorá je potrebná pri odosielaní e-mailov. Funkcia name() vyberá z databáze meno, ktoré sa zobrazí prijímateľovi správy.
K dispozícii sú vám zdrojové súbory celého webmailu. Môžete k nemu jednoducho prirobiť prihlasovací systém s registráciou, kde budete môcť vytvoriť viacero e-mailových kônt pre viacerých užívateľov.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
10 nejpopulárnějších programovacích jazyků a jejich využití
9. listopadu 2023 -
9 nejzajímavějších doménových koncovek
19. srpna 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024