2011-07-11 21 views
10

El contexto:Envío de correo electrónico utilizando Smtp.mail.microsoftonline.com

Somos una pequeña empresa que no tiene un servidor de Exchange (o cualquier persona dedicada a él) sin embargo, todavía necesita tener/Enviar correos electrónicos

Hemos decidido utilizar Microsoft Online Services (MOS)


El Objetivo:

Tenemos un servidor web (Windows Server 2003 R2 con IIS 6.0) y tienen implementó una aplicación C# ASP.Net MCV.

La aplicación web debe enviar correos electrónicos cada vez que un usuario cree una cuenta.

De acuerdo con documentation necesitamos usar el puerto (587) y asegurarnos de que la Seguridad de la capa de transporte (TLS) lo permita. Además, la dirección del remitente que se utiliza debe ser del tipo “autorizada”, que es cuando doble Vea a través de la Microsoft Online Administration Center


el código:

El código C# Tengo debe ser trivial y es la siguiente:

SmtpClient server = new SmtpClient("Smtp.mail.microsoftonline.com"); 
server.Port = 587; 
server.EnableSsl = true; 
server.Credentials = new System.Net.NetworkCredential("[email protected]", "123abc"); 
server.UseDefaultCredentials = false; 

MailMessage mail = new MailMessage(); 
mail.From = new MailAddress("[email protected]"); 
mail.To.Add("[email protected]"); 
mail.Subject = "test subject"; 
mail.Body = "this is my message body"; 
mail.IsBodyHtml = true; 

try 
{ 
    server.Send(mail); 
} 
catch (Exception ex) 
{ 
    throw ex; 
} 

el error:

He creado una aplicación winform simple con el código anterior para probar el envío de correos electrónicos ... He probado la aplicación winform localmente en mi computadora (Windows XP) y en el servidor.

En tanto intento, sigo recibiendo el mensaje de error siguiente:

El servidor SMTP requiere una conexión segura o el cliente no fue autenticado. La respuesta del servidor fue: 5.7.1 El cliente no fue autenticado.

Después de buscar en Google durante un tiempo que todavía no han encontrado la razón por la cual ... Además, la mayoría de las respuestas que he encontrado están haciendo una referencia a la Consola de administración de Exchange que no parecen que tener (o instalado) tanto por qué estamos usando Microsoft Online Services ...


Preguntas:

1) como un cliente de pago de MOS, mi comprensión inicial es que yo no debería tener que instalar (o tener) un Exc Hange Management Console en nuestro servidor ... de hecho, esto debería ser completamente irrelevante para poder lograr mi tarea.

2) También he intentado habilitar TLS dentro de nuestro IIS 6.0 pero en vano ...

3) Estamos agarrando a un clavo ardiendo, porque lo que parece hacer parece algo increíblemente triviales ...

4) En caso de que simplemente abandonar la idea de utilizar el servidor SMTP de MOS y utilice otro ¿uno? ¿Como Gmail? Si es así ... ¿por qué molestarse en pagar una tarifa mensual por MOS?

Si alguien tiene alguna ayuda/consejo que pueda ayudarme a arrojar algo de luz sobre esto, ¡sería genial!

Sinceramente Vince



WOW ... creo que hemos encontrado el culpable !!!

Por comentando esta línea de código:

//server.UseDefaultCredentials = false; 

todo empezó a trabajar!

ahora soy capaz de enviar mensajes de correo electrónico dentro y fuera de nuestro dominio ...

Lo que me intriga más es que, según la documentación, el valor por defecto de este UseDefaultCredentials propiedad se establece en falsa

Así que ... cuando lo ajusto manualmente a falso no funciona, pero cuando comento la línea (que también lo configura en falso debido a su valor predeterminado) ¡funciona!

Si este es un problema conocido o si alguien tiene una respuesta para eso, me gustaría saberlo.

Sinceramente Gracias

+0

El código se ve bien. Parece que el nombre de usuario y/o la contraseña son incorrectos. [Link] (http://social.msdn.microsoft.com/Forums/sl-SI/ncl/thread/fbd6ae73-fbab-4873-8ca2-3ab02406e1d7) – dtb

Respuesta

6

mirando en reflector en la propiedad UseDefaultCredentials, se puede ver que también cambia el valor trasnport.Credentials, por lo que cuando llamó esta propiedad con un falso valor, cambió las credenciales de transporte a nulo. el problema es que llamó a esta propiedad después de establecer las credenciales en la línea anterior a eso, anuló las credenciales.

línea de fondo, no debe configurar las credenciales y llamar a esta propiedad de forma posterior.

+2

Parece una opción de diseño terrible al final de Microsoft. Para mí, parece que esas propiedades están demasiado estrechamente acopladas. No me sorprendería que este fuera un problema extremadamente común que las personas se topan. ¡Buena atrapada! –

0

5.7.1 no es un problema de autenticación, sino una cuestión de relé. Para evitar que alguien use su servidor (o su cuenta, según sea el caso), el servidor smtp está configurado para permitir únicamente el envío de correo a usuarios fuera de su dominio si proviene de una dirección autorizada. Compruebe que la dirección que usted ha enumerado aquí

mail.From = new MailAddress("[email protected]"); 

es el mismo que el que se autentifica como. Además, asegúrese de que el dominio de la dirección indicada esté en la lista de dominios autorizados.

+0

Comentando la línea: //server.UseDefaultCredentials = false; ¡Parece haber hecho el truco! Gracias – Vlince

3

puede probar esta muestra

 private void Button1_Click(System.Object sender, System.EventArgs e) 
    { 
     try 
     { 
      MailMessage myMessage = new MailMessage(); 
      SmtpClient myClient = new SmtpClient("yourserver"); 
      myClient.Port = "587"; 
      myClient.Host = "your server"; 
      myClient.UseDefaultCredentials = false; 
      myClient.Credentials = new System.Net.NetworkCredential("username", "password"); 


      myMessage.From = new MailAddress("sender"); 
      myMessage.To.Add("recipient"); 
      myMessage.Subject = "Subject email"; 
      myMessage.Body = "body email"; 
      myClient.EnableSsl = true; 
      myClient.Send(myMessage); 
     } 

     catch (Exepiton ex) 
     { 
      MessageBox.Show(ex.Message.ToString()); 
     } 
    } 

adiós

+0

Comentando la línea: //server.UseDefaultCredentials = false; ¡Parece haber hecho el truco! Gracias – Vlince

Cuestiones relacionadas