como enviar un sms con Delphi con zenvia


Zenvia es la empresa líder en movilidad corporativa de Brasil y ofrece a sus clientes la posibilidad de gestionar los envíos SMS desde aplicaciones externas. El método que presento es la forma de gestionar esos envíos desde una aplicación realizada en Delphi.






Ajuste el envío





Primer paso


Haga la  descarga de la biblioteca de integración  en ella se encuentran los  
siguientes archivos:. HumanApiClient 
  y  Indy _9_00_17_ src. Zip.





Paso 2


Añadir a la  ruta de búsqueda  de  Delphi  el directorio donde están las fuentes del paquete


Indy  y el paquete  HumanClient.





Paso 3


Para cualquier operación de  acceso a enviar  SMS, es necesario identificarse con su


cuenta y código de acceso. Vamos a trabajar con instancias de clases TSimpleSending  y  TMultipleSending  para el manejo de  SMS  (envío y consulta) 


a través de sus parámetros del constructor de su cuenta y código de acceso.  
Estos datos son transferidos por 
 Zenvia  junto con la negociación del contrato  
firmado con la empresa.





Ejemplo:





sms: = TMultipleSending.create ('Cuenta', 'contraseña');


Envío de  SMS  de forma individual


Primer paso


Utilizar una instancia de la clase  TSimpleSending con su cuenta y contraseña.


Ejemplo:





var


    ret: string;


    sms: TSimpleSending;


comenzar  


    sms: = TSimpleSending.create ('Cuenta', 'contraseña');








Paso 2


Agregue la información de  Para  (requerido)  Mensaje  (requerido)  De  (opcional), Id  (opcional) Horario  (opcional) y devolución de llamada  (opcional)
 


Ejemplo:





sms.From: = 'YourCo';


sms.ToNumber: = 'NumeroDeDestino';


sms.Msg: = 'SuaMensagem';











Paso 3


Llame al método  TSimpleSending.send



Ejemplo:





ret: sms.send = ();





Paso 4



El método de envío de retorno es una  cadena;el  texto que se puede ver en el código y la descripción de la solicitud y el estado 
 de SMS  enviados.


Ejemplo:





StatusBar1.Panels [0] .Text: = ret;    








Envío múltiple  de SMS


Primer paso


Instancia de la clase  TMultipleSending con su cuenta y contraseña.


Ejemplo:





var


    ret: TStrings;


    sms: TMultipleSending;


    Fecha: string;


    typeLayout: string;


comenzar


    sms: = TMultipleSending.create ('Cuenta', 'contraseña');


   


Paso 2





Llame al método  TMultipleSending.LoadList, para llenar una  cadena 
con la lista de  SMS  para ser enviados y el  tipo de diseño de la lista.
En nuestro ejemplo, vamos a elegir la 
 disposición  A, que consiste en
 
"numeroDeTelefone; textoDaMensagem".





Ejemplo:





fecha: = '555199990101; testen555199990102 mensaje; Mensaje de prueba ";


typeLayout: = 'A';


sms.LoadList (fecha, typeLayout);








Paso 3


Llame al método  TMultipleSending.send, a través de clases de parámetros ListResource.


Ejemplo:





ret: sms.send = ();








Paso 4


El método de envío de retorno es un  TStrings; texto que se puede incluir en el código junto con la descripción de la solicitud y el estado del  SMS  enviado a través  de devolución de llamada.


Ejemplo:





ShowMessage (ret.Text);


Fuente: 
programadordelphiatual.blogspot.com.es



Seguros de responsabilidad civil y sanciones LOPD


La responsabilidad civil de empresas tecnológicas.



Cuando se tiene una empresa de tecnología o se es un programador por cuenta propia hay que tener muy en cuenta que como consecuencia del ejercicio de la actividad, tus clientes o sus empresas pueden tener reclamaciones de sus propios clientes o pueden tener que cesar en su actividad de forma temporal, por lo que es muy importante contar con una póliza de Responsabilidad Civil para cubrir los posibles perjuicios ocasionados a terceros. Con esto aseguras a tus empleados, en caso de que los tengas y a tus herederos o representantes legales en caso de que hayas fallecido cuándo se produzca la reclamación.





