首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AddAttachment来自MemoryStream

AddAttachment来自MemoryStream
EN

Stack Overflow用户
提问于 2015-03-18 12:41:01
回答 4查看 7.5K关注 0票数 6

SendGrid API文档指定您可以从流中添加附件。 object

我有一些斑点在Azure存储,我想电子邮件作为附件。为了实现这一点,我尝试使用一个MemoryStream

代码语言:javascript
复制
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);

它发送的很好,但当电子邮件到达,附件似乎在那里,但它实际上是空的。查看电子邮件来源,没有附件的内容。

在使用MemoryStream API发送附件时,使用SendGrid C# API是已知的限制吗?还是我应该用其他方式来处理这件事?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-04-23 21:32:42

最后,我得到了以下内容,为我解决了这个问题:

代码语言:javascript
复制
fileByteArray = new byte[getBlob.Properties.Length];
getBlob.DownloadToByteArray(fileByteArray, 0);
attachmentFileStream = new MemoryStream(fileByteArray);
emailMessage.AddAttachment(attachmentFileStream, fileUploadLink.Name);
票数 1
EN

Stack Overflow用户

发布于 2015-03-18 13:25:04

您可能只需要在调用DownloadToStream之后将流位置重新设置为0。

代码语言:javascript
复制
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()之后将其处理掉。

票数 6
EN

Stack Overflow用户

发布于 2015-03-18 13:24:41

根据他们的API,他们已经实现了void AddAttachment(Stream stream, String name)。您可能正在使用您以前写过的MemoryStream。我建议将流内的位置重置到开始,例如:

代码语言:javascript
复制
memoryStream.Seek(0, SeekOrigin.Begin);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29122352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档