当前位置: 首页 > 知识库问答 >
问题:

将现有电子邮件导入Office 365,同时保留原始日期

欧阳俊晖
2023-03-14

微软图形或Outlook REST API是否支持将现有电子邮件导入Office 365邮箱?

根据定义,导入意味着以保留原始信息的方式复制电子邮件,包括创建/发送/接收日期。

我已经尝试了这些endpoint,但没有效果:

  • 发布 http://graph.microsoft.io/en-us/docs/api/reference/beta/api/user_post_messages
  • 发布 https://outlook.office.com/api/v2.0/me/sendmail

因此,要么我错误地使用了它们,要么只是因为它们不支持设置与日期相关的字段。

共有2个答案

方长卿
2023-03-14

我可以理解的是,您在存档服务器上的某个地方有现有的电子邮件,您希望将它们导入到您的Outlook Online或Outlook Office 365中。

您可以做什么,您可以使用 Exchange Web 服务并导入导出的电子邮件。大多数情况下,电子邮件可以通过.eml或.msg格式导入。我可以为您提供 .eml 文件的指导。

在您的存档服务器上,您可以获取电子邮件的.eml文件备份,也可以通过从Outlook Desktop/Mozilla Thunderbird导出电子邮件来生成备份,以用于测试目的。

现在您可以使用Nuget包Microsoft. Exchange. WebServices,它实际上是Microsoft Exchange WebServices的托管API

您可以使用以下代码

    void main()
    {
        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
        // Get the information of the account
        service.Credentials = new WebCredentials("account email here", "account password here");
        service.AutodiscoverUrl("account email here", RedirectionUrlValidationCallback);
        UploadMIMEEmail(service);
    }

    public static bool RedirectionUrlValidationCallback(string redirectionUrl)
    {
        // The default for the validation callback is to reject the URL.
        bool result = false;

        Uri redirectionUri = new Uri(redirectionUrl);

        // Validate the contents of the redirection URL. In this simple validation
        // callback, the redirection URL is considered valid if it is using HTTPS
        // to encrypt the authentication credentials. 
        if (redirectionUri.Scheme == "https")
        {
            result = true;
        }
        return result;
    }


    private static void UploadMIMEEmail(ExchangeService service)
    {
        EmailMessage email = new EmailMessage(service);

        string emlFileName = @"E:\asad.eml";

        using (FileStream fs = new FileStream(emlFileName, FileMode.Open, FileAccess.Read))
        {
            byte[] bytes = new byte[fs.Length];
            int numBytesToRead = (int)fs.Length;
            int numBytesRead = 0;

            while (numBytesToRead > 0)
            {
                int n = fs.Read(bytes, numBytesRead, numBytesToRead);

                if (n == 0)
                    break;

                numBytesRead += n;
                numBytesToRead -= n;
            }

            // Set the contents of the .eml file to the MimeContent property.
            email.MimeContent = new MimeContent("UTF-8", bytes);
        }

        // Indicate that this email is not a draft. Otherwise, the email will appear as a 
        // draft to clients.
        ExtendedPropertyDefinition PR_MESSAGE_FLAGS_msgflag_read = new ExtendedPropertyDefinition(3591, MapiPropertyType.Integer);
        email.SetExtendedProperty(PR_MESSAGE_FLAGS_msgflag_read, 1);

        // This results in a CreateItem call to EWS. The email will be saved in the Inbox folder.
        email.Save(WellKnownFolderName.Inbox);
    }

此方法的作用是将电子邮件作为导入的电子邮件上传到交换服务器,其中所有电子邮件数据与导出的 .eml 中完全相同。

如果您的交换服务器在本地/域内运行,那么您也可以通过以下方式指定交换URL

service.Url = new Uri("https://computername.domain.contoso.com/EWS/Exchange.asmx");

此外,如果您希望使用默认凭据登录,则可以指定

service.UseDefaultCredentials = true;

有关更多信息,请关注

https://msdn.microsoft.com/en-us/library/office/dn672319(v=exchg.150). aspx#bk_importproperties

https://code.msdn.microsoft.com/how-to-import-vcard-files-ffa0ff50

刁丰羽
2023-03-14

不,API没有任何导入功能。虽然这是一个伟大的想法!你应该登录我们的用户之声论坛。

 类似资料:
  • 问题内容: 我知道电子邮件地址基本上可以无限期地长,因此我在varchar电子邮件地址字段中加上的任何大小都将是任意的。但是,我想知道“标准”是什么?你们做多久了?(与“姓名”字段相同的问题…) 更新: 显然,电子邮件地址的最大长度为320(<= 64名称部分,<= 255域)。你用这个吗? 问题答案: 理论上的限制确实很长,但您是否真的需要担心这些冗长的电子邮件地址?如果某人无法使用100字符的

  • 我想下载一个文件,同时保留文件的文件名。 我有: 我可以下载文件,但我下载的文件名总是“downloadFile”。pdf或下载文件。巴布亚新几内亚'。 如何保留原始文件名?谢谢

  • 问题内容: 环境: Windows 2008 R2 Jenkins1.580.2 LTS Mailer plugin 1.12 Email Extension Plugin 2.39 Java 8 在将我的Jenkins CI服务器配置为在移至Office365中的“企业”帐户后发送电子邮件通知时遇到一些问题。所以这是我的配置: Jenkins从StartTLS支持开始(带有参数’-Dmail.s

  • 问题内容: 到目前为止,我一直尝试使用JavaMail api 创建类型的对象,然后获取其原始表示,但没有成功。我唯一可以获得的是电子邮件 内容 的原始表示形式,但是不包括标题,主题或收件人。我对可以帮助我创建电子邮件对象并获得其原始表示形式的任何建议,任何Java库感兴趣。原始表示应如下所示: 问题答案: 您正在寻找的是MimeMessag#writeTo,它将消息作为RFC 822格式流输出。

  • 问题内容: 我目前有一个程序,可以从列表中随机选择引号并通过电子邮件发送。我现在也尝试在电子邮件中嵌入图片。我遇到了一个问题,可以附加电子邮件,但报价不再起作用。我已经在网上进行了研究,但解决方案对我不起作用。请注意,我使用的是Python 3.2.2。 任何指导将不胜感激。 从上面的代码可以看出,我尝试了不同的方法(引用#) 问题答案: 您正在费力地在中构造有效的MIME消息,然后放弃它并发送一

  • 我连接到outlook。Office 365。com通过库IMAPClient(Python)同步电子邮件。通过IDLE mechanizm,我在服务器上接收更改,例如在文件夹收件箱中接收新电子邮件。之后,我获取UID为{last_synced_UID}:*的邮件——这应该会给出上次同步之后的所有邮件(UID总是递增的)。 此流程可以工作,但IMAP服务器(outlook.office365.co