使用Webservices.ExchangeService从备用/共享邮箱发送电子邮件



我搜索了很多,只能找到如何从Exchange中的共享/备用电子邮件帐户/邮箱获取收件箱邮件,但找不到如何从共享邮箱发送邮件。

基本需求是,在电子邮件的收件人看来,电子邮件来自"email2@domain.com'(这是我可以访问的共享邮箱),而不是我登录的主帐户('email1@domain.com’)。此外,已发送的电子邮件应保存在共享邮箱的已发送文件夹中。

exchange的工作方式是,您登录到您的主帐户,然后可以从该主帐户中打开其他共享邮箱(前提是您拥有访问权限)。如果我使用下面的代码,它仍然从我的email1@domain.com.

service = New ExchangeService(ExchangeVersion.Exchange2013)
service.Credentials = New NetworkCredential(username, _pw)
service.TraceEnabled = True
service.TraceFlags = TraceFlags.All
service.AutodiscoverUrl("email2@domain.com", 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()

我开始认为,也许消息对象必须具有某些属性,才能看起来像来自电子邮件1,但实际上是从我的主帐户发送的,但这是官方/最佳方式吗?如果是,我应该设置哪些属性以使其看起来来自另一个邮箱?

我想我会手动将邮件保存到共享邮箱的已保存文件夹中。

谢谢。

如果您想将消息保存到共享帐户的已发送文件夹(在C#中),请尝试以下代码:

var folderId = new FolderId(WellKnownFolderName.SentItems, new Mailbox("email2@domain.com"));
message.SendAndSaveCopy(folderId);

我还没有尝试过上面的代码,但请告诉我它是如何为您工作的。

我已经找到了解决我自己问题的方法,只需将"发件人"字段设置为我希望收件人看到电子邮件的发件人,并将相同的地址添加到回复列表中。我还必须获得对共享文件夹的接收/发送访问权限,我最初只获得读取访问权限,这导致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

我仍然需要了解如何将邮件保存到已发送的文件夹中,但还没有找到。

我来这里只是为了发布我的解决方案和最终代码。由于服务器不允许模拟,我使用以下代码(我在这里找到的)。让我困惑了这么长时间的是,该链接中的示例使用的不仅仅是你想保存文档的电子邮件。我不想只提供电子邮件本身,因为作者给出的例子中有很多额外的内容

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

最新更新