2012-10-08 32 views
7

Estoy intentando enviar un correo electrónico a través de SMTP Gmail en C# utilizando el código de abajoEnviar correo electrónico a través de SMTP Gmail

MailMessage message = new MailMessage(); 
message.To.Add("my email"); 
message.Subject = "subject"; 
message.From = new MailAddress("any email"); 
message.Body = "body"; 

message.Attachments.Add(new System.Net.Mail.Attachment(path)); 
SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); 
smtp.EnableSsl = true; 
smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 
smtp.UseDefaultCredentials = false; 
smtp.Credentials = new System.Net.NetworkCredential("my user", "my pass"); 

smtp.Send(message); 

Cuando recibo el correo electrónico, el campo DE está lleno de my user. Estoy usando UseDefaultCredentials como false. Cuando miro el resultado, el campo FROM se rellena con my user. ¿No debería el campo FROM llenarse con any email? ¿Cómo puedo enviar un correo electrónico usando any email como remitente?

+1

Creo que esta es una forma de que GMail controle el uso de su servicio SMTP. Si alguien pudiera enviar correos a otra persona a través de GMail, los spammers se congregarían allí. De esta manera todos los correos electrónicos enviados 'en su nombre' provienen de usted (= 'mi usuario') – n8wrl

+0

¡Ya lo hice en un programa JAVA ... hace muchos años! :( – Victor

+0

¿Tuvo la oportunidad de verificar el origen completo del correo electrónico que está recibiendo? Debería tener "De: cualquier correo electrónico" y "Remitente: mi usuario en su lugar". La aplicación con la que está viendo el correo electrónico puede presentar al Remitente como si fue From, y causa la confusión. –

Respuesta

4

haber corrido el fragmento de código me sale:

Return-Path: <my user> 
Received: from Psi ([80.92.234.64]) 
     by mx.google.com with ESMTPS id f1sm20531634wiy.2.2012.10.08.10.07.49 
     (version=TLSv1/SSLv3 cipher=OTHER); 
     Mon, 08 Oct 2012 10:07:49 -0700 (PDT) 
Message-ID: <[email protected]> 
Sender: Roman R. <my user> 
MIME-Version: 1.0 
From: any email 
To: my email 
Date: Mon, 08 Oct 2012 10:07:49 -0700 (PDT) 
Subject: Subject 
Content-Type: text/plain; charset=us-ascii 
Content-Transfer-Encoding: quoted-printable 

Body 

Sender es la dirección de correo electrónico utilizada para autenticarse con el correo de Google. From es el "de" proporcionado en el código. La aplicación receptora puede confundir a los dos, y el resto se ve como se esperaba. Algunos clientes de correo presentan From + Sender (cuando son diferentes) como "enviado por el remitente en nombre de From".

Puede que le preocupe el hecho de que Google Mail aún revele la cuenta desde la que se envía el correo electrónico, a través del campo Sender, pero así es como funciona. Usted envía desde esta cuenta.

Y, otra posible razón es la dirección de correo From. Si lo agregó a su cuenta de Google Mail como una de sus propias direcciones (y se confirma mediante un correo electrónico de prueba con un enlace), entonces Google Mail permitirá colocarlo en el campo From. De lo contrario, podría soltarlo y reemplazarlo con el Sender.

+0

Configuración de 'gmail' Hay una configuración para cambiar el campo' FROM'. Es una mejor solución, se hace más profesional. Es mejor recibir un correo electrónico de 'support @ my .company.com' que 'support.my.company @ gmail.com' – Victor

+1

Este fue mi punto en el último párrafo. Si agregó su dirección de correo electrónico como su propia dirección alternativa en GMail, puede colocarla en el campo' De' en C# también. De lo contrario, podría descartarse, y en GMail no se puede poner nada en "De", también se elige solo de la lista de direcciones confirmadas.Como puede ver en mi correo electrónico citado en la respuesta, GMail puso correctamente Desde allí, porque "cualquier correo" era una de mis direcciones alternativas. –

5

Empleo el mismo para enviar correos electrónicos usando GMail como un servicio. Originalmente configuré la propiedad .From en "[email protected]" pero el correo electrónico aún llega con el encabezado De establecido en la cuenta utilizada para autenticarse.

Frente a este problema, que utiliza la propiedad ReplyToList (.ReplyToList.Add(MailAddress))) para que los receptores que responden al mensaje va a enviar la respuesta a una cuenta de correo electrónico que no sea el "automático" que utilizamos para enviar los mensajes salientes.

Editar:

Para obtener más información, consulte this thread on Google Groups. Además, a related answer on Stack Overflow.

Cuestiones relacionadas