2012-06-28 34 views
25

Tôi sử dụng EWS để nhận email trao đổi, nhưng làm cách nào tôi có thể nhận được văn bản thuần túy từ nội dung email, không có html?
Bây giờ tôi sử dụng này:EWS văn bản thuần cơ thể

EmailMessage item = (EmailMessage)outbox.Items[i]; 
item.Load(); 
item.Body.Text 

Trả lời

57

Trong PropertySet mặt hàng của bạn, bạn cần phải thiết lập các RequestedBodyType để BodyType.Text. Dưới đây là một ví dụ:

PropertySet itempropertyset = new PropertySet(BasePropertySet.FirstClassProperties); 
itempropertyset.RequestedBodyType = BodyType.Text; 
ItemView itemview = new ItemView(1000); 
itemview.PropertySet = itempropertyset; 

FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, "subject:TODO", itemview); 
Item item = findResults.FirstOrDefault(); 
item.Load(itempropertyset); 
Console.WriteLine(item.Body); 
+0

Cảm ơn, nó hoạt động. – JNM

+7

Lưu ý rằng PropertySet phải được sử dụng cho cả service.FindItems() và item.Load() để làm việc này đúng cách. – Dave

+0

Tôi nhận ngoại lệ này khi thực hiện Microsoft.Exchange.WebServices.Data.ServiceObjectPropertyException: Bạn phải tải hoặc gán thuộc tính này trước khi bạn có thể đọc giá trị – kolexinfos

3

bạn có thể sử dụng

service.LoadPropertiesForItems(findResults, itempropertyset); 

để tải các thuộc tính cho tất cả các mục

+0

hoặc nếu bạn biết id duy nhất của mục: 'PropertySet plainTextPropertySet = new PropertySet (BasePropertySet. FirstClassProperties) { Đã yêu cầuBodyType = BodyType.Text, }; EmailMessage emailMessage = EmailMessage.Bind (service, uniqueId, plainTextPropertySet); string body = emailMessage.Body.Text; ' – SamFlushing

5

Trong PowerShell:

.........  
$message = [Microsoft.Exchange.WebServices.Data.EmailMessage]::Bind($event.MessageData,$itmId) 

$PropertySet = New-Object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties) 
$PropertySet.RequestedBodyType = [Microsoft.Exchange.WebServices.Data.BodyType]::Text 
$message.Load($PropertySet) 
$bodyText= $message.Body.toString() 
+0

' $ event' trong trường hợp này là gì ?? '$ itmId' ???? - Tôi có một EmailMessage và tôi đang sử dụng chính mã giống như 4 dòng cuối cùng của bạn, nhưng nó vẫn trả về HTML thay vì văn bản thuần túy. Tôi sẽ cố gắng nhớ quay trở lại nếu tôi tìm ra ...: - / –

4

tôi đã cùng một vấn đề. Tất cả những gì bạn phải làm là đặt thuộc tính RequestedBodyType của tập thuộc tính bạn đang sử dụng.

PropertySet propSet = new PropertySet(BasePropertySet.IdOnly, EmailMessageSchema.Subject, EmailMessageSchema.Body); 
    propSet.RequestedBodyType = BodyType.Text; 
    var email = EmailMessage.Bind(service, item.Id, propSet); 
0

Con đường ngắn nhất để làm điều đó là như thế này:

item.Load (mới PropertySet (BasePropertySet.IdOnly, ItemSchema.TextBody, EmailMessageSchema.Body));

Điều này có lợi thế là bạn nhận được cả nội dung văn bản và nội dung html

Các vấn đề liên quan