2009-08-28 48 views
11

Estoy tratando de enviar un correo electrónico desde el código C# a través del servidor de intercambio de nuestra compañía.¿Cómo enviar un correo electrónico a través del servidor de intercambio sin usar smtp?

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("exchangebox1.mycompany.com"); 
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage("[email protected]", 
       "[email protected]", 
       "title here", 
       "body here"); 
      client.Send(msg); 

Cuando ejecuto esto me sale SmptException diciendo "Servicio no disponible, cerrando el canal de transmisión. La respuesta del servidor era 4.3.2 Servicio no disponible, cerrando el canal de transmisión".

Estoy interpretando que esto significa que SMTP no está habilitado en nuestro cuadro de intercambio y que necesito usar comandos nativos de Exchange Server para enviar el correo. ¿Es correcto o SMTP siempre debe funcionar?

Además, ¿es posible que el servidor de intercambio se haya configurado para permitir que ciertas computadoras/usuarios envíen el principal a través de SMTP?

¿Cómo puedo enviar correo a través de Exchange Server sin utilizar SMTP?

Gracias.

+0

¿Tiene reenvío habilitado en la cuenta a la que está enviando el correo electrónico como? Creo que es algo que el administrador de Exchange debe establecer en esa cuenta para que pueda enviar correos electrónicos con esa cuenta sin usar autenticación. –

+0

Gracias, lo intentaré y lo averiguaré. –

Respuesta

7

Puede utilizar el WCF Exchange Server Mail Transport un ejemplo de cómo poner en práctica es Here

Específicamente en relación con el envío de mensajes que dice

Cuando una aplicación envía un mensaje, llama al método Enviar de la canal de salida actual, que debe ser abierto. El canal de salida serializa el mensaje en una cadena y crea el mensaje en la carpeta Borradores. Es establece los valores adecuados en los campos de correo electrónico . Cuando se ha creado el mensaje , se mueve a la salida . Esto ocurre a través de CEMAPI en el dispositivo oa través de los servicios de Exchange Web en el escritorio. En el dispositivo , los mensajes en la Bandeja de salida son sincronizados con otros mensajes salientes , según lo definido por ActiveSync.

3

Trate de añadir estas dos líneas antes de enviar:

client.UseDefaultCredentials = true; 
client.EnableSsl = true; 

lo más probable es un problema con la existencia de ninguna credencial así que voy a engañar un poco de Google ...
From dailycode.net

+0

Gracias por la ayuda. Me temo que recibo la misma excepción. –

4

Puede usar la nueva API administrada de servicios web de Exchange 1.0. parece ser la mejor solución. Aquí está el enlace.

http://msdn.microsoft.com/en-us/library/dd637749(v=exchg.80).aspx
https://blogs.technet.com/b/exchange/archive/2009/04/21/3407328.aspx
La aceptar aceptará listas de distribución también.

El 2.0 versión de la API
http://msdn.microsoft.com/en-us/library/office/dd633709.aspx

+0

"Este tema ya no está disponible", ¡así que no vayas allí! – CSharper

+0

Solo un poco de podredumbre de enlace. Reemplacé una alternativa y agregué un enlace a la versión 2.0 de la API. – EBarr

0

Sé que esto es un hilo viejo, pero está completo, se debe considerar la Microsoft Exchange WebServices paquete Nuget:

https://www.nuget.org/packages/Microsoft.Exchange.WebServices

ExchangeService service = new ExchangeService(); 
service.AutodiscoverUrl("[email protected]"); 

EmailMessage message = new EmailMessage(service); 
message.Subject = "my subject"; 
message.Body = "my body"; 
message.ToRecipients.Add("[email protected]"); 
message.Save(); 

message.SendAndSaveCopy(); 
Cuestiones relacionadas