使用Webservices.ExchangeService从备用/共享邮箱发送电子邮件
我已经搜索了很多,只能找到如何从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来,但实际上是从我的主帐户发送,但是,官方/最好的方法?如果是这样,我设置了哪些属性以使其看起来来自另一个邮箱?
我会假设我然后手动将邮件保存到共享邮箱的保存文件夹。
谢谢。
我已经找到了解决我自己的问题,只需将'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
我仍然需要找出如何将邮件保存到发送的文件夹,但还没有发现。
尝试下面的代码,如果你希望将邮件保存到已发送文件夹的共享帐户(在C#):
var folderId = new FolderId(WellKnownFolderName.SentItems, new Mailbox("[email protected]"));
message.SendAndSaveCopy(folderId);
我还没有试过上面的代码,但让我知道它是如何工作为你。
我刚来这里发布我的决议与最终的代码。由于服务器不允许模仿,我使用下面的代码(我发现它是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
你用过SMTPClient吗? – Ckrempp 2014-11-06 15:58:54
只是一个疯狂的猜测:可能共享一个邮箱是不够的,你需要'委托访问' – 2014-11-07 08:32:33