2010-05-28 26 views
10

Estoy usando .NET 3.5 y quiero enviar un correo automáticamente. Actualmente estoy usando el siguiente:Enviando correo electrónico en C#

Microsoft.Office.Interop.Outlook.MailItem mailMsg = 
    (Microsoft.Office.Interop.Outlook.MailItem)outlookApplication.CreateItem(
    Microsoft.Office.Interop.Outlook.OlItemType.olMailItem); 
mailMsg.To = recipient; 
mailMsg.Subject = subject; 
mailMsg.Body = body; 
mailMsg.Send(); 

Sin embargo, he encontrado varios artículos que parecen dar a entender que debería usar el siguiente método:

System.Net.Mail.MailMessage mailMsg = new System.Net.Mail.MailMessage(); 
mailmsg.To = recipient; 
mailmsg.Subject = subject; 
mailmsg.Body = body; 

¿Puede alguien decirme cuál es la diferencia entre los dos espacios de nombres si, y por qué es posible que desee utilizar uno sobre el otro?

Respuesta

9

El segundo ejemplo necesita un servidor SMTP para establecer una conexión directa y utiliza este servidor SMTP para enviar el correo electrónico. Tiene poca sobrecarga, normalmente funcionará.

Si necesita componer & envíe un correo electrónico en el comportamiento del usuario actual, puede usar Outlook.

Hasta ahora solo he visto respuestas con desventajas para outlook. Pero tiene algunas ventajas:

  • No tiene que pedirle al usuario ninguna configuración.
    • de Outlook ya sabe el servidor de Exchange/SMTP,
    • y la dirección de correo electrónico del usuario
  • correo electrónico que envíe será almacenado en la lista-elementos enviados del usuario. Entonces el usuario puede ver que wat es enviado a su nombre.
  • Complementos que firman/encriptan el correo saliente, o agregue un descargo de responsabilidad estándar de la compañía serán utilizados, entonces usted seguirá las políticas de la compañía
  • Puede avisar al usuario si se le permite enviar correos electrónicos (sí, esto puede ser ventaja para)
  • Puede elegir redactar solo el correo, presentarlo al usuario. El usuario puede editar y elegir enviarlo o no.

Editar: utilizo el método SMTP para enviar correos electrónicos técnicos (como los archivos de registro & mensajes de error) a nuestra unidad de apoyo, estos correos salen rápido y desapercibido.

El método de Outlook que uso para enviar correos electrónicos en el comportamiento de mi usuario a otras personas. Estos correos son lentos, pero son rastreables, etc.

3

Primero se utiliza la interoperabilidad COM, que no es necesaria. El segundo es .NET puro con todas sus características. Además, es más flexible.

10

El primero, supongo, requiere que se instale Outlook en la máquina para que se instalen los ensamblados de Office Interop. El segundo es puro .Net framework.

+3

También vale la pena señalar que la sobrecarga para la creación de instancias de Outlook no es trivial. – Paddy

5

El primer método es usar interoperabilidad al crear una instancia de Outlook (outlookApplication) y tener esa instancia de Outlook para enviar el correo electrónico.

El segundo se utiliza para enviar correos electrónicos a través de SMTP antiguo normal y no requiere ninguna perspectiva.

A menos que tenga necesidades específicas de interoperabilidad, no es necesario enviar un correo electrónico con Outlook (y su código no funcionará en ninguna máquina que no tenga Outlook instalado).

1

El primero es utilizar MS Office que no desea publicar mientras System.Net.Mail está disponible cuando se instala .Net framework.

1

El primer ejemplo usa las bibliotecas instaladas por la descarga de Office Interop Assemblies.

El segundo ejemplo usa las bibliotecas instaladas por defecto con .NET framework, System.Net.

El primer ejemplo usa las bibliotecas de interoperabilidad de Microsoft. Me gustaría ir con su segundo ejemplo, ya que es parte de la instalación predeterminada de .NET. Las bibliotecas de Interop tendrán más sobrecarga que no es necesaria también.

1

Microsoft.Office utiliza Microsoft Outlook para enviar el correo electrónico. Requiere Outlook para ser instalado, y es (al menos la última vez que intenté enviar el correo de esta manera) más propenso a las dificultades. (Por ejemplo, solicita al usuario que les avise que un programa está intentando enviar correo en su nombre, etc.)

System.Net.Mail solo usa .NET puro, y el servidor SMTP especificado para enviar correo. Confíe en mí. Evite usar la Oficina a menos que sea necesario.

+0

Hay una aplicación llamada ClickYes que elimina el molesto pop-up (o hace clic en su nombre). El enlace es http://www.contextmagic.com/express-clickyes/. Debo decir que estoy de acuerdo con usted 100% en la estrategia de System.Net.Mail en lugar de usar Outlook o Plug-Ins de Outlook. Los envoltorios me llevan por la curva. – Koekiebox

1

Debe usar la segunda opción todos los días. Es puro .NET.

Si usa la primera opción, supongo que Outlook debería haberse instalado en esa máquina. Cuando implemente, tendrá problemas si no tiene instalado MS Office en el servidor.

2

Son diferentes. MailItem representa el elemento del mensaje en Outlook. MailMessage representa un mensaje de correo electrónico que se puede enviar utilizando la clase SmtpClient.

Verificar MailItem y MailMessage.

2

El primero es usar COM Interop y utiliza Outlook como base. Necesita una perspectiva configurada. El segundo es usar el cliente SMTP. La interoperabilidad puede llevarlo a problemas relacionados con las perspectivas, pero permitirá algunas características geniales como abrir una ventana de correo (pero generalmente no vale la pena). El segundo enviará correo silencioso, aunque puede mostrar su propia ventana, pero aún así no permitirá la flexibilidad de la Automatización de Outlook. Mi elección es System.Net.Mail. *.

3

Como otros han mencionado, el primero usa Outlook para enviar correos electrónicos. La desventaja es que el usuario debe tener Outlook instalado; la ventaja es que parecerá que Outlook lo está enviando.

El segundo método intentará enviar correo directamente. La ventaja es que no requiere que se instale Outlook, y es mucho menos costoso. La desventaja de esta opción es que la mayoría de las empresas actualmente bloquean el puerto 25, por lo que cuando intente enviar el mensaje, fallará.

Cuestiones relacionadas