Je suis actuellement en utilisant le code suivant pour télécharger un message, ajoutez un en-tête personnalisé, puis ajouter ce message de nouveau dans le dossier mail:Ajouter en-tête personnalisé par courriel en utilisant MailKit
using (ImapClient imap = new ImapClient())
{
imap.ServerCertificateValidationCallback = (s, c, h, e) => true;
imap.Connect(host, port, useSSL);
imap.Authenticate(user, password);
IMailFolder mailFolder = imap.GetFolder(folder);
mailFolder.Open(FolderAccess.ReadWrite);
if (mailFolder.Count > 0)
{
MimeMessage message = mailFolder.GetMessage(0);
var header = message.Headers.FirstOrDefault(h => h.Field == "X-SomeCustomHeader");
if (header == null)
{
message.Headers.Add("X-SomeCustomHeader", "SomeValue");
}
mailFolder.SetFlags(0, MessageFlags.Deleted, true);
mailFolder.Expunge();
UniqueId? newUid = mailFolder.Append(message);
mailFolder.Expunge();
var foundMails = mailFolder.Search(SearchQuery.HeaderContains("X-SomeCustomHeader", "SomeValue"));
if (foundMails.Count > 0)
{
var foundMail = mailFolder.GetMessage(new UniqueId(foundMails.First().Id));
Console.WriteLine(foundMail.Subject);
}
mailFolder.Close(true);
}
}
Le problème avec ce code est que si je regarde la source de l'email sur le dossier l'en-tête n'est pas là et foundMails
a un compte de zéro.
Si je vois le message
il contient l'en-tête, donc si je fais aussi message.WriteTo(somePath);
l'en-tête est là aussi.
Qu'est-ce que je fais mal?
Ce code fonctionne si j'utilise un client Outlook, mais en cas d'utilisation sur un client Gmail, il échoue.
La méthode 'Append' renvoie-t-elle un UID (ou null)? S'il renvoie un UID, que se passe-t-il si vous faites 'mailFolder.GetMessage (uid.Value)'? Est-ce que * ce * message a l'en-tête? – jstedfast
Essayez également d'obtenir un [ProtocolLog] (https://github.com/jstedfast/MailKit/blob/master/FAQ.md#ProtocolLog) pour voir si l'en-tête est inclus dans le message lorsqu'il est ajouté au dossier. – jstedfast
@jstedfast Renvoie un UID mais le message ne contient pas non plus l'en-tête. – TheLethalCoder