来自MemoryStream的AddAttachment
SendGrid API文档指定您可以从Stream添加附件。 它给出的示例使用FileStream
对象 。
我在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()
之后将其丢弃。
根据他们的API,他们已经实现了void AddAttachment(Stream stream, String name)
。 你可能正在使用之前写过的MemoryStream
。 我建议将流中的位置重置为开头,如:
memoryStream.Seek(0, SeekOrigin.Begin);
我最终得到了以下问题,为我解决了这个问题:
fileByteArray = new byte[getBlob.Properties.Length]; getBlob.DownloadToByteArray(fileByteArray, 0); attachmentFileStream = new MemoryStream(fileByteArray); emailMessage.AddAttachment(attachmentFileStream, fileUploadLink.Name);
线程有点旧,但我使用带有NReco PDF转换器的varient:
private async Task SendGridasyncBid(string from, string to, string displayName, string subject, **byte[] PDFBody**, string TxtBody, string HtmlBody) { ... var myStream = new System.IO.MemoryStream(**PDFBody**); myStream.Seek(0, SeekOrigin.Begin); myMessage.AddAttachment(myStream, "NewBid.pdf"); ... }
将html转换为pdf并将其返回,而不是将其写入下载…
private byte[] getHTML(newBidViewModel model) { string strHtml = ...; HtmlToPdfConverter pdfConverter = new HtmlToPdfConverter(); pdfConverter.CustomWkHtmlArgs = "--page-size Letter"; var pdfBytes = pdfConverter.GeneratePdf(strHtml); return **pdfBytes**; }
我不确定这是多么有效,但它对我有用,我希望它可以帮助别人找到他们的附件。