出于某种原因,C# 认为该值可能为 null。即使使用 IF 语句表明它是否为 NULL,也表明它可能为 NULL。没有意义,这就是为什么我有一个 IF 语句。示例显示了没有 IF 语句的代码。
`
using Azure.Identity;
using Microsoft.Graph;
using Microsoft.Graph.Models;
using System;
using System.IO;`
`
var allMailFolders = await graphClient.Users["[email protected]"]
.MailFolders["Inbox"]
.Messages
.GetAsync(x => {
x.QueryParameters.Top = 1;
});
graphClient.Me.MailFolders.Request().GetAsync();
string junkEmailId = "";
foreach(MailFolder folder in allMailFolders){ //This is where it says it might be NULL
if (folder.DisplayName == "Junk Email"){
junkEmailId = folder.Id;
}`
我尝试过其他方法来获取这些邮件文件夹,但结果始终相同。
有一点看起来不太对劲的是
var allMailFolders = await graphClient.Users["[email protected]"]
.MailFolders["Inbox"]
.Messages
.GetAsync(x => {
x.QueryParameters.Top = 1;
});
您使用消息集合,但您的变量名称表明您想要收件箱的子文件夹?然后你就这么做了
foreach(MailFolder folder in allMailFolders){
所以在第一个块中你应该有
var allMailFolders = await graphClient.Users["[email protected]"]
.MailFolders["Inbox"]
.ChildFolders
.GetAsync(x => {
x.QueryParameters.Top = 1;
});
这将仅返回收件箱的子文件夹,因为您有 x.QueryParameters.Top = 1;它只会返回收件箱的第一个子文件夹,更好的方法是,如果您在收件箱的第一级子文件夹中确实有垃圾邮件文件夹,请对其进行过滤
MailFolders["Inbox"].ChildFolders.GetAsync(x => {
x.QueryParameters.Filter = "displayName eq 'Junk Email'"; })
邮箱的标准垃圾邮件文件夹是一个众所周知的文件夹,因此使用 JunkEmail 枚举可以返回它,例如
MailFolders["JunkEmail"].
还有
graphClient.Me.MailFolders.Request().GetAsync();
这是 SDK v4 代码,其余代码是 v5(请求在 v5 中被删除)
图表不支持深层文件夹遍历,因此不会返回深度大于 1 的子文件夹,因此如果您需要邮箱中的所有文件夹,那么您必须进行多次浅层遍历或查看增量操作https: //learn.microsoft.com/en-us/graph/api/mailfolder-delta?view=graph-rest-1.0&tabs=http