Función Utils_SendEmail VirtualXML
Permite enviar mensajes por correo electrónico utilizando el protocolo SMTP (Simple Mail Transfer Protoco), por lo tanto es necesario contar con un servicio de correo que soporte SMTP.

Los servicios de correo basados en web como Outlook/Live/Hotmail de Microsoft, GMail de Google o Yahoo! cuentan con la capacidad de realizar envios de correo usando SMTP, sin embargo, en el caso de GMail y Yahoo!, es necesario configurar el servicio para que pueda soportar envío de correo por medio de "herramientas externas", esto se puede hacer en las bandejas de entrada de estos servicios desde un navegador web.

HotMail / Live / Outlook no requieren configuración adicional, pero requieren usar seguridad SSL, y esta se define en el último parámetro de la función.

Si cuentas con tu propio dominio (p. ej. miempresa.com, minegocio.mx, otro.com.mx, etc.) contacta con tu administrador del servicio de correo para que te indique los valores para los parámetros de esta función.

El uso de esta función se basa en los servicios CDO (Collaboration Data Objects) de Windows, por lo que no es necesario contar ninguna herramienta adicional, ni instalar algun otro componente, si cuentas con Windows 7 o superior, tienes instalados los servicios de CDO.

Versión de VirtualXML.DLL que soporta esta función:
1.0.7.9 15 Septiembre 2022
Aplicación: CFDI ver. 3.3 y 4.0
Sintaxis

public static int Utils_SendEmail(
string SmtpServer,
int SmtpPort,
string SmtpUserName,
string SmtpPassword,
string MessageTo,
string MessageFrom,
string MessageSubject,
string MessageBody,
string MessageAttach1,
string MessageAttach2,
string MessageAttach3,
string OutLog
string SSL
)

Parametros



SmtpServer
Tipo: System  String
Nombre del servidor SMTP, si tienes una cuenta con dominio propio (p.ej. dominio.com, otrodominio.com.mx, mi_dominio.mx, etc.) consulta a tu administrador de dominio para obtener este dato.

Para los servicios de correo electrónico gratuitos, estos son los servidores SMTP:
  • Hotmail / Outlook / Live: smtp-mail.outlook.com (requiere activar las opciones de correo POP en la configuración Correo / Sincronizar correo electrónico de HotMail / Outlook /Live)
  • Yahoo! Mail: smtp.mail.yahoo.com (requiere "registrar" tu aplicación en el correo de Yahoo!, esto se hace desde la página de Yahoo! Mail sección:  Configuración / Seguridad de la cuenta / Generar contraseña de aplicaciones, el registro de tu programa te generará una constraseña nueva, distinta a la que usas para entrar a la página de Yahoo! Mail y deberás usar esta nueva contraseña para usar el protocolo SMTP con Yahoo, usando la misma cuenta de correo @yahoo.com que usas en la página web de Yahoo Mail.)

  • GMail: smtp.gmail.com (similar a Yahoo, requiere generar una nueva contraseña para tu aplicación, esto lo haces desde la configuración de seguridad de tu cuenta de Google, sección: Seguridad / Contraseña de aplicaciones, podrás usar el servidor SMTP de GMail con tu dirección de correo @gmail.com, pero con la nueva contraseña generada)

SmtpPort
Tipo: System  Int32
Número de puerto que usa el servidor SMTP. El puerto estándar del protocolo SMTP es el puerto 25, sin embargo, para evitar el abuso de envío de correos spam, muchos proveedores han cambiado al puerto 587. Los servidores que requieran usar el protocolo de seguridad TLS (Transport Layer Security) deberán  usar el puerto  465, la función establece automaticamente el  protocolo TLS cuando  se usa el puerto  465.

Para los servicios de correo electrónico gratuitos, estos son los puertos:
  • Hotmail  / Outlook / Live: 25  587 (usar el puerto 587 requiere protocolo STARTTLS, de momento no soportado por la función).
  • Yahoo: 25 ó 465
  • GMail: 587 ó 465

SmtpUserName
Tipo: System  String
Nombre del usuario del servicio SMTP, usualmente es tu misma cuenta de correo, esto aplica también para los servicios de correo electrónico gratuitos.

SmtpPassword
Tipo: System  String
Clave de acceso para uso del servicio SMTP, si tienes tu propio dominio, consulta con el administrador del mismo para obtener este valor.
En el caso de HotMail / Outlook / Live, es la misma contraseña que usas en la página web del correo, en el caso de Yahoo ! y de GMail, es la contraseña generada automaticamente al momento de registrar la aplicación.

MessageTo
Tipo: System  String
Dirección de correo electronico del destinatario (usuario@dominio) quien va dirigido el correo.

MessageFrom
Tipo: System  String
Direccion de correo del remitente. (usuario@dominio) que envia el correo

MessageSubject
Tipo: System  String
Asunto del correo (p. ej. "Se envia comprobante fiscal digital")
MessageBody
Tipo: System  String
Cuerpo del mensaje, puede ser texto plano o bien codigo html.
MessageAttach1, MessageAttach2, MessageAttach3
Tipo: System  String
Nombre de hasta 3 archivos a ser agregados en el correo, se debe indicar la ruta completa a la ubicación de archivo a enviar en el disco duro local.
OutLog
Tipo: System  String
Nombre del archivo de bitácora donde se almacenarán los procesos de envio de correo. Necesario para soporte técnico

