If you delete a message from your Inbox or one of your custom folders, it will still appear in [Gmail]/All Mail.
Here’s why: in most folders, deleting a message simply removes that folder’s label from the message, including the label identifying the message as being in your Inbox.
[Gmail]/All Mail shows all of your messages, whether or not they have labels attached to them.
If you want to permanently delete a message from all folders:
- Move it to the [Gmail]/Trash folder (or [Gmail]/Bin or national version).
- Delete it from the [Gmail]/Trash folder (or [Gmail]/Bin or national version).
All emails in [Gmail]/Spam and [Gmail]/Trash are deleted after 30 days.
If you delete a message from [Gmail]/Spam or [Gmail]/Trash, it will be deleted permanently.
Here’s how this looks like using Mail.dll .NET IMAP component:
// C# version:
using(Imap imap = new Imap())
{
imap.ConnectSSL("imap.gmail.com");
imap.UseBestLogin("user@gmail.com", "password");
// Recognize Trash folder
List<FolderInfo> folders = imap.GetFolders();
CommonFolders common = new CommonFolders(folders);
FolderInfo trash = common.Trash;
// Find all emails we want to delete
imap.SelectInbox();
List<long> uids = imap.Search(Expression.Subject("email to delete"));
// Move email to Trash
List<long> uidsInTrash = new List<long>();
foreach (long uid in uids)
{
long uidInTrash = (long)imap.MoveByUID(uid, trash);
uidsInTrash.Add(uidInTrash);
}
// Delete moved emails from Trash
imap.Select(trash);
foreach (long uid in uidsInTrash)
{
imap.DeleteMessageByUID(uid);
}
imap.Close();
}
' VB.NET version:
Using imap As New Imap()
imap.ConnectSSL("imap.gmail.com")
imap.UseBestLogin("user@gmail.com", "password")
' Recognize Trash folder
Dim folders As List(Or FolderInfo) = imap.GetFolders()
Dim common As CommonFolders = new CommonFolders(folders)
Dim trash As FolderInfo = common.Trash
' Find all emails we want to delete
imap.SelectInbox()
Dim uids As List(Of Long) = imap.Search(_
Expression.Subject("email to delete"))
' Move email to Trash
Dim uidsInTrash As New List(Of Long)
For Each uid As Long In uids
Dim uidInTrash As Long = imap.MoveByUID(uid, trash)
uidsInTrash.Add(uidInTrash)
Next
' Delete moved emails from Trash
imap.[Select](trash)
For Each uid As Long In uidsInTrash
imap.DeleteMessageByUID(uid)
Next
imap.Close()
End Using
You can also use bulk methods to handle large amount of emails faster:
// C# version:
using(Imap imap = new Imap())
{
imap.ConnectSSL("imap.gmail.com");
imap.UseBestLogin("user@gmail.com", "password");
// Recognize Trash folder
List<FolderInfo> folders = imap.GetFolders();
CommonFolders common = new CommonFolders(folders);
FolderInfo trash = common.Trash;
// Find all emails we want to delete
imap.SelectInbox();
List<long> uids = imap.Search(Expression.Subject("email to delete"));
// Move emails to Trash
List<long> uidsInTrash = imap.MoveByUID(uids, trash);
// Delete moved emails from Trash
imap.Select(trash);
imap.DeleteMessageByUID(uidsInTrash);
imap.Close();
}
' VB.NET version:
Using imap As New Imap()
imap.ConnectSSL("imap.gmail.com")
imap.UseBestLogin("user@gmail.com", "password")
' Recognize Trash folder
Dim folders As List(Or FolderInfo) = imap.GetFolders()
Dim common As CommonFolders = new CommonFolders(folders)
Dim trash As FolderInfo = common.Trash
' Find all emails we want to delete
imap.SelectInbox()
Dim uids As List(Of Long) = imap.Search(Expression.Subject("email to delete"))
' Move email to Trash
Dim uidsInTrash As List(Of Long) = imap.MoveByUID(uids, trash)
' Delete moved emails from Trash
imap.[Select](trash)
imap.DeleteMessageByUID(uidsInTrash)
imap.Close()
End Using
Please also note that there are 2 additional sections in the “Gmail settings”/”Forwarding and POP/IMAP” tab:
“When I mark a message in IMAP as deleted:”
- Auto-Expunge on – Immediately update the server. (default)
- Expunge off – Wait for the client to update the server.
“When a message is marked as deleted and expunged from the last visible IMAP folder:”
- Archive the message (default)
- Move the message to the Trash
- Immediately delete the message forever
Those settings change the default behavior of the account and modify DeleteMessage* methods behavior.