2014-11-06 87 views
1

我已經搜索了很多,只能找到如何從Exchange中的共享/備用電子郵件帳戶/郵箱獲取收件箱郵件,但我無法找到如何從共享郵箱。使用Webservices.ExchangeService從備用/共享郵箱發送電子郵件

基本的需求是,電子郵件的收件人看來,電子郵件來自'[email protected]'(這是我可以訪問的共享郵箱),而不是我登錄的主要帳戶(' [email protected]')。另外,發送的電子郵件應保存在共享郵箱的發送文件夾中。

交換方式的工作原理是您登錄到主帳戶,並且您可以在該主帳戶(如果您有權利的情況下)打開其他共享郵箱。如果我使用下面的代碼,它仍然從我的[email protected]發送。

service = New ExchangeService(ExchangeVersion.Exchange2013) 
service.Credentials = New NetworkCredential(username, _pw) 
service.TraceEnabled = True 
service.TraceFlags = TraceFlags.All 

service.AutodiscoverUrl("[email protected]", AddressOf ValidateRedirectionUrlCallback) 

Dim message As New EmailMessage(service) 
message.Subject = subject 
message.Body = body 
For Each Item In _to 
    message.ToRecipients.Add(Item) 
Next 

For Each Item In AttachmentPaths 
    message.Attachments.AddFileAttachment(Item) 
Next 

message.SendAndSaveCopy() 

即時通訊開始想,或許消息對象必須具有一定的屬性設置看起來像是從EMAIL1來,但實際上是從我的主帳戶發送,但是,官方/最好的方法?如果是這樣,我設置了哪些屬性以使其看起來來自另一個郵箱?

我會假設我然後手動將郵件保存到共享郵箱的保存文件夾。

謝謝。

+0

你用過SMTPClient嗎? – Ckrempp 2014-11-06 15:58:54

+0

只是一個瘋狂的猜測:可能共享一個郵箱是不夠的,你需要'委託訪問' – 2014-11-07 08:32:33

回答

0

我已經找到了解決我自己的問題,只需將'From'字段設置爲我希望收件人看到來自的電子郵件並將相同的地址添加到列表回覆列表。我還必須在共享文件夾上獲得接收/發送訪問權限,我原來只被授予讀訪問權限,導致在saveandsendcopy方法中出現異常。

下面的代碼。

Public Function Create(ByRef emailaddress As String, ByRef username As String, ByRef _domain As String, ByRef _pw As String) As Boolean 
    Try 

     service = New ExchangeService(ExchangeVersion.Exchange2013) 
     service.Credentials = New NetworkCredential(username, _pw) 
     service.TraceEnabled = True 
     service.TraceFlags = TraceFlags.All 

     service.AutodiscoverUrl(emailaddress, AddressOf ValidateRedirectionUrlCallback) 

     Return True 
    Catch ex As Exception 
     Return False 
    End Try 

End Function 

Public Function Send(ByRef subject As String, ByRef body As String, ByRef _to As List(Of String), ByRef AttachmentPaths As List(Of String), ByRef from As String) As Boolean 
    Try 

     Dim message As New EmailMessage(service) 
     message.From = New EmailAddress(from) 
     message.ReplyTo.Add(from) 

     message.Subject = subject 

     message.Body = body 

     For Each Item In _to 
      message.ToRecipients.Add(Item) 
     Next 

     For Each Item In AttachmentPaths 
      ' Add a file attachment by using a stream. 
      Dim theStream As New FileStream(Item, FileMode.OpenOrCreate) 

      Dim pathparts As String() = Item.Split("\") 

      ' The streamed file attachment is named FourthAttachment.txt. 
      message.Attachments.AddFileAttachment(pathparts(pathparts.Count - 1), theStream) 

     Next 
     message.SendAndSaveCopy() 

     Return True 
    Catch ex As Exception 
     Return False 
    End Try 


End Function 

我仍然需要找出如何將郵件保存到發送的文件夾,但還沒有發現。

2

嘗試下面的代碼,如果你希望將郵件保存到已發送文件夾的共享帳戶(在C#):

var folderId = new FolderId(WellKnownFolderName.SentItems, new Mailbox("[email protected]")); 
message.SendAndSaveCopy(folderId); 

我還沒有試過上面的代碼,但讓我知道它是如何工作爲你。

0

我剛來這裏發佈我的決議與最終的代碼。由於服務器不允許模仿,我使用下面的代碼(我發現它是here)。讓我困惑的是,該鏈接中的示例不僅僅使用要保存文檔的電子郵件地址。我不認爲只是提供電子郵件本身,因爲作者給出的例子有很多額外的內容。

Public Function Send(ByRef subject As String, ByRef body As String, ByRef _to As List(Of String), ByRef AttachmentPaths As List(Of String), ByRef from As String) As Boolean 
    Try 
     Dim message As New EmailMessage(service) 
     message.From = New EmailAddress(from) 
     message.ReplyTo.Add(from) 

     message.Subject = subject 

     message.Body = body 

     For Each Item In _to 
      message.ToRecipients.Add(Item) 
     Next 

     For Each Item In AttachmentPaths 
      ' Add a file attachment by using a stream. 
      Dim theStream As New FileStream(Item, FileMode.OpenOrCreate) 

      Dim pathparts As String() = Item.Split("\") 

      ' The streamed file attachment is named FourthAttachment.txt. 
      message.Attachments.AddFileAttachment(pathparts(pathparts.Count - 1), theStream) 
     Next 

     message.Save(New FolderId(WellKnownFolderName.Drafts, New Mailbox(from))) 
     message.SendAndSaveCopy(New FolderId(WellKnownFolderName.SentItems, New Mailbox(from))) 

     Return True 
    Catch ex As Exception 
     Return False 
    End Try 
End Function 
相關問題