2014-11-06 91 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 
相关问题