Je travaille sur un logiciel dans lequel je peux récupérer la boîte de réception et envoyer des éléments depuis Outlook. Ce que je veux faire est de relier les email de boîte de réception avec des réponses (si quelqu'un a envoyé une réponse à cet email). La liste doit être affichée dans cet ordreC# Outlook concernant la boîte de réception et les éléments envoyés
[email protected] Sujet entrant reçu temps [email protected] Répondre Sujet temps Envoyé
Qu'est-ce que je prévois de faire est de récupérer les éléments de la boîte de réception dans un datatable et les éléments envoyés dans un autre datatable. Il lit les courriels un par un sur la base du courrier électronique de l'expéditeur et du sujet, puis il recherche l'expéditeur et le courrier électronique dans les éléments envoyés et, s'il correspond, fusionne ce dernier avec un troisième élément de données.
Y a-t-il une autre meilleure façon de le faire?
Voici le code:
private DataTable GetInboxItems()
{
DataTable inboxTable;
//try
//{
filter = "[ReceivedTime] >= '" + dtpStartDate.Value.ToString("dd/MM/yyyy 12:00 AM") + "' and [ReceivedTime] <= '" + dtpEndDate.Value.ToString("dd/MM/yyyy 11:59 PM") + "'";
Outlook.Application outlookApp = GetApplicationObject();
Outlook.Folder root = outlookApp.Session.DefaultStore.GetRootFolder() as Outlook.Folder;
EnumerateFolders(root);
//string filter = "[ReceivedTime] > '" + dtpStartDate.Value.ToString("dd/MM/yyyy") + "'";
//inbox
Outlook.MAPIFolder inboxFolder = outlookApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
inboxTable = CreateTable();
int count = 0;
if (inboxFolder.Items.Count > 0)
{
var restrictedItems = inboxFolder.Items.Restrict(filter);
restrictedItems.Sort("[ReceivedTime]", true); //descending
//foreach (var item in inboxFolder.Items)
foreach (var item in restrictedItems)
{
var mail = item as Outlook.MailItem;
if (mail != null)
{
//try
//{
DataRow row = inboxTable.NewRow();
//row["sn"] = (++count).ToString();
row["sn"] = mail.EntryID + " " + mail.ReceivedByEntryID;
row["MailType"] = "Inbox";
row["SenderName"] = mail.SenderName;
row["SenderEmail"] = mail.SenderEmailAddress;
row["ReceivedDate"] = mail.ReceivedTime;
row["Subject"] = mail.Subject;
row["Body"] = mail.Body != null ? (mail.Body.Length > 25 ? mail.Body.Substring(0, 25) : mail.Body) : null;
//row["Body"] = mail.Body != null ? mail.Body : "";
row["MailSize"] = mail.Size.ToString();
string attachments = null;
if (mail.Attachments.Count > 0)
{
foreach (var attachment in mail.Attachments)
{
if (((Outlook.Attachment)attachment) != null)
//attachments = ((Outlook.Attachment)attachment).FileName + " " + ((Outlook.Attachment)attachment).Size.ToString() + ", ";
attachments += (((Outlook.Attachment)attachment).Size/1024).ToString() + " KB, ";
}
}
row["AttachmentCount"] = mail.Attachments.Count;
if (attachments != null)
row["AttachmentSize"] = attachments.Substring(0, attachments.Length - 2);
inboxTable.Rows.Add(row);
}
//catch (Exception ex)
//{
// return null;
//}
}
}
return inboxTable;
}
Qu'est-ce qui vous fait penser que votre code de travail n'est pas le meilleur moyen? –
Je crois qu'il doit y avoir une certaine option pour relier la boîte de réception et les éléments envoyés au lieu de les trier par sujet et en ignorant le "Re:" ou un autre préfixe, puis les fusionner à une troisième datatable. – newbie
Il existe une propriété ConversationID mais elle n'est pas exacte à 100%. – Arthur