miércoles, 3 de enero de 2018

pop vs imap diferencias ventajas e inconvenientes

IMAP y POP3: Diferencias, ventajas y desventajas

POP: Post Office Protocol (Protocolo de oficina de correos) es un protocolo de comunicación que se utiliza para obtener desde un programa de escritorio (Thunderbird, Outlook, Windows Mail, etc.) los mensajes de correo electrónico almacenados en un servidor remoto
IMAP: Internet Message Access Protocol (Protocolo de acceso a mensajes de internet), esto es, igualmente, un protocolo de comunicación que se utiliza para acceder a los mensajes electrónicos alojadas en un servidor remoto.
El protocolo IMAP, de forma predeterminada, permite al usuario conservar todos los mensajes en el servidor. Constantemente se sincroniza el programa de correo electrónico con el servidor, mostrando los mensajes que están presentes en la carpeta en cuestión. Todas las accionesrealizadas en los mensajes (leer, mover, eliminar…) se realizan directamente en el servidor.
El protocolo POP, por defecto, está configurado para descargar todos los mensajes del servidor de correo electrónico al ordenador desde el que se conecta. Esto significa que todas las acciones realizadas en los mensajes (leer, mover, borrar…) se realizarán en el propio ordenador. Al descargarse, por defecto, se eliminan los mensajes del servidor y, por ello, el usuario no podrá volver a ver los mensajes desde cualquier lugar que no sea el equipo en el que los mensajes han sido descargados.
En ambos casos, como ves, se habla de configuración por defecto (o predeterminada), por lo que deja ver que es una configuración que se puede cambiar. Así, con el protocolo IMAP se pueden descargar mensajes y conservarlos únicamente en nuestro PC (al menos con Thunderbird -no sé si otros clientes disponen de esta opción-, si se archiva el mensaje en una carpeta local en vez de archivarlos en una carpeta dependiente de tu cuenta IMAP) y el protocolo POP se puede configurar para que deje una copia de los mensajes en el servidor y que se borren una vez pasado un determinado periodo de tiempo (o que no se borren nunca).

IMAP (Internet Message Access Protocol)

La característica más significativa del protocolo IMAP es que los correos y bandejas no están en tu ordenador sino en el Servidor Cloud. Esto permite tener perfectamente sincronizados todos tus correos cuando normalmente lees los e-mails desde distintos ordenadores o dispositivos, o incluso desde Webmail, ya que en cualquiera de ellos aparecerán todos tus correos, lo que incluiría no sólo los correos de la bandeja de entrada sino también los del resto de bandejas.
La principal desventaja del protocolo IMAP es que es necesario disponer de conexión a Internet todo el tiempo para revisar los mensajes, además de que al quedar almacenados en el servidor, hay que ir revisando de vez en cuando el espacio utilizado por los correos para no sobrepasar el límite de capacidad del buzón en cuestión.
En cualquier caso, esta desventaja queda “corregida” al utilizar algunos programas de correo como Microsoft Outlook, ya que es posible activar la función “Autoarchivar” para evitar que se llene el buzón, ya que de forma automatizada irá borrando o almacenando en carpetas locales los correos más antiguos o caducados.

VENTAJAS

  • Comunicación bidireccional entre el servidor de correo y el cliente de correo electrónico, lo que permite que varios dispositivos trabajen con una misma cuenta viendo los cambios realizados por todos.
  • Los correos están en todo momento en el servidor, por lo que se puede acceder a ellos desde cualquier lugar, teniendo un dispositivo con acceso a internet.
  • En caso de una avería en el ordenador en el que esté configurado el buzón, o si por cualquier razón se elimina la cuenta, siempre es posible recuperar los correos.
  • Al no descargarse los correos directamente en el dispositivo que accede al servidor de correo, no consume espacio local.
  • Es posible gestionar carpetas locales y archivos desde el servidor.
  • Permite la búsqueda de mensajes por medio de palabras clave.

