c# - Microsoft graph 电子邮件附件状态码 405。方法不允许
问题描述
我收到状态代码 405,发送带有附件的电子邮件时出现方法不允许错误。我正在使用 HttpClient 将我的请求发布到 API 而不是 Microsoft Graph 客户端。不想依赖 Microsoft Graph 库。我发送不带附件的电子邮件工作正常,但不带附件。
try
{
const string url = "https://graph.microsoft.com/v1.0/users/myemail@outlook.com/sendMail";
var path = "C:\\Attachments\\image1.jpg";
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
byte[] bytes = File.ReadAllBytes(path);
string base64String = Convert.ToBase64String(bytes, 0, bytes.Length);
var email = new Email
{
Message = new Message
{
Subject = "Test subject",
Body = new Body
{
ContentType = "Text",
Content = "message"
},
ToRecipients = new List<Recipients>
{
new Recipients
{
EmailAddress = new EmailAddress
{
Address = "testemail@outlook.com"
}
}
},
Attachments = new List<Attachment>
{
new Attachment
{
Name = "image1.jpg",
ContentBytes = base64String,
ContentType = "image/jpeg"
}
}
}
};
var jsonMessage = JsonConvert.SerializeObject(email);
var content = new StringContent(jsonMessage, Encoding.UTF8, "application/json");
HttpResponseMessage response = client.PostAsync(url, content).Result;
response.EnsureSuccessStatusCode();
}
}
catch (HttpRequestException e)
{
Console.WriteLine(e.Message);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
解决方案
如果其他人遇到同样的问题,以下是答案
对于“附件”对象,Microsoft Graph 需要'@odata.type'
属性值为'#microsoft.graph.fileAttachment'
Attachments = new List<Attachment>
{
new Attachment
{
//GraphDataType property name will be changed to @odata.type
GraphDataType = "#microsoft.graph.fileAttachment",
Name = "image1.jpg",
ContentBytes = base64String,
ContentType = "image/jpeg"
}
}
用“ @odata.type”替换序列化对象中的“GraphDataType”
var jsonMessage = JsonConvert.SerializeObject(email);
jsonMessage = jsonMessage.Replace("GraphDataType", "@odata.type");
推荐阅读
- python-3.x - PyInstaller 到 lunx 中的可执行文件,给出:运行 upx -v 时出错?
- javascript - 将对象数组转换为特定格式?
- python - 在 Django ORM 中获取相关模型计数的有效方法
- vue.js - 在我的 vue 项目中使用 websocket 时遇到问题
- javascript - 如何在 Angular 材料中以 datepicker 的格式显示正确的日期
- spring - CouchbaseException:使用计数器时的 INVALID_ARGUMENTS
- android - 如何在 Mpandroidchart 折线图中的 xAxis 上设置标签?
- android - 将按钮动态添加到自定义 FrameLayout
- java - 如何下载正在上传的文件
- java - MongoDB findBy..In vs FindBy..Containing