Autor
|
Tema: Enviar email con C# (Leído 8,833 veces)
|
kub0x
Enlightenment Seeker
Moderador
Desconectado
Mensajes: 1.486
S3C M4NI4C
|
Veo que estás utilizando las DefaultCredentials después de instanciar NetworkCredentials con tus credenciales. Quita toda referencia a las DefaultCredentials y deja el UseDefaultCredentials en false. Por algún motivo (creo) que estás enviando la auth equivocada.
|
|
« Última modificación: 13 Enero 2019, 01:58 am por kub0x »
|
En línea
|
|
|
|
Meta
|
Pues así a bote pronto no se me ocurre nada :/
PD: Espero que lo que has dejado en tu anterior post no sea la verdadera contraseña de tu Gmail, por si acaso algún moderador caritativo que lo edite
Lo puse falso la contraseña. Gracias de todas formas. @Eleкtro (sin pilas) Pinché el enlace que pusiste, aún persiste el problema. Otra cosa, no me quiero entrometer mucho, pero el 2FA(doble factor de autenticacion de gmail) quizás deba tenerlo también desactivado para descartar.
No se nada de ese tema y como hacerlo. Veo que estás utilizando las DefaultCredentials después de instanciar NetworkCredentials con tus credenciales. Quita toda referencia a las DefaultCredentials y deja el UseDefaultCredentials en false. Por algún momento (creo) que estás enviando la auth equivocada.
Si te refieres esta parte del código. cliente.Credentials = CredentialCache.DefaultNetworkCredentials;
No se puede poner más nada. Si no es lo que te digo, entonces no se a que te refieres. No sabía que fuese tan pesado enviar correos con C#. Saludos. Edito: Me está funcionando el código en modo consola, no en Windows Form. using System; using System.Text; using System.Net.Mail; // No olvidar. namespace Enviar_e_mail_Consola_02_cs { class Program { static void Main(string[] args) { SendMail(); } public static Boolean SendMail() { // Título de la ventana. Console.Title = "Enviar e-mail con Consola C#"; // Tamaño ventana consola. Console.WindowWidth = 100; // X. Ancho. Console.WindowHeight = 40; // Y. Alto. try { string email = "metaconta@gmail.com"; //Configuración del Mensaje MailMessage mail = new MailMessage (); SmtpClient SmtpServer = new SmtpClient ("smtp.gmail.com"); //Especificamos el correo desde el que se enviará el Email y el nombre de la persona que lo envía mail .From = new MailAddress (email, "Meta", Encoding .UTF8); //Aquí ponemos el asunto del correo mail.Subject = "Prueba de Envío de Correo"; //Aquí ponemos el mensaje que incluirá el correo mail.Body = "Prueba de Envío de Correo de Gmail desde C#..............."; //Especificamos a quien enviaremos el Email, no es necesario que sea Gmail, puede ser cualquier otro proveedor mail.To.Add(email); //Si queremos enviar archivos adjuntos tenemos que especificar la ruta en donde se encuentran //mail.Attachments.Add(new Attachment(@"C:\Documentos\carta.docx")); //Configuracion del SMTP SmtpServer.Port = 587; //Puerto que utiliza Gmail para sus servicios //Especificamos las credenciales con las que enviaremos el mail SmtpServer .Credentials = new System.Net.NetworkCredential(email, "password"); SmtpServer.EnableSsl = true; SmtpServer.Send(mail); Console.WriteLine("Mensaje enviado."); Console.ReadKey(); return true; } catch (Exception ex) { Console.WriteLine("ERROR: Mensaje no enviado."); Console.ReadKey(); return false; } } } }
|
|
« Última modificación: 13 Enero 2019, 00:43 am por Meta »
|
En línea
|
|
|
|
kub0x
Enlightenment Seeker
Moderador
Desconectado
Mensajes: 1.486
S3C M4NI4C
|
Pues parece que me has entendido porque lo que quería transmitirte es que estabas suprimiendo tus credenciales con las credenciales de red en caché. Ahora tus credenciales si están siendo enviadas. No está de más que evalues línea a línea el porque del código ajeno.
Saludos.
|
|
|
En línea
|
|
|
|
Meta
|
Si no te llegara a entender, choco con la pared. Es importante el enlace que nos proporcinó nuestro compañero. https://myaccount.google.com/lesssecureappsNos dio el enlace directamente, no se que paso hay que darle para llegar a él. Ahora si funciona con Windows Form. using System; using System.Windows.Forms; using System.Net; // No olvidar. using System.Net.Mail; // No olvidar. namespace Enviar_e_mail_01_cs { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button_Enviar_Click(object sender, EventArgs e) { // La cadena "servidor" es el servidor de correo que enviará tu mensaje. string servidor = comboBox_smtp.SelectedItem.ToString(); // smtp.gmail.com // Crea el mensaje estableciendo quién lo manda y quién lo recibe. MailMessage mensaje = new MailMessage ( textBox_Emisor.Text, textBox_Receptor.Text, textBox_Asunto.Text, richTextBox_Mensaje.Text); // Envía el mensaje. SmtpClient cliente = new SmtpClient (servidor ); cliente.DeliveryMethod = SmtpDeliveryMethod.Network; cliente.UseDefaultCredentials = false; cliente.EnableSsl = true; cliente .Credentials = new NetworkCredential (textBox_Emisor .Text, textBox_Contraseña .Text); // usuario@gmail.com, Contraseña. cliente.Port = Int32.Parse(comboBox_Puerto.Text); ; // 587 cliente.Host = servidor; // smtp.gmail.com // Añade credenciales si el servidor lo requiere. //cliente.Credentials = CredentialCache.DefaultNetworkCredentials; cliente.Send(mensaje); } } }
Ahora me toca por mi parte, mejorar el código, hacer el programa más completo. Por fin funciona. Muchas gracias a todos. Edito: Me dio por curiosidad probarlo en modo consola y no funciona, el mismo problema y no se parece nada de los credenciales. Algo no lo veo. using System; using System.Net.Mail; using System.Text; using System.Net; namespace Enviar_e_mail_Consola_03_cs { class Program { static void Main(string[] args) { string usuario, contraseña, destinatario, asunto, mensaje; // Título de la ventana. Console.Title = "Enviar e-mail con Consola C#"; // Tamaño ventana consola. Console.WindowWidth = 100; // X. Ancho. Console.WindowHeight = 40; // Y. Alto. Console.WriteLine("\t\t----------------------------------------"); Console.WriteLine("\t\t\tEnviar Correo Electrónico"); Console.WriteLine("\t\t----------------------------------------"); Console.WriteLine("\n"); Console.Write("\t\tIngresa tu correo electrónico: "); usuario = Console.ReadLine(); Console.Write("\t\tIngresa tu password: "); contraseña = leerPassword(); Console.Write("\t\tDestinatario: "); destinatario = Console.ReadLine(); Console.Write("\t\tAsunto: "); asunto = Console.ReadLine(); Console.Write("\t\tMensaje: "); mensaje = Console.ReadLine(); MailMessage correo = new MailMessage (usuario, destinatario, asunto, mensaje ); SmtpClient servidor = new SmtpClient ("smtp.gmail.com"); servidor.Port = 587; NetworkCredential credenciales = new NetworkCredential (usuario, contraseña ); servidor.Credentials = credenciales; servidor.EnableSsl = true; try { Console.WriteLine("Enviando..."); servidor.Send(correo); Console.WriteLine("\t\tCorreo enviado de manera exitosa."); correo.Dispose(); Console.ReadKey(); } catch (Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine("\t\tNo se ha enviado nada."); Console.ReadKey(); } } // A la hora de introducir la contraseña, se sustituye por asterístos (*) en pantalla. public static string leerPassword() { ConsoleKeyInfo cki; StringBuilder sb = new StringBuilder (); do { cki = Console.ReadKey(true); if (cki.Key != ConsoleKey.Enter) { sb.Append(cki.Key); Console.Write("*"); } else break; } while (true); Console.WriteLine(); return sb.ToString(); } } }
Por mucho que compare el de Windows Form, no lo pillo. Saludos.
|
|
« Última modificación: 13 Enero 2019, 10:47 am por Meta »
|
En línea
|
|
|
|
warcry.
Desconectado
Mensajes: 1.004
|
a mi desde powershell si que me funciona, tanto si fuerzo el uso de TLS 1.2 $from = "micorreo@gmail.com" $to = "correodeprueba@hotmail.com" $subject = "peticion" $body = "Este es un correo de prueba
Un saludo ;)" $smtpserver = "smtp.gmail.com" $user= "micorreo@gmail.com" $passwd = ConvertTo-SecureString "miclave" -AsPlainText -Force $credenciales= New-Object System.Management.Automation.PSCredential ($user,$passwd)
foreach ($recipient in $to) { [System.Net.ServicePointManager]::SecurityProtocol = 'TLS12' write-host "Enviando mail a $to prúeba" Send-MailMessage -Encoding OEM -smtpServer $smtpserver -Port 587 -UseSsl -from $from -to $recipient -subject $subject -body $body -credential $credenciales } Como si no fuerzo el uso de TLS 1.2 $from = "micorreo@gmail.com" $to = "correodeprueba@hotmail.com" $subject = "petición" $body = "Este es un correo de prueba
Un saludo ;)" $smtpserver = "smtp.gmail.com" $user= "micorreo@gmail.com" $passwd = ConvertTo-SecureString "miclave" -AsPlainText -Force $credenciales= New-Object System.Management.Automation.PSCredential ($user,$passwd)
foreach ($recipient in $to) { write-host "Enviando mail a $to prúeba" Send-MailMessage -Encoding OEM -smtpServer $smtpserver -from $from -to $recipient -subject $subject -body $body -credential $credenciales -UseSsl } como has comentado tienes que activar el acceso a aplicaciones poco seguras https://myaccount.google.com/lesssecureappspero aun asi me estan friendo a sms diciendo que han bloqueado mi pc de sobremesa, pero los correos siguen funcionando. si lo haces con un hotmail en principio no tienes problemas de restricciones. el smtp de hotmail es smtp.live.com
|
|
|
En línea
|
HE SIDO BANEADO --- UN PLACER ---- SALUDOS
|
|
|
Meta
|
Hola: Es un puntazo hacer lo mismo con el PowerShell. Me alegro que lo hicieras. Quiero ver el código completo si no te importa.Estaba un tiempo con él y me moló. Lo único que he hecho con él hasta ahora son tonterías como abrir y cerrar la bandeja del disco DVD del lector, tanto en modo consola como modo visual. Eso si, hecho gracias por los compañeros de este foro poco a poco. Modo consola PowerShell $MemDef = @" [DllImport("winmm.dll", CharSet = CharSet.Ansi)] public static extern int mciSendStringA( string lpstrCommand, string lpstrReturnString, int uReturnLength, IntPtr hwndCallback); "@
$winnm = Add-Type -memberDefinition $MemDef -ErrorAction 'SilentlyContinue' -passthru -name mciSendString function Set-CDAudioDoor { Param( [ValidateSet("open", "closed")][String[]]$Mode = 'open' ) $winnm::mciSendStringA("set cdaudio door $mode", $null, 0,0)}
function mostrarMenu { param ([string]$Titulo = ' Control bandeja del lector ', [string]$PS = ' PowerShell ') cls Write-Host "╔====================================╗" Write-Host "║ $PS║" Write-Host "╠====================================╣" Write-Host "║ $Titulo ║" Write-Host "╠====================================╣" Write-Host "║ ║" Write-Host "║ A) Abrir. ║" Write-Host "║ C) Cerrar. ║" Write-Host "║ I) Información. ║" Write-Host "║ S) Presiona 'S' para salir. ║" Write-Host "║ ║" Write-Host "╚====================================╝" }
do { mostrarMenu $input = Read-Host " Elegir una Opción" switch ($input) { 'a' { cls 'Abriendo...' Set-CDAudioDoor open cls 'Abierto.' } 'c' { cls 'Cerrando...' Set-CDAudioDoor closed cls 'Cerrado.' } 'i' { cls 'PowerShell' '==========' Get-Host 'Electrónica PIC' '===============' '' 'e-mail: metaconta@gmail.com' '' #pause } 's' { return } } pause } until ($input -eq 's') Modo Visual en PowerShell. $Diskmaster = New-Object -ComObject IMAPI2.MsftDiscMaster2 $DiskRecorder = New-Object -ComObject IMAPI2.MsftDiscRecorder2 $DiskRecorder.InitializeDiscRecorder($DiskMaster)
function Set-CDAudioDoor { Param( [ValidateSet("open", "closed")][String[]]$mode ) if ($mode -eq 'open'){ $label_Mensaje.Text = "Abriendo..." $DiskRecorder.EjectMedia() $label_Mensaje.Text = "Abierto." } else { $label_Mensaje.Text = "Cerrando..." $DiskRecorder.CloseTray() $label_Mensaje.Text = "Cerrado." } }
# Cargo los Assemblies. (Necesario para definir el form). [void][reflection.assembly]::loadwithpartialname("System.Windows.Forms") [void][reflection.assembly]::loadwithpartialname("System.Drawing")
# Formulario. $Form = New-Object system.Windows.Forms.Form $Form.Text = "PowerShell 2017" $Form.Size = New-Object system.Drawing.Size(300, 300) $Form.FormBorderStyle = "FixedDialog" $Form.TopMost = $true $Form.MaximizeBox = $false $Form.MinimizeBox = $false $Form.ControlBox = $true $Form.StartPosition = "CenterScreen" $Form.Font = "Segoe UI"
# Botón abrir. $button_Abrir = New-Object system.windows.Forms.Button $button_Abrir.Text = "Abrir" $button_Abrir.Width = 75 $button_Abrir.Height = 23 $button_Abrir.location = new-object system.drawing.point(40, 150) $button_Abrir.Font = "Microsoft Sans Serif,10" $Form.controls.Add($button_Abrir)
# Botón cerrar. $button_Cerrar = New-Object system.windows.Forms.Button $button_Cerrar.Text = "Cerrar" $button_Cerrar.Width = 75 $button_Cerrar.Height = 23 $button_Cerrar.location = new-object system.drawing.point(174, 150) $button_Cerrar.Font = "Microsoft Sans Serif,10" $Form.controls.Add($button_Cerrar)
# Label. $label_Mensaje = New-Object system.windows.Forms.Label $label_Mensaje.Text = "?" $label_Mensaje.AutoSize = $true $label_Mensaje.location = new-object system.drawing.point(20,26) $label_Mensaje.Size = new-object system.drawing.point(54,10) $label_Mensaje.Font = "Microsoft Sans Serif, 36, style=Bold" $Form.controls.Add($label_Mensaje)
# Botón abrir bandeja. $button_Abrir.Add_Click({Set-CDAudioDoor open})
# Botón cerrar bandeja. $button_Cerrar.Add_Click({Set-CDAudioDoor closed})
[void]$Form.ShowDialog() $Form.Dispose() Fuera off-toppic. No me deja en hotmail, como está vinculado el gmail para la recuperación de cuentas, me salga el mismo mensaje de seguridad en la entrada de hotmail. Siempre pasa algo que no me deje.
|
|
|
En línea
|
|
|
|
warcry.
Desconectado
Mensajes: 1.004
|
Es un puntazo hacer lo mismo con el PowerShell. Me alegro que lo hicieras. Quiero ver el código completo si no te importa.
No estoy haciendo lo mismo, no tengo conocimientos de programación, algo en powershell, algo en bash y algo en batch, osea para hacer un script y poco mas. el código completo es el que tienes, lo haces en un txt y luego le cambias la extension por .ps1 y lo lanzas con boton derecho ejecutar con powershell, o editar si quieres modificar el texto y los adjuntos al que podrías añadir si quieres mandar un adjunto una variable que se llame por ejemplo $file con la dirección del archivo a remitir $file = "C:\Users\Warcry\Desktop\archivoadjunto.txt"
y en la linea de Send-MailMessage con el parametro -Attachments pasarle la variable del archivo. Send-MailMessage -smtpServer $smtpserver -from $from -to $recipient -subject $subject -body $body -Attachments $file -credential $credenciales -UseSsl para que te deje ejecutar script en powershell primero tienes que abrir la consola en modo administrador y luego introducir Set-ExecutionPolicy Unrestricted y dar "S" y enter
|
|
|
En línea
|
HE SIDO BANEADO --- UN PLACER ---- SALUDOS
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
enviar email
« 1 2 »
PHP
|
BriaNUR
|
10
|
9,420
|
8 Julio 2007, 05:43 am
por дٳŦ٭
|
|
|
Enviar Email (SOURCE)
Programación Visual Basic
|
ssccaann43 ©
|
5
|
2,780
|
15 Junio 2008, 11:29 am
por SKL (orignal)
|
|
|
Enviar SMS a través de email
Dispositivos Móviles (PDA's, Smartphones, Tablets)
|
despistado
|
2
|
5,903
|
1 Febrero 2011, 16:26 pm
por despistado
|
|
|
Enviar Log al Email
Análisis y Diseño de Malware
|
misterioy
|
1
|
3,094
|
2 Octubre 2011, 02:03 am
por skapunky
|
|
|
Enviar email
Scripting
|
lochapa
|
5
|
4,020
|
8 Diciembre 2013, 23:02 pm
por Eleкtro
|
|