Considera la cantidad que te podrían reclamar por daños y perjuicios tus clientes por los miles de horas de trabajo perdidas en subsanar los fallos de programación (hay empresas que de manera intencionada ponen en el mercado productos sin testar, vendiendo posteriormente packs de soporte técnico y actualizaciones)





Un seguro de responsabilidad civil para programadores de software debería cubrir los gastos de defensa jurídica y las indemnizaciones a las que se deba hacer frente para compensar el perjuicio ocasionado a terceros por el desarrollo de tu actividad profesional como cobertura básica, y opcionalmente puede llegar a cubrir la responsabilidad civil de explotación, la responsabilidad civil patronal, la derivada de la infidelidad de empleados, infracciones de propiedad intelectual y de LOPD, pérdida de documentos, entre otros; así como el pago de un subsidio en caso de inhabilitación profesional.





Si tu empresa se dedica a mantener datos de tus clientes y/o información confidencial de los mismos en la red, debes saber que tienes obligación legal de proteger esta información, una fuga de información podría acarrear a la empresa multas por parte de organismos reguladores de todo el mundo.





Riesgos que cubre un seguro de responsabilidad civil para empresas tecnológicas






Según una gran empresa aseguradora española podrían ser los siguientes:





- Perjuicios patrimoniales primarios





- Perjuicios consecutivos a un trabajo o producto defectuoso.





- Retrasos accidentales en entregas de productos prestaciones.





- Daños provocados por actos informáticos malintencionados, virus…





- Gastos de reconstitución de documentos y material informático perdido…





- Violación de propiedad intelectual.





- Infidelidad de empleados.





- Reemplazo de colaboradores.





- Una protección para la empresa frente a reclamaciones de terceros por causas de distinta índole. De especial connotación son los daños personales que se derivan como consecuencia de un incendio del centro,  etc.



- Infracciones de la ley de propiedad intelectual y de la LOPD





Sanciones que conllevaría el no cumplimiento de la LOPD























Sanciones leves






Las infracciones leves por incumplimiento de la LOPD conllevan sanciones comprendidas entre 900 y 40.000 Euros por:





No remitir a la Agencia Española de Protección de Datos las notificaciones previstas en esta ley o en sus disposiciones de desarrollo.





No solicitar la inscripción del fichero de datos de carácter personal en el Registro General de Protección de Datos.





El incumplimiento del deber de información al afectado acerca del tratamiento de sus datos de carácter personal cuando los datos sean recabados del propio interesado.





La transmisión de los datos a un encargado del tratamiento sin dar cumplimiento a los deberes formales establecidos en el articulo 12 de esta ley.




















Sanciones Graves






Las infracciones Graves por incumplimiento de la LOPD conllevan sanciones comprendidas entre 40.001 y 300.000 Euros por:





Proceder a la creación de ficheros de titularidad pública o iniciar la recogida de datos de carácter personal para los mismos, sin autorización de disposición general, publicada en el "Boletín Oficial del Estado" o diario oficial correspondiente.





Tratar datos de carácter personal sin recabar el consentimiento de las personas afectadas, cuando el mismo sea necesario conforme a lo dispuesto en esta Ley y sus disposiciones de desarrollo.





Tratar datos de carácter personal o usarlos posteriormente con conculcación de los principios y garantías establecidos en el Articulo 4 de la presente Ley y las disposiciones que lo desarrollan, salvo cuando sea constitutivo de infracción muy grave.





La vulneración del deber de guardar secreto acerca del tratamiento de los datos de carácter personal al que se refiere el artículo 10 de la presente Ley.





El impedimento o la obstaculización del ejercicio de los derechos de acceso, rectificación, cancelación y oposición.





El incumplimiento del deber de información al afectado acerca del tratamiento de sus datos de carácter personal cuando los datos no hayan sido recabados del propio interesado.





El incumplimiento de los restantes deberes de notificación o requerimiento al afectado impuestos por esta ley y sus disposiciones de desarrollo.





Mantener los ficheros, locales, programas o equipos que contengan datos de carácter personal sin las debidas condiciones de seguridad que por vía reglamentaria se determinen.





No atender  los requerimientos o apercibimientos de la Agencia Española de Protección de Datos o no proporcionar a aquella cuantos documentos e informaciones sean solicitados por la misma.