DESVENTAJAS

  • No es posible acceder a los correos sin acceso a internet.
  • En caso de hacer un uso intensivo del servicio de correo, es necesaria una gran cantidad de espacio de almacenamiento en el servidor.
  • Las carpetas que se hayan creado con IMAP no podrán ser leídas usando POP (la única excepción es la carpeta de la Bandeja de entrada).

POP3 (Post Office Protocol)

En el caso del protocolo POP3, el programa cliente de correo (Outlook, ThunderBird, Mail, etc) se conecta con el servidor y descarga todos los correos en el dispositivo en el que configures la cuenta. Esta es su principal ventaja, pues al descargar los correos, es posible leerlos incluso no estando conectado a Internet.
Como información adicional, comentar que POP3 es un protocolo que fue desarrollado cuando las conexiones a Internet eran sin tarifa plana, de modo que el objetivo era descargar el correo y desconectar enseguida y no tener que conectar cada vez que quisieras revisar el email.
Al descargar los mensajes del servidor cada vez que lees el correo, éstos se borran del servidor liberando espacio en el mismo, con lo cual hay menos posibilidades de que se llene el buzón, y no puedas recibir nuevos correos. No obstante, actualmente existe la opción de mantener copia de los mensajes en el servidor para poder sincronizar los mensajes entrantes para poder revisar el correo desde diferentes dispositivos.

VENTAJAS

  • Poder utilizar un cliente de correo para descargarlos en un dispositivo u ordenador, y poder leerlos posteriormente, aún sin tener conexión a internet.
  • No es necesario tener un gran espacio de almacenamiento en el servidor de correo, ya que al descargar los correos se borran del mismo.

DESVENTAJAS

  • Si el dispositivo donde están almacenados los correos descargados tiene una avería, es extraviado, o robado se pierden los correos.
  • Enviar un mensaje desde el cliente puede tardar el doble del tiempo.
  • Dependiendo del mensaje, puede consumir recursos del sistema.

miércoles, 29 de noviembre de 2017

PHPMailer ERROR:Password command failed: 534-5.7.14 Enviando con Gmail

En una de mis apps web. Estoy usando PHPMailer para enviar correos electrónicos desde PHP. Todo funciona correctamente usando una cuenta de correo propia de mi dominio, el problema está al configurar la cuenta de gmail como servidor SMTP.

Los datos que facilita GMAIL se pueden consultar aquí
  • Opciones: puerto 25, 465 o 587.
  • Protocolos SSL (capa de conexión segura) o TLS (seguridad en la capa de transporte).
  • Se requiere una o varias direcciones IP estáticas.
  • Puerto 465 (se requiere SSL).
  • Puerto 587 (se requiere TLS).
  • Se admiten IP dinámicas.
  • Puerto 25.
  • No se requiere TLS.
  • Se admiten IP dinámicas. 
  • Solo se pueden enviar correos a los usuarios de Gmail o G Suite.

Yo estoy usando: puerto: 587, seguridad: tls, host: smtp.gmail.com, y los datos de usuario y clave de mi cuenta.

Para determinar el error. Habilito a '1' la propiedad SMTPDebug que proporciona PHPMailer y al intentar enviar el correo devuelve el siguiente código:

2017-11-29 08:51:20 CLIENT -> SERVER: EHLO demo.albaibs.net
2017-11-29 08:51:20 CLIENT -> SERVER: STARTTLS
2017-11-29 08:51:20 CLIENT -> SERVER: EHLO demo.albaibs.net
2017-11-29 08:51:20 CLIENT -> SERVER: AUTH LOGIN
2017-11-29 08:51:20 CLIENT -> SERVER: YWxiYWlic21haWxAZ21haWwuY29t
2017-11-29 08:51:20 CLIENT -> SERVER: TTFAbGJpYnM=
2017-11-29 08:51:20 SMTP ERROR: Password command failed: 534-5.7.14 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbu6
                                      534-5.7.14 DdmKieVjzE-PRslaYBawzloy4sHOXyQVgeHU5Cj8nB3yYNtzhW7sGt1Wv8b_iHZZC27xXS
                                      534-5.7.14 0TUoPfx_4vtRrXdeRJkEphkUkvnNJ0h7kx9hzG_MSWhNBhHCSdR07RxPJPV-BV6YNaM0D9
                                      534-5.7.14 -S-bxFWPDgmfY0njjPfG0OKJOv0fcdaI8L1A3u3OaJNp983ieNk6prM_5biMHNXh_MflmB
                                      534-5.7.14 zPI1mWGI3BNGw1AnYsLew1YP6IM2o> Please log in via your web browser and
                                      534-5.7.14 then try again.
                                      534-5.7.14  Learn more at
                                      534 5.7.14  https://support.google.com/mail/answer/78754 e131sm1018193wmg.15 - gsmtp
