如何使用MailKit/MimeKit将附件从一封电子邮件移动到另一封电子邮件? [英] How to move an attachment from one e-mail to another using MailKit/MimeKit?

查看:0
本文介绍了如何使用MailKit/MimeKit将附件从一封电子邮件移动到另一封电子邮件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我们通过使用ImapClientUniqueId移动到我们希望将附件移动到的邮件,我们具体如何实现这一点?

谢谢!

推荐答案

UniqueId? AddAttachmentToMessage (ImapClient client, ImapFolder folder, UniqueId uid, MimeEntity attachment)
{
    var message = folder.GetMessage (uid);
    var body = message.Body;
    Multipart multipart;

    if (message.Body is Multipart && message.Body.ContentType.IsMimeType ("multipart", "mixed")) {
        multipart = (Multipart) message.Body;
    } else {
        multipart = new Multipart ("mixed");
        multipart.Add (message.Body);
        message.Body = multipart;
    }

    multipart.Add (attachment);

    var newUid = folder.Append (message);
    folder.AddFlags (uid, MessageFlags.Deleted, true);

    if (client.Capabilities.HasFlag (ImapCapabilities.UidPlus))
        folder.Expunge (new UniqueId[] { uid });

    return newUid;
}

如果服务器不支持UIDPLUS,而您需要newUid值,那么您可能会这样做:

if (!client.Capabilities.HasFlag (ImapCapabilities.UidPlus)) {
    var initialUids = folder.Search (SearchQuery.All);
    folder.Append (message);
    var updatedUids = folder.Search (SearchQuery.All);

    // find the new uids
    var newUids = new UniqueIdSet (SortOrder.Ascending);
    for (int i = updatedUids.Count - 1; i >= 0; i--) {
        if (!initialUids.Contains (updatedUids[i]))
            newUids.Add (updatedUids[i]);
    }

    // get envelope info for each of the new messages
    var newItems = folder.Fetch (newUids, MessageSummaryItems.UniqueId | MessageSummaryItems.Envelope);
    foreach (var item in newItems) {
        var msgid = MimeUtils.ParseMessageId (item.Envelope.MessageId);

        if (message.MessageId.Equals (msgid))
            return item.UniuqeId;

        // Note: if you want to be more pedantic, you can compare the From/To/Cc/ReplyTo and Subject fields as well.
    }
}

这篇关于如何使用MailKit/MimeKit将附件从一封电子邮件移动到另一封电子邮件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