PHP Doku:: Nachrichten im aktuellen Postfach zur Löschung markieren - function.imap-delete.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzE-Mail-relevante ErweiterungenIMAP, POP3 and NNTPIMAP Funktionenimap_delete

Ein Service von Reinhard Neidl - Webprogrammierung.

IMAP Funktionen

<<imap_createmailbox

imap_deletemailbox>>

imap_delete

(PHP 4, PHP 5)

imap_deleteNachrichten im aktuellen Postfach zur Löschung markieren

Beschreibung

bool imap_delete ( resource $imap_stream , int $msg_number [, int $options = 0 ] )

Die mit msg_number angegebene Nachricht oder Liste von Nachrichten wird zur Löschung vorgemerkt. Entsprechend markierte Nachrichten bleiben zunächst im Postfach erhalten, erst beim Aufruf von imap_expunge() oder beim Schließen der Verbingung mit imap_close() und der CL_EXPUNGE Option werden sie tatsächlich endgültig gelöscht.

Parameter-Liste

imap_stream

Eine von imap_open() zurückgegebene IMAP-Verbindung.

msg_number

Die Nachrichtennummer

options

Mit Hilfe der Option FT_UID kann festgelegt werden das msg_number an Stelle von Nachrichtennummern UIDs enthält.

Rückgabewerte

Returns TRUE.

Beispiele

Beispiel #1 imap_delete() Beispiel

<?php

$mbox 
imap_open("{imap.example.org}INBOX""username""password")
    or die(
"Can't connect: " imap_last_error());

$check imap_mailboxmsginfo($mbox);
echo 
"Messages before delete: " $check->Nmsgs "<br />\n";

imap_delete($mbox1);

$check imap_mailboxmsginfo($mbox);
echo 
"Messages after  delete: " $check->Nmsgs "<br />\n";

imap_expunge($mbox);

$check imap_mailboxmsginfo($mbox);
echo 
"Messages after expunge: " $check->Nmsgs "<br />\n";

imap_close($mbox);
?>

Anmerkungen

Hinweis:

Für POP3 Postfächer kann das Löschen-Flag nicht serverseitig zwischen Verbindungen gespeichert werden, markierte Nachrichten müssen daher noch wärend der aktuellen Verbindung mit imap_expunge() entfernt werden, ansonsten bleiben sie ohne Löschmarkierung weiter erhalten.

Siehe auch


6 BenutzerBeiträge:
- Beiträge aktualisieren...
thisemailaddress at gmail dot com
23.09.2009 19:48
In case you feel the need to kill all emails from before a certain year on your Gmail account, this would work:

<?php
error_reporting
(E_ALL ^ (E_NOTICE | E_WARNING));

echo
"parsing ini file...\n";
$ini = parse_ini_file('g.ini');
$user = $ini['user'];
$pass = $ini['pass'];
$year = $ini['year'];
echo
"account {$user} - killing msgs from before {$year}\n\n";

echo
"connecting...\n";
$imap = imap_open("{imap.gmail.com:993/imap/ssl/novalidate-cert}[Gmail]/All Mail", $user, $pass) or die("can't connect: " . imap_last_error() . "\n");

echo
"checking current mailbox...\n";
$mbox = imap_check($imap);

echo
"fetching overview...\n";
$flaggedForDelete = 0;
for(
$n = 0; $n < $mbox->Nmsgs; $n++) {
    echo
"processing {$n} of {$mbox->Nmsgs}...\r";
   
$hdr = imap_fetchheader($imap, $n);
   
preg_match('/^Date: (.*?)$/m', $hdr, $matches);
   
$date = date_parse(strtotime($matches[1]));
    if(
$date['year'] < $year) {
       
imap_delete($imap, $msg->msgno);
       
$flaggedForDelete++;
    }
}

echo
"expunging mailbox ({$flaggedForDelete} messages flagged)... ";
echo ((
imap_expunge($imap)) ? "ok" : "failed!")."\n";
imap_close($imap);

?>
Alex
23.04.2009 21:00
I think you don't have to give a range to imap_delete() if you want to delete a single one.

This works well:

<?php

imap_delete
($conn,trim($msgno));   

?>
chris at financialservicesonline dot com dot au
29.01.2009 0:54
After a little experimentation i found out how to mark a single message for deletion...

<?php

$msgid
= '5'; //For example

imap_delete($mbox, "$msgid:$msgid");

?>

imap_delete() seems to want a range, so to select one, simply range from your id to your id.

Hope this helps.
iwantsimplelife at lycos dot com
12.01.2009 10:40
Somehow, when ever I try to delete an email using the message number returned by imap_header, any email with a message number below 999 will fail.

I discovered that the imap_header will pad the message number with spaces. You will need to trim the number before calling imap_delete.

I am using qmail and it took me over a month to figure it out.

Hope this will be helpful to some poor soul out there facing the same problem.
jacky at jackyhome dot myvnc dot com
9.11.2003 22:42
// is not a complete code but enough to clear out an entire mailbox.
// hope this can save your time :-)

<?php

if (isset($_REQUEST['DoNow']))
{
 
# PULL ADDITIONAL FILES
 
include_once ("common.php");
 
 
$conn = @imap_open("\{$server/$serverType}Trash", $user, $pass)
  or die(
"Connection to folder failed");
 
 
$headers = @imap_check($conn);
  (
$headers->Nmsgs > 0) or die("Trash is empty already !");
 
 
// delete email(s)
 
@imap_delete($conn,'1:*');   // to clear out an entire mailbox.
 
@imap_expunge($conn);
  echo
"Trash is empty.";
 
 
imap_close($conn);
}
else
{
  echo
"<form name='formA' action='".$_SERVER['PATH_INFO']."' method='POST'>"; ?>
  Are you sure to empty trash ?
  <p>
  <input type="submit" value="Go Ahead" name="DoNow">&nbsp;
  <input type="button" value="Cancel" name="Cancel" onClick='javascript:self.history.go(-1)'></form></p>
<?php
} ?>
James G
10.04.2003 6:05
I had some major issues deleting emails using this function.  Using IIS 5.0 and a win based Mail Server, I could not delete the emails individually.

My script merely needed to check the emails and update the database for bounce backs, after which I simply wanted to erase all emails.

If imap_delete($mbox,$email->MsgNo) just isnt working for you, you can try using

    imap_delete($mbox,'1:*');

to clear out an entire mailbox.

Hope this helps cause it drove me insane for about 5 hours.  :)



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)