2017-11-29 08:51:20 SMTP Error: Could not authenticate.
2017-11-29 08:51:20 CLIENT -> SERVER: QUIT
2017-11-29 08:51:20 SMTP connect() failed. 

La solución la encontré en el artículo: https://stackoverflow.com/questions/21937586/phpmailer-smtp-error-password-command-failed-when-send-mail-from-my-server aportada por el usuario: https://stackoverflow.com/users/3759368/callmebob

1.- La solución pasa por iniciar sesión en el navegador con la cuenta que deseas enviar como SMTP

Ya con la cuenta iniciada....

2.- Habilitar aplicaciones al envío de emails desde aquí: https://www.google.com/settings/u/1/security/lesssecureapps
3.- Entra en éste enlace y aceptar cualquier tipo de actividad sospechosa demostrando a google que todo está en orden y sin problemas de seguridad.
4.- Entra en éste enlace y acepta este último paso de seguridad

A mí me funcionó correctamente. Suerte!

viernes, 13 de octubre de 2017

sintaxis de acceso al servicio ftp mediante URI

The syntax of FTP URLs

According to the specification of URL formats, RFC 1738, an FTP URL is of the form
ftp://user:password@host:port/path
so that some or all of the parts user:password@:password:port and /path may be excluded. Although RFC 1738 has been obsoleted as regards to generic URL syntax (now defined in RFC 3986), some of the specific parts, like FTP URL syntax, are still in force.
The components obey the following rules:
user
a user name (user id) on the host
password
the password corresponding to the user name; note: if the user and password field in a URL contains character : or @ or /, the character must be encoded
host
the fully qualified domain name of a network host, or its IP address
port
the port number to connect to; it omitted, defaults to 21
path
path specification of the form
cwd1/cwd2/.../cwdN/name
(where any occurrence of / or ; within a cwdi or the name must be encoded) optionally followed by
;type=typecode
where typecode is one of the characters aid
Effectively, ;type=a means "Ascii mode" (plain text mode) of transfer whereas ;type=i means image (binary) mode. If the ;type=typecode part of an FTP URL is omitted, the client program interpreting the URL must guess the appropriate mode to use. In general, the data content type of a file can only be guessed from the name, e.g., from the suffix of the name; the appropriate type code to be used for transfer of the file can then be deduced from the data content of the file.
Fuente: http://jkorpela.fi/ftpurl.html

lunes, 2 de octubre de 2017

Extraer sólo numeros de un campo string en TSQL (Microsoft SQL Server)

El ejemplo se ha probado en una base de datos Microsoft SQL Server 2008 R2
CREATE FUNCTION dbo.udf_GetNumeric
(@strAlphaNumeric VARCHAR(256))
RETURNS VARCHAR(256)
AS
BEGIN
DECLARE @intAlpha INT
SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric)
BEGIN
WHILE @intAlpha > 0
BEGIN
SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 1, '' )
SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric )
END
END
RETURN ISNULL(@strAlphaNumeric,0)
END
GO
Now use the function as
SELECT dbo.udf_GetNumeric(column_name) 
from table_name
Ésta función es muy útil y permite extraer información sólo números de un campo cadena.
Ejemplo: Supongamos que tenemos una base de datos con los clientes y sus DNI. El DNI está almacenado con la letra y queremos sólo la parte numérica.

si hacemos: select dni from clientes

obtendremos:

dni
--------
1234567894X
1234567895J
1234567895P

ahora: creamos la función en la base de datos y a continuación realizamos la consulta:

select dbo.udf_GetNumeric(dni) from clientes
obtendremos:

