SendGrid API 文档指定您可以从流中添加附件。 The example it gives uses a FileStream
object .
我在 Azure 存储中有一些 Blob,我想将其作为附件通过电子邮件发送。为了实现这一目标,我尝试使用 MemoryStream
:
var getBlob = blobContainer.GetBlobReferenceFromServer(fileUploadLink.Name);
if(getBlob != null)
{
// Get file as a stream
MemoryStream memoryStream = new MemoryStream();
getBlob.DownloadToStream(memoryStream);
emailMessage.AddAttachment(memoryStream, fileUploadLink.Name);
}
emailTransport.Deliver(emailMessage);
发送正常,但当电子邮件到达时,附件似乎在那里,但实际上是空的。查看邮件来源,没有附件内容。
使用 SendGrid C# API 发送附件时,使用 MemoryStream
是否是已知限制?或者我应该以其他方式解决这个问题?
最佳答案
您可能只需要在调用 DownloadToStream
后将流位置重置回 0:
var getBlob = blobContainer.GetBlobReferenceFromServer(fileUploadLink.Name);
if (getBlob != null)
{
var memoryStream = new MemoryStream();
getBlob.DownloadToStream(memoryStream);
memoryStream.Seek(0,SeekOrigin.Begin); // Reset stream back to beginning
emailMessage.AddAttachment(memoryStream, fileUploadLink.Name);
}
emailTransport.Deliver(emailMessage);
您可能还想检查谁清理了流,如果他们没有清理流,您应该在调用 Deliver()
后将其丢弃。
关于c# - 从内存流添加附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29122352/