自上次回答被接受以来,GraphAPI已经发生了变化。在您阅读此内容时,它可能已经再次更改。祝你好运。
您说您正在使用Razor,并且已接受的解决方案包括一些查找\替换操作,这正是Razor所做的。因此,让我们从那里开始。
在您的EmailTemplate.cshtml
中,您可以使用Razor语法调用徽标路径:
<img src="@Model.MainLogo" />
当您构建模板时,该值将在数据模型中设置:
string contentIDlogo = "logo.png";
string templateName = "EmailTemplate.cshtml";
object dataModel = new
{
MainLogo = $"cid:{contentIDlogo}"
};
string emailTemplate = _razorTemplateCache.RenderBasicTemplate(templateName, dataModel);
var mailMessage = new Message
{
Subject = subject,
Body = new ItemBody
{
ContentType = BodyType.Html,
Content = emailTemplate
},
ToRecipients = toRecipients.ToList()
};
mailMessage.HasAttachments = true;
byte[] logoBytes = System.IO.File.ReadAllBytes(contentIDlogo);
mailMessage.Attachments = new List<Attachment>
{
new FileAttachment
{
ContentBytes = logoBytes,
ContentType = "image/png",
Name = contentIDlogo,
IsInline = true,
ContentId = contentIDlogo,
Size = logoBytes.Length
}
};
现在您已经有了一条消息,可以使用Graph API发布它。
我的示例正在使用Microsoft.Graph (5.9.0)
GraphServiceClient graphServiceClient = new GraphServiceClient(_credentials, _scopes, Endpoint);
var requestBody = new SendMailPostRequestBody
{
Message = theEmail,
SaveToSentItems = true
};
var fromUser = graphServiceClient.Users[_sendAsUserObjectId];
await fromUser.SendMail.PostAsync(mailMessage, null, cancelToken).ConfigureAwait(false);