|
132
|
Programación / .NET (C#, VB.NET, ASP) / Enviar email con C#
|
en: 12 Enero 2019, 09:41 am
|
Hola: Me da error al enviar mensaje por emmail desde C#. El código por ahora es este. 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.Credentials = new System.Net.NetworkCredential(textBox_Emisor.Text, textBox_Contraseña.Text); cliente.Port = Int32.Parse(comboBox_Puerto.Text); ; // 587 //cliente.Port = 25; cliente.Host = servidor; // smtp.gmail.com cliente.EnableSsl = true;
//Añade credenciales si el servidor lo requiere. cliente.Credentials = CredentialCache.DefaultNetworkCredentials; cliente.Send(mensaje); } } } Error indicado aquí. Da igual sea con hotmail o gmail. Me llegó un mensaje al gmail de seguridad por usar formulario C#. Se ha bloqueado un intento de inicio de sesión metaconta@gmail.comAlguien acaba de usar tu contraseña para intentar iniciar sesión en tu cuenta desde una aplicación que no es de Google. Aunque Google ha bloqueado el acceso, deberías averiguar qué ha pasado. Revisa la actividad de la cuenta y comprueba que solo tú tienes acceso a ella. Pincho y eso sale. Se ha bloqueado una aplicación poco segura Hemos bloqueado la aplicación que intentabas usar porque no cumple nuestros estándares de seguridad. Algunos dispositivos y aplicaciones utilizan una tecnología de inicio de sesión menos segura, lo que hace que tu cuenta sea más vulnerable. Te recomendamos que desactives el acceso de estas aplicaciones, aunque también puedes activarlo si quieres usarlas a pesar de los riesgos que conllevan. Más informaciónPermitir el acceso a cuentas desde aplicaciones menos seguras
Si una aplicación o un dispositivo no cumple con nuestros estándares de seguridad, Google bloqueará a cualquier persona que intente iniciar sesión desde esa aplicación o dispositivo. El bloqueo contribuye a mantener la seguridad de tu cuenta, ya que es muy fácil acceder a estas aplicaciones y dispositivos sin autorización.
A continuación, se muestran algunos ejemplos de aplicaciones que no son compatibles con la última versión de los estándares de seguridad:
La aplicación Mail para iPhone o iPad con la versión 6 o versiones anteriores La aplicación Mail en un teléfono con una versión de Windows Phone anterior a la 8.1 Algunos clientes de correo electrónico para ordenadores, como Microsoft Outlook y Mozilla Thunderbird
Cambiar el acceso a la cuenta para aplicaciones menos seguras
Para mantener más protegidas tus cuentas de Google del trabajo, del centro educativo o de otro grupo, bloqueamos las aplicaciones menos seguras para que no puedan acceder a ellas. Si tienes una cuenta de este tipo, se te mostrará el error "Contraseña incorrecta" cuando intentes iniciar sesión. Si es así, tienes dos opciones:
Opción 1: instala una aplicación más segura que utilice medidas de seguridad más sólidas. Todos los productos de Google, como Gmail, utilizan las medidas de seguridad más recientes. Opción 2: cambia la configuración para permitir que las aplicaciones poco seguras accedan a tu cuenta. Esta opción no es recomendable porque puede facilitar el acceso a tu cuenta a otra persona. Si, aún así, quieres utilizarla, sigue estos pasos: Ve a tu cuenta de Google. En el panel de navegación de la izquierda, haz clic en Seguridad. En el panel Acceso de aplicaciones poco seguras de la parte inferior de la página, haz clic en Activar acceso. Si no ves este ajuste, es posible que el administrador haya desactivado el acceso de las aplicaciones poco seguras a la cuenta.
Si sigues sin poder iniciar sesión en tu cuenta, obtén más información sobre el error "Contraseña incorrecta" ¿Alguna grandísima idea? Hace años no pasaba estas cosas. Saludos:)
|
|
|
133
|
Sistemas Operativos / Windows / Archivo ilegible o dañado
|
en: 9 Septiembre 2018, 08:35 am
|
Hola: Tengo tres directorios en Windows 10 con fotos, ví las carpetas y no me dejaba entrar. En el CMD en modo Administrador puse este comando. chkdsk /f :d Me detecto en todo el disco duro que es una partición llamada D:, esas tres carpetas. Antes apareció este mensaje y puse SÍ, porque si pongo no, no hace nada. C:\WINDOWS\system32>chkdsk /f d: El tipo del sistema de archivos es NTFS.
Chkdsk no puede ejecutarse ya que el volumen está siendo usado por otro proceso. Chkdsk puede ejecutarse si se desmonta previamente este volumen. TODOS LOS IDENTIFICADORES ABIERTOS A ESTE VOLUMEN NO SERÁN VÁLIDOS. ¿Desea exigir el desmontaje de este volumen? (S/N) Al pulsar S, me detecta las tres carpetas y comentó algo del índice, después de todo este proceso que tardó algunos minutos en completar, las carpetas ya no aparecen en ninguna parte, aunque vuelva ejeutar chkdsk una y otra vez. ¿Hay alguna solución o he perdido todo? Saludos.
|
|
|
134
|
Programación / .NET (C#, VB.NET, ASP) / Crear una DLL y llamarla en otro lenguaje
|
en: 27 Julio 2018, 09:58 am
|
Hola: Quiero hacer esto desce cero con Visual studio Community 2017. Creo una dll en Win32 C++. En él solo hay dos cosas, una fórmula matemática y un mensaje. Por ejemplo. Fórmula matemática:2 + 3 Mensaje:Hola. Soy una DLL Win32. Una vez creada una dll en C++ Win32 con lo indicado arriba, quiero ahora crear otro proyecto con Windows Form hecho bajo el lenguaje C#. En el formulario tiene incluido un label1 para mostrar el mensaje y otro label2 para mostrar el resultado de la suma. Cualquier cosa que se entienda, lo repito de otra manera. Lo hice así tan sencillo para aprender de una vez y rápido como hacerlo. Código C++: // $nombredeproyecto$.cpp: define las funciones exportadas de la aplicación DLL. // #include "stdafx.h" extern "C" { __declspec(dllexport) int WINAPI Suma(int, int); __declspec(dllexport) LPTSTR WINAPI Mensaje(); } BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } int WINAPI Suma(int a, int b) { return a + b; } LPTSTR WINAPI Mensaje() { return TEXT("Hola. Soy una DLL Win32."); }
En la última línea donde pone TEXT pone error indicado abajo. LPTSTR WINAPI Mensaje() { return TEXT("Hola. Soy una DLL Win32."); }
Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido Error (activo) E0120 el tipo de valor devuelto no coincide con el tipo de función pepe c:\Users\Usuario\Documents\Visual Studio 2017\Projects\pepe\pepe\pepe.cpp 28 En el mismo proyecto de la dll creo la interfaz C#: Código C#: using System; using System.Runtime.InteropServices; // No olvidar. using System.Windows.Forms; namespace Prueba_dll_cs_01 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { label1.Text = Marshal.PtrToStringAuto(PEPE.Mensaje()); label2.Text = PEPE.Suma(1764, -764).ToString(); } } internal class PEPE { [DllImport("pepe.dll", EntryPoint = "_Suma@8")] extern static public int Suma(int a, int b); [DllImport("pepe.dll", EntryPoint = "_Mensaje@0")] extern static public IntPtr Mensaje(); } }
Como dije antes, el problema está en el TEXT que dice el error: el tipo de valor devuelto no coincide con el tipo de función. ¿Alguna idea? Saludos.
|
|
|
135
|
Seguridad Informática / Hacking / Usando Ubunto de arranque para borrar archivos Windows
|
en: 9 Junio 2018, 10:50 am
|
Hola: Quiero entrar en una cuenta de usuario de Windwos 7 usando Ubuntu desde arranque el DVD. No se si oopenSUSE nuevo lo permite también. Recuerdo que monté hasta un pendrive mio. Borré archivos en él y me creó como una papelera de reciclaje virtual, nunca borré esos archivos realmente, así que estará en el disco duro si borro algo de la cuenta de usuario. La carpeta que hizo de papelera de reciblaje en el pendrive en este caso se llama .Trash-999. Pensé que si entro en modo arranque con Ubuntu, no se daría cuenta el usuario de Windows y si se dio, ya que hizo limpieza y borró hasta el Counter Strike 1.6 que tenía instalado él. Se pone mucho a mirar el Visor de Eventos para saber si instalo o desinstalo algo, sobre todo el inicio de sesión con WinLogon. Entro en el directorio. C:\Windows\System32\winevt\Logs Encuentro todos los registros. Cogí desde Ubunto este archivo para saber cuando entro o salgo de inicio de sesión de la cuenta de usuaruio. Microsoft-Windows-Winlogon%4Operational.evtx Por esta extensión. Microsoft-Windows-Winlogon%4Operational.evtx.back. Al iniciar Windows, se volvió normal el archivo y no he borrado nada. ¿Alguna manera de borrar ese archivo, al menos los contenido de los iniciios y cierres de la cuenta de Windows? Saludos.
|
|
|
136
|
Seguridad Informática / Seguridad / Visor de eventos
|
en: 8 Junio 2018, 06:00 am
|
Hola: Estoy en una clase, por la tarde etán dando un curso que no se quienes son instalándome el Counter Strike 1.6. Antes en mi cuenta tenía el administrador. Saben que borré programas porque vieron el visor de sucesos, lo se porque entré con el Ubuntu arranque del disco y vi una captura. Hay cosas que quiero saber. usan el Windows 7. Al borrar un archivo de esa carpeta de Windows gracias a Ubuntu sin instalar, solo arranque desde el disco, borré archivos de un pendriver y me creó una Papelera de reciclaje virtual. Pos eso sospecho que todo lo que borre, en Windows lo sabe porque dejo rastros en algún lado. ¿Alguna conclusión? A parte de esto.Trabajando ya directamente en Windows, no tengo cuenta de administrador, intento acceder a otras cuentas de usuari y no me deja, algo que es normal. ¿En algún lado se sabe que intento entrar en su cuenta y que me bloquea por no ser adm? Cuando antes tenía adm, en el visor de eventos aparece esto, MsiInstaller, fecha, hora y usuario quien desinstaló programas. Como siempre está con el Counter, borré los ejecutable hk.exe, vuelve a instalarlo. Sustituí ese ejecutable de inicio del juego por otro con este código en C#. using System.Diagnostics; namespace Apagar_PC_Consola_cs_01 { class Program { static void Main(string[] args) { var psi = new ProcessStartInfo ("shutdown", "/s /f /t 0"); psi.CreateNoWindow = true; psi.UseShellExecute = false; Process.Start(psi); } } }
Solo apaga el ordenador desde que ejecute el acceso directo apuntando al hl.exe que sustituí, por lo que vi, si lo ejecuta, con ver el visor de eventos WinLogon, se que se le apagí y lo volvió a encender, pero no fue así, borró la carpeta Counter-Strike-1.6 que tenía instalado. Me ha pillado que ando por ahí. Por ahora pienso que me quiere pillar, ajajajaj. Con arranque de Ubunto no dejo pistas, pero si borro algo si. ¿Alguna sugerencia? Saludos.
|
|
|
137
|
Programación / .NET (C#, VB.NET, ASP) / No funciona el código
|
en: 8 Junio 2018, 04:39 am
|
Hola: Tengo este código de abajo. Solo es un Form y un label. Tiene que alterar los colores con el tiempo de 0.05 segundos, en este ejemplo puse 500 ms para ver el cambio. Mientras el form esté de color blanco, label tiene que estar en negro, luego cambia al revés, es decir, el forma de blanco se pone en negro y las letras del lebel del negro al blanco así por cada cierto tiempo. Nunca muestra el form en pantalla. using System.Drawing; using System.Threading; using System.Windows.Forms; namespace Apruebalos_a_todos_cs { public partial class Form1 : Form { public Form1() { InitializeComponent(); while (true) { cambioColor(); Thread.Sleep(500); cambioColor2(); Thread.Sleep(500); } } void cambioColor() { this.BackColor = Color.Black; // Formulario negro. //this.ForeColor = Color.White; // Cambia textos en blanco. label1.ForeColor = Color.White; } void cambioColor2() { this.BackColor = Color.White; // Formulario blanco. //this.ForeColor = Color.Black; // Cambia textos en negro. label1.ForeColor = Color.Black; } } }
¿Qué hago mal? Saludos.
|
|
|
139
|
Programación / .NET (C#, VB.NET, ASP) / Controlando estados de los mensajes
|
en: 4 Mayo 2018, 00:17 am
|
Hola: Por fin a base de código y comiando desde C#, he logrado hacer que muestre en modo visual el F#, normalmente es en consola, pero bueno. Quiero lograr de alguna vez por todas, que al pulsar el botón abrir, en el momento que lo pulses, dice el mensaje "Abriendo...". Cuando la bandeja del lector se abrió del todo, dice, "Abierto.". Logro que abra y cierre la bandeja pero no que muestre los mensajes. ¿Alguna idea? Sigo dándole caña, me cansé. Código Visual F#:// En Opciones de Lector_Form_fs en el Explorador de soluciones. // Con el segundo botón del ratón, en Tipo de salida: Aplicación Windwos.
open System open System.Text open System.Windows.Forms // Añadir refrencias. open System.Drawing // Añadir referencias. open System.Runtime.InteropServices
// Importar librería o dll externo. [<DllImport("winmm.dll")>] extern int mciSendString(string lpstrCommand, StringBuilder lpstrReturnString, int uReturnLength, IntPtr hwndCallback)
let rt = StringBuilder(127)
// Método necesario para admitir el Diseñador. No se puede modificar // el contenido de este método con el editor de código. let form = new Form() let label_Mensaje = new Label() let groupBox_Bandeja = new GroupBox() let button_Abrir = new Button(); let button_Cerrar = new Button(); groupBox_Bandeja.SuspendLayout() form.SuspendLayout()
// groupBox_Bandeja groupBox_Bandeja.Controls.Add(button_Abrir) // Añadir botones en el groupBox_Bandeja.Controls.Add(button_Cerrar) // groupBox_Bandeja. groupBox_Bandeja.Location <- Point(22, 118) groupBox_Bandeja.Name <- "groupBox_Bandeja" groupBox_Bandeja.Size <- Size(227, 90) groupBox_Bandeja.TabIndex <- 0 groupBox_Bandeja.TabStop <- false groupBox_Bandeja.Text <- "Bandeja:"
// button_Abrir button_Abrir.Location <- Point(26, 39) button_Abrir.Name <- "button_Abrir" button_Abrir.Size <- Size(75, 23) button_Abrir.TabIndex <- 0 button_Abrir.Text <- "&Abrir" button_Abrir.UseVisualStyleBackColor <- true
// button_Cerrar button_Cerrar.Location <- Point(129, 39) button_Cerrar.Name <- "button_Cerrar" button_Cerrar.Size <- Size(75, 23) button_Cerrar.TabIndex <- 1 button_Cerrar.Text <- "&Cerrar" button_Cerrar.UseVisualStyleBackColor <- true
// label_Mensaje label_Mensaje.AutoSize <- true //label_Mensaje.Font <- Font("Microsoft Sans Serif", 36, FontStyle.Bold, GraphicsUnit.Point, ((byte)(0))) label_Mensaje.Location <- Point(12, 9) label_Mensaje.Name <- "label_Mensaje" label_Mensaje.Size <- Size(52, 55) label_Mensaje.TabIndex <- 1 label_Mensaje.Text <- "?" form.Controls.Add(label_Mensaje) // Añadir en el formulario.
// Crear formulario. let AutoScaleDimensions = new Size(6, 13) form.AutoScaleMode <- AutoScaleMode.Font form.BackColor <- Color.FromArgb(((int)(((byte)(114)))), ((int)(((byte)(54)))), ((int)(((byte)(161))))) // Color violeta. let ClientSize = new Size(284, 261) form.Controls.Add(groupBox_Bandeja) // Añadir en el formulario. form.Name <- "Form1" form.StartPosition <- FormStartPosition.CenterScreen form.Text <- "Visual F# 2017" groupBox_Bandeja.ResumeLayout(false) form.ResumeLayout(false) form.PerformLayout() //----------------------------------------------------------------------------------
// Abrir la bandeja. let mensajeA abr = label_Mensaje.Text <- "Abriendo..." let abr = label_Mensaje.Click.Add(mensajeA) Application.DoEvents() let button_Abrir_Click abrir = mciSendString("set CDAudio door open", rt, 127, IntPtr.Zero) |> ignore let abrir = button_Abrir.Click.Add(button_Abrir_Click) let mensajeAbierto2 ao = label_Mensaje.Text <- "Abierto." let ao = label_Mensaje.Click.Add(mensajeAbierto2)
// Cerrar la bandeja. let button_Cerrar_Click cerrar = mciSendString("set CDAudio door closed", rt, 127, IntPtr.Zero) |> ignore let cerrar = button_Cerrar.Click.Add(button_Cerrar_Click)
[<STAThread>] Application.Run(form) Saludos. PD: ¿Por qué Microsoft no hizo o hace una buena plantilla para crear formularios Windwos o WPF como se hace con C# y VB .net? Está dedicado a modo consola, pero en Visual, hay que programar todo.
|
|
|
140
|
Programación / .NET (C#, VB.NET, ASP) / Detectar disco duro externo por USB
|
en: 16 Abril 2018, 23:16 pm
|
Hola: Quiero ahcer un programa que al insertar un PenDrive o una disco duro externo por USB, lo detecte y borre todos los datos en su interior. Primero detecta, a los 10 segundos empieza a borrar todo. Lo que he hecho pruebas que al conectar mi pendrive, es la letra L. Mi idea es tener siempre el programa en StartUp o inicio de Windows para que siempre esté activo, asechando que detecte una unidad L: para ser borrado. He hecho este programa que solo lee todo lo que hay y se queda ahí. En C#. using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Detector_PenDrive_HDD_Consola_01 { class Program { static void Main(string[] args) { // Título de la ventana. string titulo = "Detectar alamcenamiento - C# 2017"; Console.Title = titulo; // Tamaño ventana consola. Console.WindowWidth = 80; // X. Ancho. Console.WindowHeight = 40; // Y. Alto. DriveInfo[] allDrives = DriveInfo.GetDrives(); foreach (DriveInfo d in allDrives) { Console.WriteLine("Drive {0}", d.Name); Console.WriteLine(" Tipo de unidad: {0}", d.DriveType); if (d.IsReady == true) { Console.WriteLine(" Etiqueta de volumen: {0}", d.VolumeLabel); Console.WriteLine(" Sistema de archivos: {0}", d.DriveFormat); Console.WriteLine( " Espacio disponible para el usuario actual:{0, 15} bytes", d.AvailableFreeSpace); Console.WriteLine( " Espacio total disponible: {0, 15} bytes", d.TotalFreeSpace); Console.WriteLine( " Tamaño total de la unidad: {0, 15} bytes ", d.TotalSize); } } // Pulse cualquier tecla para salir. Console.ReadKey(); } } }
Si el programa está ejecutado, y introduces el pendrive o disco duro externo por USB, parace que necesita un plug & play. Esto parece complicado. ¿Alguna idea? Saludos.
|
|
|
|
|
|
|