Как преобразовать вложение Outlook.MailItem в inputtream? - PullRequest
0 голосов
/ 17 июня 2019

Я хотел бы сохранить вложения в корзину AWS при получении электронного письма в учетной записи outlook. Я пытался с 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);
}
}

Получение ошибки:

«Вложение» не содержит определения для «InputStream», и невозможно найти доступный метод расширения «InputStream», принимающий первый аргумент типа «Вложение» (вам не хватает директивы using или ссылки на сборку?)

1 Ответ

0 голосов
/ 17 июня 2019

Объектная модель 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) в файл, а затем открыть файл как поток байтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...