【问题标题】:delay sending mail with Exchange Web Services (EWS) Managed API延迟使用 Exchange Web 服务 (EWS) 托管 API 发送邮件
【发布时间】:2017-02-13 06:50:20
【问题描述】:

我的问题是我似乎无法延迟发送该项目(尝试了 2 分钟到 2 天,没有运气)。

邮件本身会立即发送并且不会失败 - 只是延迟不起作用?任何帮助将不胜感激。

注意-

  • 我的大部分代码都使用this as an example

  • 我正在使用 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

【问题讨论】:

    标签: vb.net email exchangewebservices exchange-server-2010


    【解决方案1】:

    我建议您使用类型化变量,而不是将日期时间转换为字符串(如示例那样)然后发送。例如,只需使用

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

    该库旨在处理类型变量,但如果启用跟踪,您可以使用字符串与类型变量看到 POST 中的差异,例如

            <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>
    

    您也可以修复字符串,但使用类型化变量更有意义,因为您的示例对我来说运行良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 2015-03-18
      • 2011-08-10
      • 2013-09-28
      相关资源
      最近更新 更多