dni
--------
1234567894
1234567895
1234567895

fuente:
https://stackoverflow.com/questions/16667251/query-to-get-only-numbers-from-a-string
Muchas gracias al usuario: https://stackoverflow.com/users/1841054/luv

martes, 18 de julio de 2017

Delphi tstringlist indexof case sensitive

Desarrollando una aplicación me encontré el siguiente problema:

Cargo un objeto TStringList con caracteres. Ejemplo 'T', 'e', 's', 't'

la propiedad indexOf del objecto TStringList devuelve las coincidencias sin tener en cuenta mayúsucla y minúsculas, es decir, no es caso sensitivo.

indexOf('t') devolvería el índice: 0. Que corresponde en realidad a 'T' (mayúscula)

Para corregirlo sustituir la función indexOf por:

function TForm1.searchStringListPosition(miLista: TStringList): integer;
begin
  for Result := 0 to miLista.count - 1 do
    if AnsiCompareStr(miLista[Result], pString) = 0 then Exit;
  Result := -1;
end;

Suerte! Esta tontería me dió muchos dolores de cabeza por eso me gustaría compartir esto.

---------------------------------------
Aclaraciones:

Aclaración 1:

Esta funcionalidad ha podido ser modificada en distintas versiones de delphi según  un comenario en: http://fpc-pascal.freepascal.narkive.com/GEdB2ACG/tstringlist-indexof-case-sensitivity

Post by James Mills
Hi,
Is TStringList.indexOf case sensitive or insensitive ?
TStrings.indexOf is case insensitive, but TStringList.indexOf overrides
the TStrings.indexOf implementation accoriding to the documentation.
It is case insensitive, but this was changed recently for Delphi
compatibility.
Older versions are case sensitive. Here are the relevant log entries:

revision 1.15
date: 2003/05/29 23:13:57; author: michael; state: Exp; lines: +5 -2
fixed case insensitivity of TStrings.IndexOf
----------------------------
revision 1.14
date: 2002/12/10 21:05:44; author: michael; state: Exp; lines: +12 -5
+ IndexOfName is case insensitive
----------------------------

Michael

lunes, 17 de julio de 2017

Recuperar la clave de un fichero 7z

Hace un tiempo puse una clave a un fichero 7z y no era capaz de acordarme cual era. Como la información era importante decidí realizar una pequeña aplicación que recuperase la clave mediante intentos de prueba-error o "Fuerza bruta".

Si tu también pasas por ese problema contacta conmigo para intentar obtener la clave.

El éxito de la operación dependerá de la complejidad de la clave. A mayor complejidad, mayor tiempo. Entiendo por complejidad la variedad de caracteres usados y el tamaño, mayúsculas, minúsculas...

jueves, 13 de julio de 2017

When I select a cell in the Detail grid I get the error "Key Field not found"


0
    • I have set up a grid with a Master-Detail relationship. Each view is associated to a TClientDataSet. The detail view > MasterKeyFieldNames property has been set to match the key name of the Master View. The detail view > DetailKeyFieldNames property has been set to match the key name of the Detail View. The detail view > KeyFieldNames property has been set to match the key name of the Detail View.
      When I run the program the data displays properly at first. However, when I enter one of the fields on the Detail grid I get the error "Key Field not found". There is always one row that does not give the "Key Field not found" error, but in that row the highlighted cell displays data from another cell until another cell is selected.
0
Hello Karen,
Thank you for the message.
This error occurs because your dsDetail dataset doesn't contain the cdsKeyFieldName field.
You should assign an existent column to the TcxDBDataController.KeyFieldNames property.
For more information, please read the "Master-Detail" topic.
Thanks,
Valdemar


Fuente: https://www.devexpress.com/Support/Center/Question/Details/Q267533/when-i-select-a-cell-in-the-detail-grid-i-get-the-error-key-field-not-found

Jesús Moreno - Ingeniero Ténico Informático - consultor Informático

Hola, soy Jesús Moreno Ingeniero Técnico Informático en sistemas por la US y propietario de éste blog. Mi trabajo en los ultimos años se ...