繁体   English   中英

如何将Outlook.MailItem附件转换为输入流?

[英]How to convert Outlook.MailItem attachment to inputstream?

我想在Outlook帐户中收到电子邮件时将附件保存到AWS桶中。 我试过HttpPostedFileBase ,它有InputStream属性。

我尝试过如下

//successfully saving 'HttpPostedFileBase' files

using (IAmazonS3 s3client = new AmazonS3Client(_awsAccessKey, _awsSecretKey, RegionEndpoint.USEast1)) {
    PutObjectRequest putObjectRequest = new PutObjectRequest {
        BucketName = _bucketName,
        CannedACL = S3CannedACL.PublicRead,
        Key = string.Format("uploads/" + AssignedTaskId.ToString() + "/" + Path.GetFileName(postedFile.FileName)),
        InputStream = postedFile.InputStream
    };
    s3client.PutObject(putObjectRequest);
}

//but cannot get from Outlook.MailItem attachments

Outlook.MailItem newEmail = null;
foreach (object collectionItem in inBoxItems) {
    newEmail = collectionItem as Outlook.MailItem;
}
using (IAmazonS3 s3client = new AmazonS3Client(_awsAccessKey, _awsSecretKey, RegionEndpoint.USEast1)) {
    PutObjectRequest putObjectRequest = new PutObjectRequest {
        BucketName = _bucketName,
        CannedACL = S3CannedACL.PublicRead,
        Key = string.Format("uploads/{0}", newEmail.Attachments[i].FileName),
        InputStream = newEmail.Attachments[i].InputStream
    };
    s3client.PutObject(putObjectRequest);
}
}

得到错误:

'Attachment'不包含'InputStream'的定义,并且没有可访问的扩展方法'InputStream'接受类型'Attachment'的第一个参数(你是否缺少using指令或汇编引用?)

Outlook对象模型不提供任何属性。 相反,您可以访问低级属性:

 const string PR_ATTACH_DATA_BIN = "http://schemas.microsoft.com/mapi/proptag/0x37010102";

 Outlook.Attachment attachment = mail.Attachments[0];  

 // Retrieve the attachment as a byte array
 var attachmentData = attachment.PropertyAccessor.GetProperty(PR_ATTACH_DATA_BIN);

另一种选择是将附件(请参阅Attachment.SaveAsFile )保存到文件,然后将该文件作为字节流打开。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM