задержка отправки почты с помощью управляемого API веб-служб Exchange (EWS)

#vb.net #email #exchangewebservices #exchange-server-2010

#vb.net #Адрес электронной почты #exchangewebservices #exchange-server-2010

Вопрос:

Моя проблема в том, что я не могу установить задержку отправки элемента (пробовал от 2 минут до 2 дней, не повезло).

Сама почта отправляется немедленно и в обязательном порядке — это просто задержка, которая не работает? любая помощь будет оценена.

Примечание —

  • Я использовал это в качестве примера для большей части своего кода.

  • Я использую exchange 2010 SP2

  • Почта отправляется нормально, просто без задержки


 Public Class Mail
    Private Const DEFERREDSENDTIMEFLAG As Integer = 16367
    Public Shared ReadOnly Property EXCHANGESERVICEURL As String
        Get
            Return ConfigurationManager.AppSettings("EXCHANGESERVICEURL")
        End Get
    End Property
    Public Shared ReadOnly Property DOMAINNAME As String
        Get
            Return ConfigurationManager.AppSettings("DOMAINNAME")
        End Get
    End Property
    Public Shared ReadOnly Property EXCHANGEUSERNAME As String
        Get
            Return ConfigurationManager.AppSettings("EXCHANGEUSERNAME")
        End Get
    End Property
    Public Shared ReadOnly Property EXCHANGEPASSWORD As String
        Get
            Return ConfigurationManager.AppSettings("EXCHANGEPASSWORD")
        End Get
    End Property
    Public Shared ReadOnly Property EXCHANGEVERSION As ExchangeVersion
        Get
            Return CType(System.Enum.Parse(GetType(ExchangeVersion), ConfigurationManager.AppSettings("EXCHANGEVERSION")), ExchangeVersion)
        End Get
    End Property
    Public Shared Sub SendMessage(ByVal fromAddress As String, ByVal toAddress() As String, ByVal ccAddress() As String, ByVal bccAddress() As String, ByVal subject As String, ByVal body As String, ByVal minutesDelay As Integer)

        ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateCertificate)
        Dim service As New ExchangeService(EXCHANGEVERSION)
        service.Credentials = New WebCredentials(EXCHANGEUSERNAME, EXCHANGEPASSWORD, DOMAINNAME)
        service.Url = New Uri(EXCHANGESERVICEURL)

        Dim Message As New Microsoft.Exchange.WebServices.Data.EmailMessage(service)
        'set delay send time
        If minutesDelay > 0 Then
            Dim sendTime As String = DateTime.Now.AddMinutes(minutesDelay).ToUniversalTime().ToString()
            Dim PR_DEFERRED_SEND_TIME As New ExtendedPropertyDefinition(DEFERREDSENDTIMEFLAG, MapiPropertyType.SystemTime)
            Message.SetExtendedProperty(PR_DEFERRED_SEND_TIME, sendTime)
        End If
        Message.From = fromAddress
        If toAddress IsNot Nothing Then
            For Each t As String In toAddress
                Message.ToRecipients.Add(t)
            Next
        End If
        If ccAddress IsNot Nothing Then
            For Each t As String In ccAddress
                Message.CcRecipients.Add(t)
            Next
        End If
        If bccAddress IsNot Nothing Then
            For Each t As String In bccAddress
                Message.BccRecipients.Add(t)
            Next
        End If
        Message.Subject = subject
        Message.Body = body


        Message.SendAndSaveCopy() 'save means make sure it's saved in the sent items folder
        'message.Attachments
    End Sub

    Private Shared Function ValidateCertificate(sender As Object, certificate As X509Certificate, chain As X509Chain, sslPolicyErrors As SslPolicyErrors) As Boolean
        Return True
    End Function
End Class
  

Ответ №1:

Я бы посоветовал вам использовать типизированную переменную, а не преобразовывать дату и время в строку (как в примере), а затем отправлять ее. например, просто используйте

 Message.SetExtendedProperty(PR_DEFERRED_SEND_TIME, DateTime.Now.AddMinutes(minutesDelay).ToUniversalTime())
  

Библиотека предназначена для работы с типизированными переменными, но вы можете увидеть разницу в сообщении, используя строку и типизированную переменную, если вы включите трассировку, например

         <t:ExtendedProperty>
          <t:ExtendedFieldURI PropertyTag="16367" PropertyType="SystemTime"/>
          <t:Value>2016-05-10T03:20:16.000</t:Value>
        </t:ExtendedProperty>
  

против

           <t:ExtendedProperty>
          <t:ExtendedFieldURI PropertyTag="16367" PropertyType="SystemTime"/>
          <t:Value>2016-10-05T03:12:30.067Z</t:Value>
        </t:ExtendedProperty>
  

Вы также могли бы исправить строку, но использование введенной переменной имеет больше смысла с учетом того, что изменения, которые вы пробуете, работают нормально для меня.