¿Cómo puedo aplazar los mensajes enviados a una persona específica después de un tiempo específico?

1

Mi jefe quiere que todos los mensajes que le envíe después de las 5 p.m. se entreguen a las 8 a.m. de la mañana siguiente. ¿Hay alguna manera de configurar esto como una regla en Outlook para que no tenga que cambiarlo manualmente cada vez?

Andrew Talbot
fuente
1
¿Entonces quiere retrasar el envío de los mensajes o retrasar que él reciba los mensajes? Tal vez debería simplemente sacar el servidor de intercambio de su teléfono ...
Raystafarian
Gracias por la respuesta. No puede quitar el servidor de su teléfono porque recibe otros correos electrónicos. Es solo que los míos generalmente no son lo suficientemente importantes como para ser atendidos hasta el horario comercial (trabajo en el turno tardío)
Andrew Talbot
Por lo tanto, sería mejor retrasar los que envía en lugar de lo que él recibe. Intentaría usar las opciones de entrega retrasada , o tal vez crear una regla que haga referencia a ellas
Raystafarian
Sí, el problema es que no sería para todos los mensajes, solo los enviados después de las 5 p.m. ¿Hay alguna manera de atarlo así al reloj?
Andrew Talbot

Respuestas:

1

Bueno. Así que pon esto en ThisOutlookSessionla developerpestaña envisual basic

El submarino privado verificará sus elementos de correo que son tosu jefe (cambie el correo electrónico, creo que distingue entre mayúsculas y minúsculas)

Si es para su jefe, ejecutará la macro que verifica el tiempo y lo retrasa. Tuve algunos problemas con el código de envío a las 8 a.m., es posible que deba jugar con eso.

Private Sub application_itemsend(ByVal item As Object, cancel As Boolean)
Dim myItem As mailItem
Set myItem = item
If myItem.Class = olMail And myItem.To = "[email protected]" Then
Call CheckSendTime
End If

End Sub

Public Sub CheckSendTime()
    Dim myobj As Object
    Dim myMail As mailItem
    Dim WkDay As String
    Dim MinNow As Integer
    Dim SendHour As Integer
    Dim SendDate As Date
    Dim SendNow As String

'Set Variables
SendDate = Now()
SendHour = Hour(Now)
MinNow = Minute(Now)
WkDay = Weekday(Now)
SendNow = Y

'Check if after 5PM
If SendHour > 17 Then           'After 5 PM
    SendHour = 34 - SendHour     'Send at 8 am next day
    SendDate = DateAdd("h", SendHour, SendDate)
    SendDate = DateAdd("n", -MinNow, SendDate)
    SendNow = N
End If

'Send the Email
  Set myobj = Application.ActiveInspector.CurrentItem
  If TypeOf myobj Is Outlook.mailItem Then
    Set myMail = myobj
    'Check if we need to delay delivery
    If SendNow = N Then
      myMail.DeferredDeliveryTime = SendDate
      End If
      Else: myMail.Send
    End If

End Sub

Algunos provienen de aquí

Raystafarian
fuente
1

Esta solución es básicamente la propuesta por Raystafarian pero con una lógica simplificada.

Para usar:
1. En Outlook, abra el editor de código, Alt+ F11.
2. En Project1> Microsoft Outlook Objects, haga doble clic en ThisOutlookSession
3. Pegue el código a continuación en el editor.
4. Modifique la dirección de correo electrónico y el rango de tiempo según sea necesario.
5. Haga clic en el botón Guardar y cierre la ventana del editor de código.
6. Cambie la seguridad de la macro de Outlook: haga clic en Archivo> Opciones de Outlook> Centro de confianza. Haga clic en Configuración del Centro de confianza, luego en Configuración de macro y seleccione Notificaciones para todas las macros
7. Reinicie Outlook y haga clic en Habilitar macros cuando se le solicite.

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)

Dim bossEmail As String
Dim delaySendAt As Date
Dim currentHour As Integer
bossEmail = "[email protected]"
delaySendAt = (Date + 1) & " 8:01:00 AM"
currentHour = Hour(Now())

' Delay emails sent between 5PM and 8AM
If currentHour >= 17 Or currentHour < 8 Then
    ' where To field contains boss's email address (case insensitive)
    ' but don't delay message sent to boss and other recipients
    If InStr(1, Item.To, bossEmail, vbTextCompare) > 0 _
        And InStr(Item.To, ";") = 0 Then
        Item.DeferredDeliveryTime = delaySendAt
    End If
End If

End Sub

Los correos electrónicos enviados que cumplan las condiciones especificadas irán a la carpeta Bandeja de salida cuando se haga clic en el botón 'Enviar', pero no se entregarán hasta la hora especificada. Para que los mensajes se entreguen, la aplicación de Outlook debe ejecutarse a la hora de entrega programada. Si abre un mensaje desde la Bandeja de salida, debe hacer clic en 'Enviar' nuevamente o no se enviará.

gm2
fuente
¡¡Gracias por eso!! Dos preguntas, sin embargo. 1) Hay algunos correos electrónicos importantes que necesito enviarle después de horas; si abro el mensaje y hago clic en Enviar, ¿seguirá enviando? 2) ¿Esto aún entregará mensajes enviados a un grupo de distribución del que forma parte?
Andrew Talbot
1) No, necesitará definir y verificar una condición para lograr esto. Al agregar And Item.Importance < 2 _justo debajo If InStr(..., los mensajes enviados al jefe con 'Alta importancia' siempre se enviarán de inmediato. Ref. 2) Sí. Si se trata de una lista de distribución de Exchange, la dirección de correo electrónico en el campo Para no coincidirá con bossEmail; Si se trata de una lista de contactos de Outlook, la InStr(Item.To, ";") = 0condición permitirá que los mensajes enviados al jefe más otros destinatarios se envíen inmediatamente.
gm2