La obstrucción al ejercicio de la función inspectora.





La comunicación o cesión de los datos de carácter personal sin contar con legitimación para ello en los términos previstos en esta ley y sus disposiciones reglamentarias de desarrollo, salvo que la misma sea constitutiva de infracción muy grave.




















Sanciones muy Graves






Las infracciones Muy Graves por incumplimiento de la LOPD conllevan sanciones comprendidas entre 300.001 y 600.000 Euros por:





La recogida de datos en forma engañosa o fraudulenta.





Tratar o ceder los datos de carácter personal a los que se refieren los apartados 2, 3 y 5 del artículo 7 de esta Ley salvo en los supuestos en que la misma lo autoriza, o violentar la prohibición contenida en el apartado 4  del artículo 7.





No cesar en el tratamiento ilícito de datos de carácter personal cuando existiese un previo requerimiento del Director de la Agencia Española de Protección de Datos para ello.





La transferencia internacional de datos de carácter personal con destino a países que no proporcionen un nivel de protección equiparable sin autorización del Director de la Agencia Española de Protección de Datos salvo en los supuestos en los que conforme a esta Ley y sus disposiciones de desarrollo dicha autorización no resulta necesaria.




























Componentes para proyectos de ciencia con Delphi






La Suite de Componentes SDL  es una colección de componentes de apoyo al cálculo científico y de ingeniería. Todo el conjunto se compone de alrededor de 50 unidades que cubren una amplia gama de necesidades de la ciencia y la ingeniería. El conjunto de componentes está disponible tanto para Delphi ™ y C ++ Builder ™.









Plot Your Data in 3DRChart - Scientific DiagramsRotate Your Data in 3DStatistics
Fast Fourier TransformVU MeterPolar DiagramsMath/Curve Fitting











Algunos aspectos destacados:


  • 160000+ líneas de código fuente Pascal nativa

  • libre Light Edition - ideal para la educación y proyectos de software pequeños

  • combinación única de algoritmos científicos con capacidades para gráficos técnicos

  • unos 80 ejemplos de aplicación que se pueden utilizar como punto de partida para sus propios programas

  • actualizaciones ilimitadas (Standard Plus y Professional Edition)

  • archivo de ayuda  (más de 4.000 páginas, 300 figuras)


  • sin royalties por sus productos compilados - vea acuerdo de licencia








    Las siguientes palabras clave cubren sólo una parte de la suite SDL componentes y están destinadas a darle una impresión rápida de su potencia.




    Rotación 3D de los datos, 3D trama de datos, matrices asociativas, atlas, símbolos atómicos, función beta, diagramas decaja, botón, las imágenes escaneadas calibrados, número CAS del registro, gráficos, casillas de verificación, de conversión de color, selección de color, números complejos, constantes y conversión factores, parcelas de contorno, casco convexo,medición de velocidad de la CPU, estructuras químicas, datos químicos, fórmulas químicas, distribución chi-cuadrado,clustering, rutinas de conversión, ajuste de curvas, de bases de datos de información geográfica, estructura tabla de datos,determinante de una matriz, dendrogramas, diagramas , directorios, distribuciones, etiquetas de matriz de puntos, vectorespropios, F-distribución, FFT (Fast Fourier Transform), FIFO, diagramas de caja, archivo y el disco de acceso, la función gamma, calibrador, atlas geográficos, mapas geográficos, relleno de degradado, grep, mayor de matemáticas , basado en HTML etiqueta, entidades HTML, isótopos, red neuronal de Kohonen, KNN (vecinos más cercanos k), etiquetas que activan el navegador Web, la vista de lista, mapas, expresión matemática analizar, matrices, los datos de medición, la pantalla del medidor, MMR (regresión lineal múltiple ), fórmulas moleculares, redes neuronales, distribución normal, entrada numérica,etiquetas numéricas, editor de tablas numéricas, tabla periódica de elementos, diagramas polares, PCA (análisis de componentes principales), barras de progreso, cuantiles de la distribución, botones de radio, generadores aleatorios,regresión, RLE (codificación ejecutar longitud), etiquetas giratorios, la rotación de los datos, escalas, carta científica,pantallas enrollables, display de siete segmentos, diapositivas, carta de Smith, alisando, estrías, SOM, de ordenación dematrices, se extendió la hoja, estadísticas, recta líneas, arroyos, matriz de cadenas, manejo de cadenas, parcela de superficie de los datos, SVD (descomposición de valor sigular), selección de símbolos, la distribución t, t-test, tablas detexto, imágenes en miniatura, de diálogo guardar universales, ID único procesador, electrones de valencia, ondas, vectores,visualización de datos, indicador de volumen





