none
Enviar correo electrónico con acuse de recibido RRS feed

  • Debate general

  • Cordial saludo a todos,

    Todos sabemos que outlook puede solicitar confirmación de lectura y de recibido cuando enviamos un mensaje.

    Como hago para hacer esto desde vb.net?

     

     

    Gracias,

     

     


    La tecnologia te envuelve
    domingo, 23 de mayo de 2010 13:27

Todas las respuestas

  • hola

    una consulta, estas saundo las API de office, puntualmente en este caso las de OutLook para el envio de mail ?

    lo consulta para saber si por ahi la solucion podrias venir por el lado de buscar alguna propiedad dentro de api de outlook que marque el mail para confirmacion


    o si hay que verlo por otro lado

    podrias poner parte del codigo que usas para enviar el mail ?

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 23 de mayo de 2010 15:20
  • Esta es la clase que utilizo gracias.

     

    Imports

     

    System.Net

    Imports

     

    System.Net.Mail

    Imports

     

    System.IO

    Public

     

    Class clsCorreos

     

    Public NombreUsuarioRemitente As String

     

    Public CorreoRemitente As String

     

    Public UsuarioRemitente As String

     

    Public ContrasenaRemitente As String

     

    Public ServidorSMTP As String

     

    Public PuertoSMTP As String

     

    Public EmailMensaje As New MailMessage

     

    Public Adjuntos As Attachment

     

    Public Autenticar As New NetworkCredential

     

    Public ClienteSMTP As New SmtpClient

     

    Private opfArchivos As New OpenFileDialog

     

    Public Function EnviarCorreo(ByVal Mensaje As String, ByVal Asunto As String, ByVal Destinatarios As String, Optional ByVal Prioridad As String = "Normal", Optional ByVal CC As String = "", Optional ByVal CCO As String = "") As Boolean

     

    'Destinatarios separados por punto y coma

    EmailMensaje.To.Clear()

    EmailMensaje.CC.Clear()

    EmailMensaje.Bcc.Clear()

     

    Dim Destinatario() As String

    Destinatarios = Destinatarios.Replace(

    " ", "")

    Destinatario = Split(Destinatarios,

    ";")

     

    If Destinatarios <> "" Then

     

    For Each CorreoIndividual As String In Destinatario

    EmailMensaje.To.Add(CorreoIndividual)

     

    Next

     

    End If

     

     

    'Con copia separados por punto y coma

     

    Dim DestinatarioCC() As String

    CC = CC.Replace(

    " ", "")

    DestinatarioCC = Split(CC,

    ";")

     

    If CC <> "" Then

     

    For Each CorreoIndividual As String In DestinatarioCC

    EmailMensaje.CC.Add(CorreoIndividual)

     

    Next

     

    End If

     

    'Con copia oculta separados por punto y coma

     

    Dim DestinatarioCCO() As String

    CCO = CCO.Replace(

    " ", "")

    DestinatarioCCO = Split(CCO,

    ";")

     

    If CCO <> "" Then

     

    For Each CorreoIndividual As String In DestinatarioCC

    EmailMensaje.Bcc.Add(CorreoIndividual)

     

    Next

     

    End If

     

    Try

    EmailMensaje.Body = Mensaje

    EmailMensaje.Subject = Asunto

    EmailMensaje.IsBodyHtml =

    True

     

    EmailMensaje.From =

    New MailAddress(CorreoRemitente, NombreUsuarioRemitente)

    ClienteSMTP.Credentials =

    New NetworkCredential(UsuarioRemitente, ContrasenaRemitente)

    ClienteSMTP.Host = ServidorSMTP

    ClienteSMTP.Port = PuertoSMTP

    ClienteSMTP.EnableSsl =

    False

    ClienteSMTP.Send(EmailMensaje)

     

    Return True

     

    Catch ex As Exception

    MsgBox(

    "Error mientras se procesaba el mensaje.", MsgBoxStyle.Information, "Error")

     

    Return False

     

    End Try

     

    End Function

     

    Public Sub BorrarAdjuntos(ByVal EmailMensaje1 As MailMessage)

     

    Try

    EmailMensaje1.Attachments.Clear()

     

     

     

    Catch ex As Exception

    MsgBox(

    "Los datos adjuntos no pudieron ser borrados.", MsgBoxStyle.Information, "Error")

     

    End Try

     

    End Sub

     

    Private Sub btnAdjuntar_Click(ByVal EmailMensaje1 As MailMessage)

     

    Dim Archivo As FileStream

     

    Try

    opfArchivos.Filter =

    "Todos los Archivos (*.*)|*.*"

    opfArchivos.Title =

    "Adjuntar Archivos"

    opfArchivos.Multiselect =

    False

    opfArchivos.InitialDirectory =

    "c:\"

     

    If Me.opfArchivos.ShowDialog = Windows.Forms.DialogResult.Cancel Then

     

    Exit Sub

     

    Else

     

    'If Me.txtAdjunto.Text = "" Then

     

    ' adaux = Me.opfArchivos.FileName + "; "

     

    ' Me.txtAdjunto.Text = adaux

     

    'Else

     

    ' adaux1 = Me.opfArchivos.FileName + "; "

     

    ' adaux += adaux1

     

    ' Me.txtAdjunto.Text = adaux

     

    'End If

    Archivo =

    New FileStream(opfArchivos.FileName, FileMode.Open, FileAccess.Read)

    Adjuntos =

    New Attachment(Archivo, Me.opfArchivos.FileName)

    EmailMensaje1.Attachments.Add(Adjuntos)

     

    End If

     

    Catch ex As Exception

    MessageBox.Show(ex.Message,

    "Correo", MessageBoxButtons.OK, MessageBoxIcon.Error)

     

    End Try

     

    End Sub

     

    End

     

    Class


    La tecnologia te envuelve
    domingo, 23 de mayo de 2010 19:18
  • hola

    intenta con algo como lo explciado aqui

    How do I request a read receipt?

     

    como veras alv le agregas en el header:

    mail.Headers.Add("Disposition-Notification-To", "<someaddress@mydomain.com>")

     

    donde indicas a que mail se envia la confirmacion de lectura

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 23 de mayo de 2010 19:36
  • Hola Leandro,

    No utilizo la api de windows, utilizo el NameSpace de .NEt System.Net.Mail,

    Aqui esta el codigo de envio del correo:

     public static void SendMail(string subject, string body, string to)
            {
                try
                {
                    SmtpClient sc = (Boolean.Parse(Misc.GetSetting("SMTPRequiredPort"))) ? new SmtpClient(Misc.GetSetting("Host"), Int32.Parse(Misc.GetSetting("Port"))) : new SmtpClient(Misc.GetSetting("Host"));
    
                    sc.Credentials = (Boolean.Parse(Misc.GetSetting("SMTPRequiredCredentials"))) ? new NetworkCredential(Misc.GetSetting("SMTPUser"), Misc.GetSetting("SMTPPassword")) : CredentialCache.DefaultNetworkCredentials;
    
                    MailMessage message = new MailMessage();
                    message.From = new MailAddress(Misc.GetSetting("From"), Misc.GetSetting("FromDisplayName"));
                    foreach (string account in to.Split(',', ';'))
                    {
                        message.To.Add(new MailAddress(account));
                    }
                    if (!String.IsNullOrEmpty(Misc.GetSetting("Copies")))
                    {
                        foreach (string account in Misc.GetSetting("Copies").Split(',', ';'))
                        {
                            message.CC.Add(new MailAddress(account));
                        }
                    }
                    message.Subject = subject;
                    message.Body = body;
                    message.IsBodyHtml = true;
    
                    sc.Send(message);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

    Marque outlook como una opcion que utiliza el cliente, es decir que cualquier administrador de correos del cliente final abra el correo o le llegue el correo y yo pueda saber esa información. mi aplicacion hasta ahora solo envía el correo.

    jueves, 31 de enero de 2013 13:09
  • Hola Leandro,

    el post anterior de xGs_Manco es muy similar al mio.

    jueves, 31 de enero de 2013 13:10