SSL
Tipo: System  String
Indica que se debe utilizar el protocolo de seguridad SSL para enviar el correo, esto se hace indicando el valor "SSL" en el parámetro. En el caso de HotMail / Outlook / Live, este parámetro es OBLIGATORIO.

Valor retornado:

Tipo: Int32

Retorna un 0 (cero) si el correo se envió con éxito, cualquier otro valor significa error y deberá utilizar el archivo de bitácora para mas información sobre el error
Ejemplo

private void EnviaMail()
{
// Ejemplo 1. Enviamos el correo desde un correo con dominio propio
    int nMail = Utils_SendEmail("smtp.servidor.com", // Servidor SMTP
587, // Puerto del servidor
"usuario@servidor.com", // usuario del servidor SMTP, no confundir con la direccion del remitente, puede ser distinto
"MiPasswordUltraSecreto", // Password del usuario para utilizar el servicio SMTP
"destinatario@direcciondecorreo.com",// direccion del destinatario de correo
"usuario@servidor.com", // Direccion del remitente de correo
"Se envian archivos CFDI", // Asunto del correo
"Anexo al presente documento encontrará su comprobante fiscal correspondiente a su compra realizada con nosotros",// Cuerpo del mensaje
"C:\facturas\clientes\archivo.xml" // Archivo anexo 1
"C:\facturas\clientes\archivo.pdf", // Archivo anexo 2
"" // Archivo anexo 3
"C:\bitacora\BitacoraCorreo.log", // archivo de bitacora
"" ); // NO usar SSL
// Revisamos Resultados

    if ( nMail = 0 )
{
// Correo enviado correctamente
MsgBox("Correo enviado con exito")
}
else
{
MsgBox("No fue posible enviar el correo, revise su archivo de bitacora")// Error en el envio de correo
      
}

// Ejemplo 2. Enviamos el correo desde Hotmail / Outlook / Live
    int nMail = Utils_SendEmail("smtp-mail.outlook.com", // Servidor SMTP
25, // Puerto del servidor
"micorreo@hotmail.com", // usuario del servidor SMTP, no confundir con la direccion del remitente, puede ser distinto
"MiPasswordDeHotMail", // Password del usuario para utilizar el servicio SMTP
"destinatario@direcciondecorreo.com", // direccion del destinatario de correo
"micorreo@hotmail.com", // Direccion del remitente de correo
"Se envian archivos CFDI desde Hotmail", // Asunto del correo
"Anexo al presente documento encontrará su comprobante fiscal correspondiente a su compra realizada con nosotros",// Cuerpo del mensaje
"C:\facturas\clientes\archivo.xml" // Archivo anexo 1
"C:\facturas\clientes\archivo.pdf", // Archivo anexo 2
"" // Archivo anexo 3
"C:\bitacora\BitacoraCorreo.log", // archivo de bitacora
"SSL" ); // USAR SSL

// Ejemplo 3. Enviamos el correo desde Yahoo !
    int nMail = Utils_SendEmail("smtp.mail.yahoo.com", // Servidor SMTP
465, // Puerto del servidor
"micorreo@yahoo.com", // usuario del servidor SMTP, no confundir con la direccion del remitente, puede ser distinto
"jxxw XXXX XXXX wqie", // Password del usuario para utilizar el servicio SMTP
"destinatario@direcciondecorreo.com", // direccion del destinatario de correo
"micorreo@yahoo.com", // Direccion del remitente de correo
"Se envian archivos CFDI desde Yahoo!",// Asunto del correo
"Anexo al presente documento encontrará su comprobante fiscal correspondiente a su compra realizada con nosotros",// Cuerpo del mensaje
"C:\facturas\clientes\archivo.xml" // Archivo anexo 1
"C:\facturas\clientes\archivo.pdf", // Archivo anexo 2
"" // Archivo anexo 3
"C:\bitacora\BitacoraCorreo.log", // archivo de bitacora
"" ); // NO usar SSL porque el puerto 465 utiliza TLS

// Ejemplo 4. Enviamos el correo desde GMail
    int nMail = Utils_SendEmail("smtp.gmail.com", // Servidor SMTP
465, // Puerto del servidor
"micorreo@gmail", // usuario del servidor SMTP, no confundir con la direccion del remitente, puede ser distinto
"maso XXXX XXXX qeci", // Password del usuario para utilizar el servicio SMTP
"destinatario@direcciondecorreo.com", // direccion del destinatario de correo
"micorreo@gmail.com", // Direccion del remitente de correo
"Se envian archivos CFDI desde GMail",// Asunto del correo
"Anexo al presente documento encontrará su comprobante fiscal correspondiente a su compra realizada con nosotros",// Cuerpo del mensaje
"C:\facturas\clientes\archivo.xml" // Archivo anexo 1
"C:\facturas\clientes\archivo.pdf", // Archivo anexo 2
"" // Archivo anexo 3
"C:\bitacora\BitacoraCorreo.log", // archivo de bitacora
"" ); // NO usar SSL porque el puerto 465 utiliza TLS
}
Vease Tambien