Aunque es de pago tiene una versión gratuita "La versión Light"













La SDL Component Suite / LE (Light Edition) es una versión restringida de la edición comercial de la SDL Component Suite. Se ofrece de forma gratuita con fines privados y educativos, y con eso obtiene la potencia de un paquete profesional sin costo.

















¿Cuáles son las restricciones de la Versión Light?











En general, existen tres tipos de restricciones: (1) Algunos componentes no deben exceder un tamaño máximo (es decir, una matriz del tipo TMatrix se limita a un máximo de 2.000 elementos). (2) Unos pocos componentes no están disponibles. (3) Algunas funciones y métodos no están disponibles. En general, el objetivo de la edición de Light es proporcionar toda la funcionalidad que necesita para aprender a escribir programas para la ciencia y la ingeniería. 









¿Tengo que pagar ninguna cuota para el uso de la Edición Luz?




No, no  - siempre y cuando usted no gane nada de dinero o reciba otros beneficios materiales a partir de los programas que utilizan la suite SDL / LE.









¿Cómo puedo cambiar a la edición comercial de la SDL Component Suite?




Basta con comprar una licencia. La licencia es una cuota única que le da derecho a utilizar la Suite SDL de forma gratuita en sus programas. Las licencias están disponibles para los paquetes individuales y en diferentes niveles.









¿Cómo puedo evaluar aquellos componentes que no esté incluido en la Edición de luz?




Usted debe obtener los programas de ejemplo que siempre contienen un ejecutable que se ha compilado utilizando la versión comercial. Además, hay información detallada sobre todos los componentes de la suite SDL en el archivo de ayuda.









Obtener actualizaciones oficiales de Windows XP hasta abril de 2019


Seguramente ya conoceréis que después del 8 de abril de 2014 Microsoft no generará más actualizaciones de seguridad para WindowsXP, esto se debe a la política de Ciclo de Vida de Soporte que para los productos para Empresa y desarrolladores, entre los que se incluyen los sistemas operativos de Windows y Office, se les asigna un mínimo de 10 años de soporte (5 para el soporte estándar y 5 para el soporte extendido)





