2009-04-16 30 views
62

Tengo una cuenta estándar de Google Apps. Configuré un dominio personalizado a través de Google Apps. Puedo enviar y recibir correos electrónicos exitosamente a través de Google Apps cuando uso la interfaz de Gmail. Sin embargo, quiero enviar un correo electrónico a través del código. Con el fin de intentar esto, he estado tratando el siguiente código:Enviar correo electrónico a través de C# a través de la cuenta de Google Apps

MailMessage mailMessage = new MailMessage(); 
mailMessage.To.Add("[email protected]"); 
mailMessage.Subject = "Test"; 
mailMessage.Body = "<html><body>This is a test</body></html>"; 
mailMessage.IsBodyHtml = true; 

// Create the credentials to login to the gmail account associated with my custom domain 
string sendEmailsFrom = "[email protected]";    
string sendEmailsFromPassword = "password"; 
NetworkCredential cred = new NetworkCredential(sendEmailsFrom, sendEmailsFromPassword); 

SmtpClient mailClient = new SmtpClient("smtp.gmail.com", 587); 
mailClient.EnableSsl = true; 
mailClient.DeliveryMethod = SmtpDeliveryMethod.Network; 
mailClient.UseDefaultCredentials = false; 
mailClient.Timeout = 20000; 
mailClient.Credentials = cred; 
mailClient.Send(mailMessage); 

Cuando se alcanza el método Send, se produce una excepción que los estados:

"El servidor SMTP requiere una conexión segura o el cliente no estaba autenticado . La respuesta del servidor fue: 5.5.1 Autenticación requerida. "

¿Cómo envío correos electrónicos a través de mi dominio personalizado a través de Google?

Gracias!

+0

¿Funciona el puerto 465 mejor tal vez? – Lucero

+0

¿Cuál es el problema con el código anterior? – Marko

+1

Recibo un problema de tiempo de espera, pero al ver todos los códigos básicos, parece que el código y la configuración son correctos. –

Respuesta

90

No hay necesidad de codificar todas las configuraciones de smtp en su código. Póngalos en web.config en su lugar. De esta forma, puede encriptar estas configuraciones si es necesario y cambiarlas sobre la marcha sin volver a compilar su aplicación.

<configuration> 
    <system.net> 
    <mailSettings> 
     <smtp from="[email protected]" deliveryMethod="Network"> 
      <network host="smtp.gmail.com" port="587" 
       userName="[email protected]" password="password"/> 
     </smtp> 
    </mailSettings> 
    </system.net> 
</configuration> 

final cuando se envía correo electrónico acaba de habilitar SSL en su SmtpClient:

var message = new MailMessage("[email protected]"); 
// here is an important part: 
message.From = new MailAddress("[email protected]", "Mailer"); 
// it's superfluous part here since from address is defined in .config file 
// in my example. But since you don't use .config file, you will need it. 

var client = new SmtpClient(); 
client.EnableSsl = true; 
client.Send(message); 

Asegúrese de que usted está enviando correo electrónico desde la misma dirección de correo electrónico con el que está tratando de autenticar a Gmail.

Nota: A partir de .NET 4.0 puede insertar enableSsl = "true" en web.config en lugar de configurarlo en el código.

+1

el webconfig completo está en y debe ser

+0

También puede poner el enableSsl en la configuración. –

+1

@Shay: ¿cómo puedes habilitarSSL en la configuración? –

3

cambiar el puerto a 465

7

Esto es lo que yo uso en WPF 4

SmtpClient client = new SmtpClient(); 
client.Credentials = new NetworkCredential("[email protected]", "[email protected]$$w0rD"); 
client.Port = 587; 
client.Host = "smtp.gmail.com"; 
client.EnableSsl = true; 

try { 
    MailAddress 
     maFrom = new MailAddress("[email protected]", "Sender's Name", Encoding.UTF8), 
     maTo = new MailAddress("[email protected]", "Recipient's Name", Encoding.UTF8); 
    MailMessage mmsg = new MailMessage(maFrom.Address, maTo.Address); 
    mmsg.Body = "<html><body><h1>Some HTML Text for Test as BODY</h1></body></html>"; 
    mmsg.BodyEncoding = Encoding.UTF8; 
    mmsg.IsBodyHtml = true; 
    mmsg.Subject = "Some Other Text as Subject"; 
    mmsg.SubjectEncoding = Encoding.UTF8; 

    client.Send(mmsg); 
    MessageBox.Show("Done"); 
} catch (Exception ex) { 
    MessageBox.Show(ex.ToString(), ex.Message); 
    //throw; 
} 

reloj de cortafuegos y anti-virus. Estas cosas escalofriantes tienden a bloquear las aplicaciones que envían correos electrónicos. Uso McAfee Enterprise y tengo que agregar el nombre del ejecutable (como Bazar. * Para Bazar.exe y Bazar.vshost.exe) para poder enviar correos electrónicos ...

+0

Gracias por mostrar cómo hacerlo en código solo :-) –

+0

Quiero hacer una página "contáctenos" para que los usuarios envíen correos electrónicos a site-admin. ¿Hay alguna manera de establecer "De" a su dirección de correo electrónico? – Shimmy

+0

Puede falsificar la dirección del remitente; pero existe un buen riesgo de que su correo electrónico se marque como correo no deseado. Le sugiero que envíe un correo electrónico de [email protected] tanto al administrador como a la persona que intenta contactarlo. Entonces su administrador puede enviar una respuesta a todos. – Achilles

3

No hay necesidad de hacer nada . Simplemente inicie sesión en su cuenta actual por primera vez y siga las instrucciones.

Su problema se resolverá. Ocurre porque creó la cuenta en las aplicaciones de Google pero no inició sesión. Simplemente inicie sesión y siga las instrucciones y pruebe.

+0

Dado que el código OP parece estar bien, este puede haber sido el problema. – Dermot

0

Mi código está conectando a smtp.google.com usando TLS en Puerto = 587 (SSL debe ser el puerto 465), pero todavía necesita EnableSSL = true Aviso

SmtpClient smtp = new SmtpClient(); 
smtp.Host = "smtp.gmail.com"; 
smtp.Port = 587; 
smtp.EnableSsl = true; 
smtp.UseDefaultCredentials = false; 
NetworkCredential credentials = new NetworkCredential(); 
credentials.UserName = "INSERT EMAIL"; 
credentials.Password = "INSERT PASSWORD"; 
smtp.Credentials = credentials; 

MailAddress addressFrom = new MailAddress(credentials.UserName); 
MailAddress addressTo = new MailAddress("INSERT RECIPIENT"); 
MailMessage msg = new MailMessage(addressFrom, addressTo); 
msg.Subject = "SUBJECT" 
msg.Body = "BODY"; 

smtp.Send(msg); 

estos requisitos importantes en su cuenta SUITE G

Cuestiones relacionadas