Microsoft Graph,向电子邮件添加多个附件
Microsoft Graph, adding multiple attachments to an email
我正在使用 .netCore 和 Microsoft Graph 并尝试将多个附件添加到电子邮件中并发送。电子邮件发送得很好,一切都在那里(如果我发送 2 个附件,您会看到有 2 个附件),但是收件人只能打开第一个附件。 (所有附件都小于 4MB 最大值,所以这不是问题)。
密码是
string content = "{\"message\":{" +
"\"subject\":\"" + email.Subject + "\"," +
"\"body\":{" +
"\"contentType\": \"HTML\"," +
"\"content\": \"" + email.Msg + "\"" +
"}," +
"\"toRecipients\": [";
foreach (var adr in email.SendTo)
{
content += "{\"emailAddress\": {\"address\": \"" + adr + "\"} },";
}
content += "]";
if ( email.file != null ) // this is an collection of IFormFile
{
List<EmailAttachment> emailAttachment = new List<EmailAttachment>();
using (var memoryStream = new MemoryStream())
{
foreach (var elem in email.file)
{
await elem.CopyToAsync(memoryStream);
emailAttachment.Add(new EmailAttachment
{
FileName = elem.FileName,
AttachmentFile = Convert.ToBase64String(memoryStream.ToArray()),
ContentType = elem.ContentType
});
}
}
content += ", \"attachments\": ["; //, \"hasAttachments\": true
emailAttachment.ForEach(elem =>
{
content += "{\"@odata.type\": \"#microsoft.graph.fileAttachment\"," +
"\"name\":\" " + elem.FileName + "\"," +
"\"contentType\":\" " + elem.ContentType +" \"," +
"\"contentBytes\":\" " + elem.AttachmentFile + "\"},";
});
content += "]";
}
content += " }}";
StringContent contentString = new StringContent(content, Encoding.UTF8, "application/json");
我代码的下一步是将此 httpContent 发送到 Microsoft Graph。
但是,问题是,如您所见,我尝试制作一组要发送的附件,但电子邮件的收件人只能打开一个附件(他确实看到了所有 3 个附件)。 (注意:我制作了一组收件人以立即发送并且效果很好)。
感谢您的宝贵时间!
几个小时后,答案是我将一个内存流用于多个附件。它一定是弄混了,不起作用。我现在将 foreach 移到了内存流之外,一切正常。每个附件一个内存流。
我正在使用 .netCore 和 Microsoft Graph 并尝试将多个附件添加到电子邮件中并发送。电子邮件发送得很好,一切都在那里(如果我发送 2 个附件,您会看到有 2 个附件),但是收件人只能打开第一个附件。 (所有附件都小于 4MB 最大值,所以这不是问题)。
密码是
string content = "{\"message\":{" +
"\"subject\":\"" + email.Subject + "\"," +
"\"body\":{" +
"\"contentType\": \"HTML\"," +
"\"content\": \"" + email.Msg + "\"" +
"}," +
"\"toRecipients\": [";
foreach (var adr in email.SendTo)
{
content += "{\"emailAddress\": {\"address\": \"" + adr + "\"} },";
}
content += "]";
if ( email.file != null ) // this is an collection of IFormFile
{
List<EmailAttachment> emailAttachment = new List<EmailAttachment>();
using (var memoryStream = new MemoryStream())
{
foreach (var elem in email.file)
{
await elem.CopyToAsync(memoryStream);
emailAttachment.Add(new EmailAttachment
{
FileName = elem.FileName,
AttachmentFile = Convert.ToBase64String(memoryStream.ToArray()),
ContentType = elem.ContentType
});
}
}
content += ", \"attachments\": ["; //, \"hasAttachments\": true
emailAttachment.ForEach(elem =>
{
content += "{\"@odata.type\": \"#microsoft.graph.fileAttachment\"," +
"\"name\":\" " + elem.FileName + "\"," +
"\"contentType\":\" " + elem.ContentType +" \"," +
"\"contentBytes\":\" " + elem.AttachmentFile + "\"},";
});
content += "]";
}
content += " }}";
StringContent contentString = new StringContent(content, Encoding.UTF8, "application/json");
我代码的下一步是将此 httpContent 发送到 Microsoft Graph。
但是,问题是,如您所见,我尝试制作一组要发送的附件,但电子邮件的收件人只能打开一个附件(他确实看到了所有 3 个附件)。 (注意:我制作了一组收件人以立即发送并且效果很好)。
感谢您的宝贵时间!
几个小时后,答案是我将一个内存流用于多个附件。它一定是弄混了,不起作用。我现在将 foreach 移到了内存流之外,一切正常。每个附件一个内存流。