Me imagino que muchos de vosotros ya os habéis pasado a Windows 7 o 8, pero todos sabemos que el XP está instalado en una gran diversidad de máquinas cuya migración supondría un coste muy elevado (por ejemplo en el caso de los cajeros automáticos bancarios, a los que afectaría en un un 95% según NCR.





Pero quizás no sabéis que existe una excepción Windows Embedded PosReady, que tendrá soporte hasta el 2019 y Windows Embedded for Point of Service hasta el 2016.


Ambos son SO que se pueden instalar en puntos de venta móviles, terminales tipo kiosko, terminales TPV que se conectan a un software back-end, o equipos de firma digital.




El tema es que Windows Embedded POSReady está basado en Windows XP SP3, por lo que las actualizaciones de seguridad que están publicando son las mismas que Microsoft hubiera publicado para Windows XP por tanto si conseguimos descargar estas actualizaciones para nuestro PC ganaríamos otros 5 años de actualizaciones oficiales para nuestros equipo.





Para ello lo que tenemos que hacer es añadir los siguientes valores al registro de Windows XP (sólo funciona para sistemas de 32 bits)





Windows Registry Editor Version 5.00


       [HKEY_LOCAL_MACHINE\SYSTEM\WPA\PosReady]

       "Installed"=dword:00000001




Se recomienda antes hacer una copia de seguridad de nuestros archivos 


Automatizando Outlook

Funciones que tenemos que utilizar cuando queremos automatizar el programa Outlook desde Delphi.





Crear un objeto Outlook



var 

  Outlook, NmSpace, Folder: OleVariant; 

begin 

  Outlook := CreateOleObject('Outlook.Application');    

  NmSpace := Outlook.GetNamespace('MAPI');

  NmSpace.Logon(EmptyParam, EmptyParam, False, True);

  Folder := NmSpace.GetDefaultFolder(olFolderInbox);

  Folder.Display;





Cerrar Outlook





  NmSpace.Logoff;

  Outlook.Quit;

  Outlook.Disconnect;   

  { or }

  Outlook := nil;      

  { or }

  Outlook := Unassigned; //hacerlo así se usamos variants









Leer un mensaje




var


s:
string;


objCDO:
OLEVariant;


begin


objCDO
:= CreateOLEObject(
'MAPI.Session');


objCDO.Logon('',
'', False, False);


objMsg
:= objCDO.GetMessage(itemOL.EntryID, itemOL.Parent.StoreID);





s :=
objMsg.Sender.Address;


ShowMessage(s);


objMsg
:= Unassigned;


objCDO
:= Unassigned;


end





//donde itemOL es un  MailItem que contiene  SenderName pero no contiene   SenderAddress








Componer un email




const


  olMailItem = 0;


var


  Email: Variant;


begin


 Email := Outlook.CreateItem(olMailItem);




  Email.Recipients.Add('Debs@djpate.freeserve.co.uk');


  Email.Subject := 'Greetings, O gorgeous one';


  Email.Body := 'Your web pages fill me with delight';


  Email.Attachments.Add('C:\CreditCardNo.txt', EmptyParam, EmptyParam, EmptyParam);


  Email.Send;





Enviar / recibir email




uses
Office_TLB; 


var


ToolsMenu: CommandBar;


SendRecMenuItem, AllAccs: CommandBarControl;


begin


ToolsMenu := (Outlook.ActiveExplorer.CommandBars
as
CommandBars).Item[
'Tools'];


SendRecMenuItem := ToolsMenu.Controls_['Send and Receive'];


AllAccs
:= (SendRecMenuItem.Control
as
CommandBarPopup).Controls_[
'All Accounts'];


AllAccs.Execute;








Chequear el email no leído






var


  
Inbox: MAPIFolder;


  
NewMail: boolean;


...


   Inbox
:= NmSpace.GetDefaultFolder(olFolderInbox);


  
NewMail := (Inbox.UnreadItemCount >
0);


  
if
NewMail
then


    
ShowMessage(Format(
'Unread items in Inbox: %d',
[Inbox.UnreadItemCount]));




The constant olFolderInbox is defined in Outlook_TLB as $00000006.








Chequear el email no enviado




var


  
Outbox: MAPIFolder;


  
UnsentMail: integer;


...


  
Outbox := NmSpace.GetDefaultFolder(olFolderOutbox);


  
UnsentMail := Outbox.Items.Count;


  
if
(UnsentMail >
0)
then


    
ShowMessage(Format(
'Unsent items in Outbox: %d', [UnsentMail]));










The constant
olFolderOutbox is defined in
Outlook_TLB as $00000004













Añadir un contacto a la libreta de direcciones de Outlook




uses


ComObj,
Variants, SysUtils;





type


TContact
=
record


  
LastName:
string;


  
FirstName :
string;


  
Company :
string;


  
// ###  Further
properties. See MSDN


end;








//------------------------------------------------------------------------------


{:Add
outlook contact





@param
ContactFolderPath The contact path. E.g.: '' for default contact
folder,


'SubFolder\Sub2\Test' for subfolders


@param
Contact The contact informations.


@author
19.09.2003 Michael Klemm}


//------------------------------------------------------------------------------


procedure OutlookAddContact(ContactFolderPath : string; Contact : TContact);


const


olFolderContacts = $0000000A;


var


Outlook
: OleVariant;


NameSpace : OleVariant;


ContactsRoot : OleVariant;


ContactsFolder : OleVariant;


OutlookContact : OleVariant;


SubFolderName : string;


Position
: integer;


Found :
boolean;


Counter
: integer;


TestContactFolder : OleVariant;


begin


//
Connect to outlook


Outlook
:= CreateOleObject(
'Outlook.Application');


//
Get name space


NameSpace := Outlook.GetNameSpace('MAPI');


//
Get root contacts folder


ContactsRoot :=
NameSpace.GetDefaultFolder(olFolderContacts);


//
Iterate to subfolder


ContactsFolder := ContactsRoot;


while ContactFolderPath <> '' do


begin


  
// Extract next
subfolder


  
Position := Pos(
'\',
ContactFolderPath);


  
if
Position >
0
then


  
begin


    
SubFolderName := Copy(ContactFolderPath,
1,
Position -
1);


    
ContactFolderPath := Copy(ContactFolderPath, Position +
1, Length(ContactFolderPath));


  
end


  
else


  
begin


    
SubFolderName := ContactFolderPath;


    
ContactFolderPath :=
'';


  
end;


  
if
SubFolderName =
''
then


    
Break;


  
// Search
subfolder


   Found
:= False;


  
for
Counter :=
1 to ContactsFolder.Folders.Count
do


  
begin


    
TestContactFolder := ContactsRoot.Folders.Item(Counter);


    
if
LowerCase(TestContactFolder.
Name) = LowerCase(SubFolderName)
then


    
begin


      
ContactsFolder := TestContactFolder;


      
Found := True;


      
Break;


    
end;


  
end;


  
// If not found
create


  
if
not
Found
then


    
ContactsFolder := ContactsFolder.Folders.Add(SubFolderName);


end;


//
Create contact item


OutlookContact := ContactsFolder.Items.Add;


//
Fill contact information


OutlookContact.FirstName := Contact.FirstName;


OutlookContact.LastName := Contact.LastName;


OutlookContact.CompanyName := Contact.Company;





//
### Further properties





//
Save contact


OutlookContact.Save;


//
Disconnect from outlook


Outlook
:= Unassigned;


end;











Eliminar todos los archivos adjuntos que hayan sido enviados por un determinado email




uses


comobj;





{...}





function manageattachments(sendersname, attachmentpath: string;


maildelete: boolean): boolean;


var


oapp:
variant;


ons:
variant;


ofolder:
variant;


omsg:
variant;


atc:
variant;


attfilename: variant;


filename: string;


checksender: string;


counter:
integer;


mailcounter: integer;


begin


try


oapp :=
createoleobject(
'outlook.application');


try


ons :=
oapp.getnamespace(
'mapi');


ofolder
:= ons.getdefaultfolder(
6);
// foldertypeenum
(olfolderinbox)


mailcounter := 1;


// if
there is any email in the inbox


if
ofolder.items.count >
0
then


begin


repeat


// get
the first email


omsg :=
ofolder.items(mailcounter);


// check
the name or email


// use
checksender := omsg.subject to search on subject;


checksender := omsg.sendername;


if
checksender = sendersname
then


//
remove this line to backup all your attachments.


begin


// check
how many attachments


atc :=
omsg.attachments.count;


if
atc >
0 then


begin


// get
all the attachments and save them


for
counter :=
1 to atc do


begin


attfilename := omsg.attachments.item(counter).filename;


//filename :=
includetrailingbackslash(attachmentpath)+attfilename; {use this line for d5)}


filename
:= attachmentpath +
'' +
attfilename;


omsg.attachments.item(counter).saveasfile(filename);


end;


end;


if
maildelete
then


begin


omsg.delete;


//
there's 1 email less, so mailcounter - 1


dec(mailcounter);


end;


end;


// get
the next email


inc(mailcounter);


// do
until there is no more email to check


until mailcounter > ofolder.items.count;


end;


finally


oapp.quit;


end;


except


result
:= false;


exit;


end;


result
:= true;


end;








procedure tform1.button1click(sender: tobject);


begin


//
manageattachments(email or name, backup directory, maildelete yes or no)


manageattachments('info@cleys.com', 'f:test', false);


end;








{


warning!


all your
selected email will be deleted if maildelete = true


autor: patrick
cleys 


homepage:
http://www.dcmedical.org 


}





Referencias:  http://www.djpate.freeserve.co.uk/AutoOutl.htm




































Simulación del movimiento de los electrones en un campo electrico

Espectacular simulación realizada con OpenGL del movimiento de los electrones cuando atraviesan un campo eléctrico. Como muestra la image...