SendGrid: How to attach a file from Azure blob storage?

可紊 提交于 2020-01-02 17:56:46

问题


I have blobs in Windows Azure blob storage that I'd like to attach to emails sent with SendGrid. I'd like to specify the file name for the attachment (real file names are just mumbo jumbo) which afaik forces me to add the attachment as a stream.

My code looks like this:

var msg = SendGrid.GetInstance();
// Code for adding sender, recipient etc...
var storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["storage"].ConnectionString);
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(typeName);
var blob = container.GetBlockBlobReference("somefile.png");
var ms = new MemoryStream();
blob.DownloadToStream(ms);
msg.AddAttachment(ms, "originalfilename.png");

The file gets read from the storage to the memory stream and adding the attachment seems to work fine but after receiving the email the attached file is 0 bytes.

Thank you in advance.


回答1:


This has probably already been solved, but you need to make sure that you 'rewind' the stream back to the beginning using Seek. Sample code below.

stream.Seek(0, SeekOrigin.Begin);
sendGrid.AddAttachment(stream, "name");



回答2:


Even though I am not sure how AddAttachment API works, please note that your MemoryStream's position will be set to its length at the end of the download. Hence, you might need to seek it to the beginning before calling AddAttachment.

var ms = new MemoryStream();
blob.DownloadToStream(ms);
ms.Position = 0;
msg.AddAttachment(ms, "originalfilename.png");


来源:https://stackoverflow.com/questions/22097590/sendgrid-how-to-attach-a-file-from-azure-blob-storage

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!