Ir al contenido



Foto

Enviar correo de gmail con libCurl


  • Por favor identifícate para responder
29 respuestas en este tema

#1 seoane

seoane

    Advanced Member

  • Administrador
  • 1.243 mensajes
  • LocationEspaña

Escrito 14 marzo 2011 - 07:56

Este es un ejemplo de como enviar un correo electrónico a través de gmail usando la librería libcurl.
La librería libcurl se pude descargar aquí: http://curl.haxx.se/libcurl/
Para gmail lo mejor es descargar la versión para windows con SSL:
http://www.gknw.net/...vel-mingw32.zip
Dentro del archivo zip se encuentra una carpeta "bin" con todas las dll necesarias, hay que copiarlas en el mismo directorio de nuestra aplicación.
Para manejar la librería he creado esta pequeña unit con algunas funciones básicas:


delphi
  1. unit ucurl;
  2.  
  3. interface
  4.  
  5. type
  6.   TCURL = Pointer;
  7.   PCURL = ^TCURL;
  8.  
  9.   CURLcode = (
  10.     CURLE_OK = 0,
  11.     CURLE_UNSUPPORTED_PROTOCOL,
  12.     CURLE_FAILED_INIT,
  13.     CURLE_URL_MALFORMAT,
  14.     CURLE_OBSOLETE4,
  15.     CURLE_COULDNT_RESOLVE_PROXY,
  16.     CURLE_COULDNT_RESOLVE_HOST,
  17.     CURLE_COULDNT_CONNECT,
  18.     CURLE_FTP_WEIRD_SERVER_REPLY,
  19.     CURLE_REMOTE_ACCESS_DENIED,
  20.     CURLE_OBSOLETE10,
  21.     CURLE_FTP_WEIRD_PASS_REPLY,
  22.     CURLE_OBSOLETE12,
  23.     CURLE_FTP_WEIRD_PASV_REPLY,
  24.     CURLE_FTP_WEIRD_227_FORMAT,
  25.     CURLE_FTP_CANT_GET_HOST,
  26.     CURLE_OBSOLETE16,
  27.     CURLE_FTP_COULDNT_SET_TYPE,
  28.     CURLE_PARTIAL_FILE,
  29.     CURLE_FTP_COULDNT_RETR_FILE,
  30.     CURLE_OBSOLETE20,
  31.     CURLE_QUOTE_ERROR,
  32.     CURLE_HTTP_RETURNED_ERROR,
  33.     CURLE_WRITE_ERROR,
  34.     CURLE_OBSOLETE24,
  35.     CURLE_UPLOAD_FAILED,
  36.     CURLE_READ_ERROR,
  37.     CURLE_OUT_OF_MEMORY,
  38.     CURLE_OPERATION_TIMEDOUT,
  39.     CURLE_OBSOLETE29,
  40.     CURLE_FTP_PORT_FAILED,
  41.     CURLE_FTP_COULDNT_USE_REST,
  42.     CURLE_OBSOLETE32,
  43.     CURLE_RANGE_ERROR,
  44.     CURLE_HTTP_POST_ERROR,
  45.     CURLE_SSL_CONNECT_ERROR,
  46.     CURLE_BAD_DOWNLOAD_RESUME,
  47.     CURLE_FILE_COULDNT_READ_FILE,
  48.     CURLE_LDAP_CANNOT_BIND,
  49.     CURLE_LDAP_SEARCH_FAILED,
  50.     CURLE_OBSOLETE40,
  51.     CURLE_FUNCTION_NOT_FOUND,
  52.     CURLE_ABORTED_BY_CALLBACK,
  53.     CURLE_BAD_FUNCTION_ARGUMENT,
  54.     CURLE_OBSOLETE44,
  55.     CURLE_INTERFACE_FAILED,
  56.     CURLE_OBSOLETE46,
  57.     CURLE_TOO_MANY_REDIRECTS ,
  58.     CURLE_UNKNOWN_TELNET_OPTION,
  59.     CURLE_TELNET_OPTION_SYNTAX ,
  60.     CURLE_OBSOLETE50,
  61.     CURLE_PEER_FAILED_VERIFICATION,
  62.     CURLE_GOT_NOTHING,
  63.     CURLE_SSL_ENGINE_NOTFOUND,
  64.     CURLE_SSL_ENGINE_SETFAILED,
  65.     CURLE_SEND_ERROR,
  66.     CURLE_RECV_ERROR,
  67.     CURLE_OBSOLETE57,
  68.     CURLE_SSL_CERTPROBLEM,
  69.     CURLE_SSL_CIPHER,
  70.     CURLE_SSL_CACERT,
  71.     CURLE_BAD_CONTENT_ENCODING,
  72.     CURLE_LDAP_INVALID_URL,
  73.     CURLE_FILESIZE_EXCEEDED,
  74.     CURLE_USE_SSL_FAILED,
  75.     CURLE_SEND_FAIL_REWIND,
  76.     CURLE_SSL_ENGINE_INITFAILED,
  77.     CURLE_LOGIN_DENIED,
  78.     CURLE_TFTP_NOTFOUND,
  79.     CURLE_TFTP_PERM,
  80.     CURLE_REMOTE_DISK_FULL,
  81.     CURLE_TFTP_ILLEGAL,
  82.     CURLE_TFTP_UNKNOWNID,
  83.     CURLE_REMOTE_FILE_EXISTS,
  84.     CURLE_TFTP_NOSUCHUSER,
  85.     CURLE_CONV_FAILED,
  86.     CURLE_CONV_REQD,
  87.     CURLE_SSL_CACERT_BADFILE,
  88.     CURLE_REMOTE_FILE_NOT_FOUND,
  89.     CURLE_SSH,
  90.     CURLE_SSL_SHUTDOWN_FAILED,
  91.     CURLE_AGAIN,
  92.     CURLE_SSL_CRL_BADFILE,
  93.     CURLE_SSL_ISSUER_ERROR,
  94.     CURLE_FTP_PRET_FAILED,
  95.     CURLE_RTSP_CSEQ_ERROR,
  96.     CURLE_RTSP_SESSION_ERROR,
  97.     CURLE_FTP_BAD_FILE_LIST,
  98.     CURLE_CHUNK_FAILED,
  99.     CURL_LAST
  100.   );
  101.  
  102.   CURLoption = (
  103.     CURLOPT_FILE                        = $2711,
  104.     CURLOPT_URL                        = $2712,
  105.     CURLOPT_PORT                        = $0003,
  106.     CURLOPT_PROXY                      = $2714,
  107.     CURLOPT_USERPWD                    = $2715,
  108.     CURLOPT_PROXYUSERPWD                = $2716,
  109.     CURLOPT_RANGE                      = $2717,
  110.     CURLOPT_INFILE                      = $2719,
  111.     CURLOPT_ERRORBUFFER                = $271A,
  112.     CURLOPT_WRITEFUNCTION              = $4E2B,
  113.     CURLOPT_READFUNCTION                = $4E2C,
  114.     CURLOPT_TIMEOUT                    = $000D,
  115.     CURLOPT_INFILESIZE                  = $000E,
  116.     CURLOPT_POSTFIELDS                  = $271F,
  117.     CURLOPT_REFERER                    = $2720,
  118.     CURLOPT_FTPPORT                    = $2721,
  119.     CURLOPT_USERAGENT                  = $2722,
  120.     CURLOPT_LOW_SPEED_LIMIT            = $0013,
  121.     CURLOPT_LOW_SPEED_TIME              = $0014,
  122.     CURLOPT_RESUME_FROM                = $0015,
  123.     CURLOPT_COOKIE                      = $2726,
  124.     CURLOPT_HTTPHEADER                  = $2727,
  125.     CURLOPT_HTTPPOST                    = $2728,
  126.     CURLOPT_SSLCERT                    = $2729,
  127.     CURLOPT_KEYPASSWD                  = $272A,
  128.     CURLOPT_CRLF                        = $001B,
  129.     CURLOPT_QUOTE                      = $272C,
  130.     CURLOPT_WRITEHEADER                = $272D,
  131.     CURLOPT_COOKIEFILE                  = $272F,
  132.     CURLOPT_SSLVERSION                  = $0020,
  133.     CURLOPT_TIMECONDITION              = $0021,
  134.     CURLOPT_TIMEVALUE                  = $0022,
  135.     CURLOPT_CUSTOMREQUEST              = $2734,
  136.     CURLOPT_STDERR                      = $2735,
  137.     CURLOPT_POSTQUOTE                  = $2737,
  138.     CURLOPT_WRITEINFO                  = $2738,
  139.     CURLOPT_VERBOSE                    = $0029,
  140.     CURLOPT_HEADER                      = $002A,
  141.     CURLOPT_NOPROGRESS                  = $002B,
  142.     CURLOPT_NOBODY                      = $002C,
  143.     CURLOPT_FAILONERROR                = $002D,
  144.     CURLOPT_UPLOAD                      = $002E,
  145.     CURLOPT_POST                        = $002F,
  146.     CURLOPT_DIRLISTONLY                = $0030,
  147.     CURLOPT_APPEND                      = $0032,
  148.     CURLOPT_NETRC                      = $0033,
  149.     CURLOPT_FOLLOWLOCATION              = $0034,
  150.     CURLOPT_TRANSFERTEXT                = $0035,
  151.     CURLOPT_PUT                        = $0036,
  152.     CURLOPT_PROGRESSFUNCTION            = $4E58,
  153.     CURLOPT_PROGRESSDATA                = $2749,
  154.     CURLOPT_AUTOREFERER                = $003A,
  155.     CURLOPT_PROXYPORT                  = $003B,
  156.     CURLOPT_POSTFIELDSIZE              = $003C,
  157.     CURLOPT_HTTPPROXYTUNNEL            = $003D,
  158.     CURLOPT_INTERFACE                  = $274E,
  159.     CURLOPT_KRBLEVEL                    = $274F,
  160.     CURLOPT_SSL_VERIFYPEER              = $0040,
  161.     CURLOPT_CAINFO                      = $2751,
  162.     CURLOPT_MAXREDIRS                  = $0044,
  163.     CURLOPT_FILETIME                    = $0045,
  164.     CURLOPT_TELNETOPTIONS              = $2756,
  165.     CURLOPT_MAXCONNECTS                = $0047,
  166.     CURLOPT_CLOSEPOLICY                = $0048,
  167.     CURLOPT_FRESH_CONNECT              = $004A,
  168.     CURLOPT_FORBID_REUSE                = $004B,
  169.     CURLOPT_RANDOM_FILE                = $275C,
  170.     CURLOPT_EGDSOCKET                  = $275D,
  171.     CURLOPT_CONNECTTIMEOUT              = $004E,
  172.     CURLOPT_HEADERFUNCTION              = $4E6F,
  173.     CURLOPT_HTTPGET                    = $0050,
  174.     CURLOPT_SSL_VERIFYHOST              = $0051,
  175.     CURLOPT_COOKIEJAR                  = $2762,
  176.     CURLOPT_SSL_CIPHER_LIST            = $2763,
  177.     CURLOPT_HTTP_VERSION                = $0054,
  178.     CURLOPT_FTP_USE_EPSV                = $0055,
  179.     CURLOPT_SSLCERTTYPE                = $2766,
  180.     CURLOPT_SSLKEY                      = $2767,
  181.     CURLOPT_SSLKEYTYPE                  = $2768,
  182.     CURLOPT_SSLENGINE                  = $2769,
  183.     CURLOPT_SSLENGINE_DEFAULT          = $005A,
  184.     CURLOPT_DNS_USE_GLOBAL_CACHE        = $005B,
  185.     CURLOPT_DNS_CACHE_TIMEOUT          = $005C,
  186.     CURLOPT_PREQUOTE                    = $276D,
  187.     CURLOPT_DEBUGFUNCTION              = $4E7E,
  188.     CURLOPT_DEBUGDATA                  = $276F,
  189.     CURLOPT_COOKIESESSION              = $0060,
  190.     CURLOPT_CAPATH                      = $2771,
  191.     CURLOPT_BUFFERSIZE                  = $0062,
  192.     CURLOPT_NOSIGNAL                    = $0063,
  193.     CURLOPT_SHARE                      = $2774,
  194.     CURLOPT_PROXYTYPE                  = $0065,
  195.     CURLOPT_ENCODING                    = $2776,
  196.     CURLOPT_PRIVATE                    = $2777,
  197.     CURLOPT_HTTP200ALIASES              = $2778,
  198.     CURLOPT_UNRESTRICTED_AUTH          = $0069,
  199.     CURLOPT_FTP_USE_EPRT                = $006A,
  200.     CURLOPT_HTTPAUTH                    = $006B,
  201.     CURLOPT_SSL_CTX_FUNCTION            = $4E8C,
  202.     CURLOPT_SSL_CTX_DATA                = $277D,
  203.     CURLOPT_FTP_CREATE_MISSING_DIRS    = $006E,
  204.     CURLOPT_PROXYAUTH                  = $006F,
  205.     CURLOPT_FTP_RESPONSE_TIMEOUT        = $0070,
  206.     CURLOPT_IPRESOLVE                  = $0071,
  207.     CURLOPT_MAXFILESIZE                = $0072,
  208.     CURLOPT_INFILESIZE_LARGE            = $75A3,
  209.     CURLOPT_RESUME_FROM_LARGE          = $75A4,
  210.     CURLOPT_MAXFILESIZE_LARGE          = $75A5,
  211.     CURLOPT_NETRC_FILE                  = $2786,
  212.     CURLOPT_USE_SSL                    = $0077,
  213.     CURLOPT_POSTFIELDSIZE_LARGE        = $75A8,
  214.     CURLOPT_TCP_NODELAY                = $0079,
  215.     CURLOPT_FTPSSLAUTH                  = $0081,
  216.     CURLOPT_IOCTLFUNCTION              = $4EA2,
  217.     CURLOPT_IOCTLDATA                  = $2793,
  218.     CURLOPT_FTP_ACCOUNT                = $2796,
  219.     CURLOPT_COOKIELIST                  = $2797,
  220.     CURLOPT_IGNORE_CONTENT_LENGTH      = $0088,
  221.     CURLOPT_FTP_SKIP_PASV_IP            = $0089,
  222.     CURLOPT_FTP_FILEMETHOD              = $008A,
  223.     CURLOPT_LOCALPORT                  = $008B,
  224.     CURLOPT_LOCALPORTRANGE              = $008C,
  225.     CURLOPT_CONNECT_ONLY                = $008D,
  226.     CURLOPT_CONV_FROM_NETWORK_FUNCTION  = $4EAE,
  227.     CURLOPT_CONV_TO_NETWORK_FUNCTION    = $4EAF,
  228.     CURLOPT_CONV_FROM_UTF8_FUNCTION    = $4EB0,
  229.     CURLOPT_MAX_SEND_SPEED_LARGE        = $75C1,
  230.     CURLOPT_MAX_RECV_SPEED_LARGE        = $75C2,
  231.     CURLOPT_FTP_ALTERNATIVE_TO_USER    = $27A3,
  232.     CURLOPT_SOCKOPTFUNCTION            = $4EB4,
  233.     CURLOPT_SOCKOPTDATA                = $27A5,
  234.     CURLOPT_SSL_SESSIONID_CACHE        = $0096,
  235.     CURLOPT_SSH_AUTH_TYPES              = $0097,
  236.     CURLOPT_SSH_PUBLIC_KEYFILE          = $27A8,
  237.     CURLOPT_SSH_PRIVATE_KEYFILE        = $27A9,
  238.     CURLOPT_FTP_SSL_CCC                = $009A,
  239.     CURLOPT_TIMEOUT_MS                  = $009B,
  240.     CURLOPT_CONNECTTIMEOUT_MS          = $009C,
  241.     CURLOPT_HTTP_TRANSFER_DECODING      = $009D,
  242.     CURLOPT_HTTP_CONTENT_DECODING      = $009E,
  243.     CURLOPT_NEW_FILE_PERMS              = $009F,
  244.     CURLOPT_NEW_DIRECTORY_PERMS        = $00A0,
  245.     CURLOPT_POSTREDIR                  = $00A1,
  246.     CURLOPT_SSH_HOST_PUBLIC_KEY_MD5    = $27B2,
  247.     CURLOPT_OPENSOCKETFUNCTION          = $4EC3,
  248.     CURLOPT_OPENSOCKETDATA              = $27B4,
  249.     CURLOPT_COPYPOSTFIELDS              = $27B5,
  250.     CURLOPT_PROXY_TRANSFER_MODE        = $00A6,
  251.     CURLOPT_SEEKFUNCTION                = $4EC7,
  252.     CURLOPT_SEEKDATA                    = $27B8,
  253.     CURLOPT_CRLFILE                    = $27B9,
  254.     CURLOPT_ISSUERCERT                  = $27BA,
  255.     CURLOPT_ADDRESS_SCOPE              = $00AB,
  256.     CURLOPT_CERTINFO                    = $00AC,
  257.     CURLOPT_USERNAME                    = $27BD,
  258.     CURLOPT_PASSWORD                    = $27BE,
  259.     CURLOPT_PROXYUSERNAME              = $27BF,
  260.     CURLOPT_PROXYPASSWORD              = $27C0,
  261.     CURLOPT_NOPROXY                    = $27C1,
  262.     CURLOPT_TFTP_BLKSIZE                = $00B2,
  263.     CURLOPT_SOCKS5_GSSAPI_SERVICE      = $27C3,
  264.     CURLOPT_SOCKS5_GSSAPI_NEC          = $00B4,
  265.     CURLOPT_PROTOCOLS                  = $00B5,
  266.     CURLOPT_REDIR_PROTOCOLS            = $00B6,
  267.     CURLOPT_SSH_KNOWNHOSTS              = $27C7,
  268.     CURLOPT_SSH_KEYFUNCTION            = $4ED8,
  269.     CURLOPT_SSH_KEYDATA                = $27C9,
  270.     CURLOPT_MAIL_FROM                  = $27CA,
  271.     CURLOPT_MAIL_RCPT                  = $27CB,
  272.     CURLOPT_FTP_USE_PRET                = $00BC,
  273.     CURLOPT_RTSP_REQUEST                = $00BD,
  274.     CURLOPT_RTSP_SESSION_ID            = $27CE,
  275.     CURLOPT_RTSP_STREAM_URI            = $27CF,
  276.     CURLOPT_RTSP_TRANSPORT              = $27D0,
  277.     CURLOPT_RTSP_CLIENT_CSEQ            = $00C1,
  278.     CURLOPT_RTSP_SERVER_CSEQ            = $00C2,
  279.     CURLOPT_INTERLEAVEDATA              = $27D3,
  280.     CURLOPT_INTERLEAVEFUNCTION          = $4EE4,
  281.     CURLOPT_WILDCARDMATCH              = $00C5,
  282.     CURLOPT_CHUNK_BGN_FUNCTION          = $4EE6,
  283.     CURLOPT_CHUNK_END_FUNCTION          = $4EE7,
  284.     CURLOPT_FNMATCH_FUNCTION            = $4EE8,
  285.     CURLOPT_CHUNK_DATA                  = $27D9,
  286.     CURLOPT_FNMATCH_DATA                = $27DA,
  287.     CURLOPT_RESOLVE                    = $27DB,
  288.     CURLOPT_TLSAUTH_USERNAME            = $27DC,
  289.     CURLOPT_TLSAUTH_PASSWORD            = $27DD,
  290.     CURLOPT_TLSAUTH_TYPE                = $27DE
  291.   );
  292.  
  293.   curl_usessl = (
  294.     CURLUSESSL_NONE = 0,
  295.     CURLUSESSL_TRY,
  296.     CURLUSESSL_CONTROL,
  297.     CURLUSESSL_ALL,
  298.     CURLUSESSL_LAST
  299.   );
  300.  
  301.   pcurl_slist = ^curl_slist;
  302.   curl_slist = record
  303.     data: PAnsiChar;
  304.     next: ^pcurl_slist;
  305.   end;
  306.  
  307.  
  308. const
  309.   libcurl = 'libcurl.dll';
  310.  
  311.   CURL_GLOBAL_SSL = 1;
  312.   CURL_GLOBAL_WIN32 = 2;
  313.   CURL_GLOBAL_ALL = CURL_GLOBAL_SSL or CURL_GLOBAL_WIN32;
  314.   CURL_GLOBAL_NOTHING = 0;
  315.   CURL_GLOBAL_DEFAULT = CURL_GLOBAL_ALL;
  316.  
  317.  
  318. // easy interface
  319. function curl_easy_init: TCURL;
  320.   cdecl; external libcurl;
  321. function curl_easy_setopt(curl: TCURL; option: CURLoption): CURLcode;
  322.   cdecl; varargs; external libcurl;
  323. function curl_easy_perform(curl: TCURL): CURLcode;
  324.   cdecl; external libcurl;
  325. procedure curl_easy_cleanup(curl: TCURL);
  326.   cdecl; external libcurl;
  327. // initialization
  328. function curl_global_init(flags: Longint): CURLcode;
  329.   cdecl; external libcurl;
  330. procedure curl_global_cleanup;
  331.   cdecl; external libcurl;
  332. // curl_slist
  333. function curl_slist_append(list: pcurl_slist; const Str: PAnsiChar): pcurl_slist;
  334.   cdecl; external libcurl;
  335. procedure curl_slist_free_all(list: pcurl_slist);
  336.   cdecl; external libcurl;
  337.  
  338. implementation
  339.  
  340. initialization
  341.   curl_global_init(CURL_GLOBAL_ALL);
  342. finalization
  343.   curl_global_cleanup;
  344. end.




Y aqui esta el código para enviar el correo:


delphi
  1. function ReadFromStream(Buffer: PAnsiChar; Size, Count: Integer;
  2.   Stream: TStream): Integer; cdecl;
  3. begin
  4.   Result:= Stream.Read(Buffer^,Size*Count) div Size;
  5. end;
  6.  
  7. function EnviarMail(Usuario, Clave, De, Para, Asunto, Texto: AnsiString): Boolean;
  8. var
  9.   Curl: TCURL;
  10.   Rcpt: pcurl_slist;
  11.   Stream: TMemoryStream;
  12. begin
  13.   Result:= FALSE;
  14.   Curl:= curl_easy_init;
  15.   if Curl <> nil then
  16.   try
  17.     // Queremos que se muestre informacion sobre todo el proceso
  18.     if curl_easy_setopt(Curl, CURLOPT_VERBOSE, TRUE) <> CURLE_OK then
  19.       Exit;
  20.     // Queremos usar SSL
  21.     if curl_easy_setopt(Curl, CURLOPT_USE_SSL, CURLUSESSL_ALL) <> CURLE_OK then
  22.       Exit;
  23.     // No queremos que compruebe el certificado de gmail
  24.     if curl_easy_setopt(Curl, CURLOPT_SSL_VERIFYPEER, FALSE) <> CURLE_OK then
  25.       Exit;
  26.     // Nombre de usuario
  27.     if curl_easy_setopt(Curl, CURLOPT_USERNAME, PAnsiChar(Usuario)) <> CURLE_OK then
  28.       Exit;
  29.     // Clave
  30.     if curl_easy_setopt(Curl, CURLOPT_PASSWORD, PAnsiChar(Clave)) <> CURLE_OK then
  31.       Exit;
  32.     // URL de gmail
  33.     if curl_easy_setopt(Curl, CURLOPT_URL, PChar('smtps://smtp.gmail.com')) <> CURLE_OK then
  34.       Exit;
  35.     if curl_easy_setopt(Curl, CURLOPT_MAIL_FROM, PAnsiChar(De)) <> CURLE_OK then
  36.       Exit;
  37.     Rcpt:= nil;
  38.     // Creamos una lista con los receptores
  39.     Rcpt:= curl_slist_append(Rcpt,PAnsiChar(Para));
  40.     // Podemos repetir la linea anterior para añadir mas de un receptor
  41.     try
  42.       if curl_easy_setopt(Curl, CURLOPT_MAIL_RCPT, Rcpt) <> CURLE_OK then
  43.         Exit;
  44.       // Le indicamos que tiene que usar la funcion ReadFromStream para leer el contenido del mensaje
  45.       if curl_easy_setopt(Curl, CURLOPT_READFUNCTION, @ReadFromStream) <> CURLE_OK then
  46.         Exit;
  47.       Stream:= TMemoryStream.Create;
  48.       try
  49.         // Creamos el contenido del mensaje y lo guardamos en un stream
  50.         with TStringList.Create do
  51.         try
  52.           Add('Content-Type: text/plain;');
  53.           Add('Subject: ' + Asunto);
  54.           Add('User-Agent: Curl');
  55.           Add(EmptyStr);
  56.           Add(Texto);
  57.           SaveToStream(Stream);
  58.         finally
  59.           Free;
  60.         end;
  61.         Stream.Position:= 0;
  62.         // Le indicamos que debe usar el stream que acabamos de crear
  63.         if curl_easy_setopt(Curl, CURLOPT_INFILE, Stream) <> CURLE_OK then
  64.           Exit;
  65.         if curl_easy_setopt(Curl, CURLOPT_UPLOAD, TRUE) <> CURLE_OK then
  66.           Exit;
  67.         // Enviamos el mensaje
  68.         Result:= curl_easy_perform(Curl) = CURLE_OK;
  69.       finally
  70.         Stream.Free;
  71.       end;
  72.     finally
  73.       curl_slist_free_all(Rcpt);
  74.     end;
  75.   finally
  76.     curl_easy_cleanup(Curl);
  77.   end;
  78. end;


Aquí dejo un ejemplo, en un archivo zip, pero hay que copiar las dll de la carpeta "bin" para que funcione.





Archivos adjuntos


  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.804 mensajes
  • LocationMéxico

Escrito 27 abril 2011 - 09:07

Hola amigo

Estoy intentando enviar correos con una cuenta de GMail, esto funciona de maravilla, pero no he encontrado la forma de agregar un archivo adjunto, esto es lo que hice pero lo manda como parte del texto :(



delphi
  1.         // Creamos el contenido del mensaje y lo guardamos en un stream
  2.         with TStringList.Create do
  3.         try
  4.           Add('Content-Type: text/html;');
  5.           Add('Subject: ' + Asunto);
  6.           Add('User-Agent: Curl');
  7.           Add(EmptyStr);
  8.           Add(Texto);
  9.  
  10.           Add('--{$mime_boundary}' );
  11.           Add('Content-Type: {$fileatttype};');
  12.           Add('name=' + 'CALCULADORA.JPG');
  13.           Add('Content-Disposition: attachment;');
  14.           Add('filename=' + 'C:\Proyectos\Almacen\CALCULADORA.JPG');
  15.           Add('Content-Transfer-Encoding: base64');
  16.           Add('--{$mime_boundary}--');
  17.  
  18.           SaveToStream(Stream);
  19.         finally
  20.           Free;
  21.         end;



¿ Como creo el objeto del adjunto ?

Salud OS
  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.804 mensajes
  • LocationMéxico

Escrito 27 abril 2011 - 09:41

Alguien me puede ayudar a traducir esto a Delphi ?


  if ($attachments !== false)
  {
    for($i=0; $i < count($attachments); $i++)
    {
      if (is_file($attachments[$i]["file"]))
      { 
        # File for Attachment
        $file_name = substr($attachments[$i]["file"], (strrpos($attachments[$i]["file"], "/")+1));
     
        $handle=fopen($attachments[$i]["file"], 'rb');
        $f_contents=fread($handle, filesize($attachments[$i]["file"]));
        $f_contents=chunk_split(base64_encode($f_contents));    //Encode The Data For Transition using base64_encode();
        $f_type=filetype($attachments[$i]["file"]);
        fclose($handle);
     
        # Attachment
        $msg .= "--".$mime_boundary.$eol;
        $msg .= "Content-Type: ".$attachments[$i]["content_type"]."; name=\"".$file_name."\"".$eol;  // sometimes i have to send MS Word, use 'msword' instead of 'pdf'
        $msg .= "Content-Transfer-Encoding: base64".$eol;
        $msg .= "Content-Description: ".$file_name.$eol;
        $msg .= "Content-Disposition: attachment; filename=\"".$file_name."\"".$eol.$eol; // !! This line needs TWO end of lines !! IMPORTANT !!
        $msg .= $f_contents.$eol.$eol;
      }
    }
  }


Gracias :)

Salud OS
  • 0

#4 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 27 abril 2011 - 10:07

:undecided:  me suena a que es tu trabajo de fin de curso y que quieres que te hagamos tu tarea....


:D  :D  :D  :D  :p


Saludox ! :)
  • 0

#5 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.804 mensajes
  • LocationMéxico

Escrito 27 abril 2011 - 10:17

"Shale" :D :D :D :p

¿ Tan fácil es... ?

Salud OS
  • 0

#6 seoane

seoane

    Advanced Member

  • Administrador
  • 1.243 mensajes
  • LocationEspaña

Escrito 27 abril 2011 - 03:20

Pues podemos probar  :)


delphi
  1. function EnviarMail(Usuario, Clave, De, Para, Asunto, Texto, Archivo: AnsiString): Boolean;
  2. var
  3.   Curl: TCURL;
  4.   Rcpt: pcurl_slist;
  5.   Stream: TMemoryStream;
  6.   Boundary: AnsiString;
  7. begin
  8.   Result:= FALSE;
  9.   Curl:= curl_easy_init;
  10.   if Curl <> nil then
  11.   try
  12.     // Queremos que se muestre informacion sobre todo el proceso
  13.     if curl_easy_setopt(Curl, CURLOPT_VERBOSE, TRUE) <> CURLE_OK then
  14.       Exit;
  15.     // Queremos usar SSL
  16.     if curl_easy_setopt(Curl, CURLOPT_USE_SSL, CURLUSESSL_ALL) <> CURLE_OK then
  17.       Exit;
  18.     // No queremos que compruebe el certificado de gmail
  19.     if curl_easy_setopt(Curl, CURLOPT_SSL_VERIFYPEER, FALSE) <> CURLE_OK then
  20.       Exit;
  21.     // Nombre de usuario
  22.     if curl_easy_setopt(Curl, CURLOPT_USERNAME, PAnsiChar(Usuario)) <> CURLE_OK then
  23.       Exit;
  24.     // Clave
  25.     if curl_easy_setopt(Curl, CURLOPT_PASSWORD, PAnsiChar(Clave)) <> CURLE_OK then
  26.       Exit;
  27.     // URL de gmail
  28.     if curl_easy_setopt(Curl, CURLOPT_URL, PChar('smtps://smtp.gmail.com')) <> CURLE_OK then
  29.       Exit;
  30.     if curl_easy_setopt(Curl, CURLOPT_MAIL_FROM, PAnsiChar(De)) <> CURLE_OK then
  31.       Exit;
  32.     Rcpt:= nil;
  33.     // Creamos una lista con los receptores
  34.     Rcpt:= curl_slist_append(Rcpt,PAnsiChar(Para));
  35.     // Podemos repetir la linea anterior para añadir mas de un receptor
  36.     try
  37.       if curl_easy_setopt(Curl, CURLOPT_MAIL_RCPT, Rcpt) <> CURLE_OK then
  38.         Exit;
  39.       // Le indicamos que tiene que usar la funcion ReadFromStream para leer el contenido del mensaje
  40.       if curl_easy_setopt(Curl, CURLOPT_READFUNCTION, @ReadFromStream) <> CURLE_OK then
  41.         Exit;
  42.       Stream:= TMemoryStream.Create;
  43.       try
  44.         // Creamos el contenido del mensaje y lo guardamos en un stream
  45.  
  46.  
  47.         with TStringList.Create do
  48.         try
  49.           Add('MIME-Version: 1.0');
  50.           Add('Subject: ' + Asunto);
  51.           // Aqui deberiamos de generar una "frontera" que no este contenida dentro de archivo, pero por ahora la usamos fija
  52.           Boundary:= '0FA22F597470466EBF9073DB93B26AB3';
  53.           Add('Content-Type: multipart/mixed; boundary=' + Boundary);
  54.           Add('User-Agent: Curl');
  55.           Add(EmptyStr);
  56.  
  57.           Add('--'+Boundary);
  58.           Add('Content-Type: text/plain');
  59.           Add(EmptyStr);
  60.           Add(Texto);
  61.  
  62.           Add('--'+Boundary);
  63.           Add('Content-Disposition: attachment; filename='
  64.             + ExtractFilename(Archivo));
  65.           Add('Content-type: application/octet-stream; name='
  66.             + ExtractFilename(Archivo));
  67.           Add('Content-Transfer-Encoding: Base64');
  68.           Add(EmptyStr);
  69.           Stream.LoadFromFile(Archivo);
  70.           // Aqui uso la unit base64 que se puede descargar de mi web
  71.           Add(BinToStr(Stream.Memory,Stream.Size));
  72.           Add('--'+Boundary + '--');
  73.           Add(EmptyStr);
  74.           Stream.Clear;
  75.           SaveToStream(Stream);
  76.         finally
  77.           Free;
  78.         end;
  79.  
  80.  
  81.  
  82.  
  83.                 Stream.Position:= 0;
  84.         // Le indicamos que debe usar el stream que acabamos de crear
  85.         if curl_easy_setopt(Curl, CURLOPT_INFILE, Stream) <> CURLE_OK then
  86.           Exit;
  87.         if curl_easy_setopt(Curl, CURLOPT_UPLOAD, TRUE) <> CURLE_OK then
  88.           Exit;
  89.         // Enviamos el mensaje
  90.         Result:= curl_easy_perform(Curl) = CURLE_OK;
  91.       finally
  92.         Stream.Free;
  93.       end;
  94.     finally
  95.       curl_slist_free_all(Rcpt);
  96.     end;
  97.   finally
  98.     curl_easy_cleanup(Curl);
  99.   end;
  100. end;




Es solo una prueba, pero el mensaje parece que llega bien. Google lo acepta sin problemas, no se otros clientes de correo
  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.804 mensajes
  • LocationMéxico

Escrito 27 abril 2011 - 03:25

Vamos a probar :)

Muchas gracias amigo Domingo (y)

Salud OS
  • 0

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.804 mensajes
  • LocationMéxico

Escrito 27 abril 2011 - 03:33

Bueno


Ya envió el correo con el archivo adjunto, pero al querer abrirlo me manda un mensaje o como diria aquí en Mex entre amigos (me pinto unas cremas :D :D :D). La razón seguro es que le quite la parte de BASE64, porque me dió un error, no encuentra la función BintoStr() que me imagino está en la unidad base64 que está en tu web, ¿ me equivoco ? :)
Salud OS

Archivos adjuntos


  • 0

#9 seoane

seoane

    Advanced Member

  • Administrador
  • 1.243 mensajes
  • LocationEspaña

Escrito 27 abril 2011 - 03:34

Bueno


Ya envió el correo con el archivo adjunto, pero al querer abrirlo me manda un mensaje o como diria aquí en Mex entre amigos (me pinto unas cremas :D :D :D). La razón seguro es que le quite la parte de BASE64, porque me dió un error, no encuentra la función BintoStr() que me imagino está en la unidad base64 que está en tu web, ¿ me equivoco ? :)
Salud OS


Exacto. Mas concretamente aquí:
http://delphi.jmrds.com/?q=node/43
  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.804 mensajes
  • LocationMéxico

Escrito 27 abril 2011 - 03:39

Tremendo amigo Domingo,

Ya funcionó como lo dictan los Dioses del Olimpo (y)

Salud OS

PD, Siempre llevo conmigo las unidades que has colgado en tu web, nada mas por si tiro un canasto de gelatinas :D :D :D
  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.804 mensajes
  • LocationMéxico

Escrito 27 abril 2011 - 03:54

Caray

Ya he implementado el código en una aplicación y me está enviando este error

"[DCC Error] USendMail.pas(148): E2036 Variable required"


En esta linea en @ReadFromStream



delphi
  1. // Le indicamos que tiene que usar la funcion ReadFromStream para leer el contenido del mensaje
  2. if curl_easy_setopt(Curl, CURLOPT_READFUNCTION, @ReadFromStream) <> CURLE_OK then



Algunas consideraciones debo tomar en cuenta ?

Salud OS
  • 0

#12 seoane

seoane

    Advanced Member

  • Administrador
  • 1.243 mensajes
  • LocationEspaña

Escrito 27 abril 2011 - 05:31

Comprueba que no tengas algo ya declarado con ese nombre. Prueba a cambiarle el nombre a la función de ReadFromStream a ReadFromStream2
  • 0

#13 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.804 mensajes
  • LocationMéxico

Escrito 27 abril 2011 - 06:50

Muy bien, lo voy a checar, seguramente hice algo mal :) gracias amigo (y)

Salud OS
  • 0

#14 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.804 mensajes
  • LocationMéxico

Escrito 28 abril 2011 - 08:02

Hola,

Pues el problema fué que agregué la función ReadFromStream a la clase, la quite de la clase y la coloque por arriba de donde la mando llamar y funcionó sin problema. (y)

Ya decía yo que algo hice mal :)

Salud OS
  • 0

#15 seoane

seoane

    Advanced Member

  • Administrador
  • 1.243 mensajes
  • LocationEspaña

Escrito 28 abril 2011 - 10:53

Hola,

Pues el problema fué que agregué la función ReadFromStream a la clase, la quite de la clase y la coloque por arriba de donde la mando llamar y funcionó sin problema.

Ya decía yo que algo hice mal

Salud OS


Pues ayer estuve a punto de mencionar lo de la clase, pero supuse que las cosas no iban por ahí ... cuanto tiempo te hubiera ahorrado  :D
Me alegro que te funcione.
  • 0

#16 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.804 mensajes
  • LocationMéxico

Escrito 28 abril 2011 - 11:21

:D :D :D, la verdad es que hasta hoy que llegué a trabajar lo hice, ya me lo imaginaba y fué lo primero que probé :)

Ahora el punto es que me está mostrando un error en la llamada a la función de envío del mensaje



delphi
  1.         // Enviamos el mensaje
  2.         Result:= curl_easy_perform(Curl) = CURLE_OK;



---------------------------
Envia Correo
---------------------------
Access violation at address 004C1F7A in module 'EnviaCorreo.exe'. Read of address 0000000C.
---------------------------
Aceptar 
---------------------------


Tengo todas las dll en el directorio del programa, tal vez estoy omitiendo algo.

Salud OS
  • 0

#17 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.804 mensajes
  • LocationMéxico

Escrito 28 abril 2011 - 01:29

Hola

Ya solucioné el problema del error que me mostraba, atendiendo al mismo problema de la función ReadFromStream quité de la clase que he creado para el envío de correos y dejé una unidad individual con el código de GMail.

Ya recibo los correos desde GMail con adjuntos (y)

Salud OS
  • 0

#18 angelo2007

angelo2007

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 09 agosto 2011 - 12:07




delphi
  1. unit ucurl;
  2.  
  3. interface
  4.  
  5. type
  6.   TCURL = Pointer;
  7.   PCURL = ^TCURL;
  8.  
  9.   CURLcode = (
  10.     CURLE_OK = 0,
  11.     CURLE_UNSUPPORTED_PROTOCOL,
  12.     CURLE_FAILED_INIT,
  13.     CURLE_URL_MALFORMAT,
  14.     CURLE_OBSOLETE4,
  15.     CURLE_COULDNT_RESOLVE_PROXY,
  16.     CURLE_COULDNT_RESOLVE_HOST,
  17.     CURLE_COULDNT_CONNECT,
  18.     CURLE_FTP_WEIRD_SERVER_REPLY,
  19.     CURLE_REMOTE_ACCESS_DENIED,
  20.     CURLE_OBSOLETE10,
  21.     CURLE_FTP_WEIRD_PASS_REPLY,
  22.     CURLE_OBSOLETE12,
  23.     CURLE_FTP_WEIRD_PASV_REPLY,
  24.     CURLE_FTP_WEIRD_227_FORMAT,
  25.     CURLE_FTP_CANT_GET_HOST,
  26.     CURLE_OBSOLETE16,
  27.     CURLE_FTP_COULDNT_SET_TYPE,
  28.     CURLE_PARTIAL_FILE,
  29.     CURLE_FTP_COULDNT_RETR_FILE,
  30.     CURLE_OBSOLETE20,
  31.     CURLE_QUOTE_ERROR,
  32.     CURLE_HTTP_RETURNED_ERROR,
  33.     CURLE_WRITE_ERROR,
  34.     CURLE_OBSOLETE24,
  35.     CURLE_UPLOAD_FAILED,
  36.     CURLE_READ_ERROR,
  37.     CURLE_OUT_OF_MEMORY,
  38.     CURLE_OPERATION_TIMEDOUT,
  39.     CURLE_OBSOLETE29,
  40.     CURLE_FTP_PORT_FAILED,
  41.     CURLE_FTP_COULDNT_USE_REST,
  42.     CURLE_OBSOLETE32,
  43.     CURLE_RANGE_ERROR,
  44.     CURLE_HTTP_POST_ERROR,
  45.     CURLE_SSL_CONNECT_ERROR,
  46.     CURLE_BAD_DOWNLOAD_RESUME,
  47.     CURLE_FILE_COULDNT_READ_FILE,
  48.     CURLE_LDAP_CANNOT_BIND,
  49.     CURLE_LDAP_SEARCH_FAILED,
  50.     CURLE_OBSOLETE40,
  51.     CURLE_FUNCTION_NOT_FOUND,
  52.     CURLE_ABORTED_BY_CALLBACK,
  53.     CURLE_BAD_FUNCTION_ARGUMENT,
  54.     CURLE_OBSOLETE44,
  55.     CURLE_INTERFACE_FAILED,
  56.     CURLE_OBSOLETE46,
  57.     CURLE_TOO_MANY_REDIRECTS ,
  58.     CURLE_UNKNOWN_TELNET_OPTION,
  59.     CURLE_TELNET_OPTION_SYNTAX ,
  60.     CURLE_OBSOLETE50,
  61.     CURLE_PEER_FAILED_VERIFICATION,
  62.     CURLE_GOT_NOTHING,
  63.     CURLE_SSL_ENGINE_NOTFOUND,
  64.     CURLE_SSL_ENGINE_SETFAILED,
  65.     CURLE_SEND_ERROR,
  66.     CURLE_RECV_ERROR,
  67.     CURLE_OBSOLETE57,
  68.     CURLE_SSL_CERTPROBLEM,
  69.     CURLE_SSL_CIPHER,
  70.     CURLE_SSL_CACERT,
  71.     CURLE_BAD_CONTENT_ENCODING,
  72.     CURLE_LDAP_INVALID_URL,
  73.     CURLE_FILESIZE_EXCEEDED,
  74.     CURLE_USE_SSL_FAILED,
  75.     CURLE_SEND_FAIL_REWIND,
  76.     CURLE_SSL_ENGINE_INITFAILED,
  77.     CURLE_LOGIN_DENIED,
  78.     CURLE_TFTP_NOTFOUND,
  79.     CURLE_TFTP_PERM,
  80.     CURLE_REMOTE_DISK_FULL,
  81.     CURLE_TFTP_ILLEGAL,
  82.     CURLE_TFTP_UNKNOWNID,
  83.     CURLE_REMOTE_FILE_EXISTS,
  84.     CURLE_TFTP_NOSUCHUSER,
  85.     CURLE_CONV_FAILED,
  86.     CURLE_CONV_REQD,
  87.     CURLE_SSL_CACERT_BADFILE,
  88.     CURLE_REMOTE_FILE_NOT_FOUND,
  89.     CURLE_SSH,
  90.     CURLE_SSL_SHUTDOWN_FAILED,
  91.     CURLE_AGAIN,
  92.     CURLE_SSL_CRL_BADFILE,
  93.     CURLE_SSL_ISSUER_ERROR,
  94.     CURLE_FTP_PRET_FAILED,
  95.     CURLE_RTSP_CSEQ_ERROR,
  96.     CURLE_RTSP_SESSION_ERROR,
  97.     CURLE_FTP_BAD_FILE_LIST,
  98.     CURLE_CHUNK_FAILED,
  99.     CURL_LAST
  100.   );
  101.  
  102.   CURLoption = (
  103.     CURLOPT_FILE                        = $2711,
  104.     CURLOPT_URL                        = $2712,
  105.     CURLOPT_PORT                        = $0003,
  106.     CURLOPT_PROXY                      = $2714,
  107.     CURLOPT_USERPWD                    = $2715,
  108.     CURLOPT_PROXYUSERPWD                = $2716,
  109.     CURLOPT_RANGE                      = $2717,
  110.     CURLOPT_INFILE                      = $2719,
  111.     CURLOPT_ERRORBUFFER                = $271A,
  112.     CURLOPT_WRITEFUNCTION              = $4E2B,
  113.     CURLOPT_READFUNCTION                = $4E2C,
  114.     CURLOPT_TIMEOUT                    = $000D,
  115.     CURLOPT_INFILESIZE                  = $000E,
  116.     CURLOPT_POSTFIELDS                  = $271F,
  117.     CURLOPT_REFERER                    = $2720,
  118.     CURLOPT_FTPPORT                    = $2721,
  119.     CURLOPT_USERAGENT                  = $2722,
  120.     CURLOPT_LOW_SPEED_LIMIT            = $0013,
  121.     CURLOPT_LOW_SPEED_TIME              = $0014,
  122.     CURLOPT_RESUME_FROM                = $0015,
  123.     CURLOPT_COOKIE                      = $2726,
  124.     CURLOPT_HTTPHEADER                  = $2727,
  125.     CURLOPT_HTTPPOST                    = $2728,
  126.     CURLOPT_SSLCERT                    = $2729,
  127.     CURLOPT_KEYPASSWD                  = $272A,
  128.     CURLOPT_CRLF                        = $001B,
  129.     CURLOPT_QUOTE                      = $272C,
  130.     CURLOPT_WRITEHEADER                = $272D,
  131.     CURLOPT_COOKIEFILE                  = $272F,
  132.     CURLOPT_SSLVERSION                  = $0020,
  133.     CURLOPT_TIMECONDITION              = $0021,
  134.     CURLOPT_TIMEVALUE                  = $0022,
  135.     CURLOPT_CUSTOMREQUEST              = $2734,
  136.     CURLOPT_STDERR                      = $2735,
  137.     CURLOPT_POSTQUOTE                  = $2737,
  138.     CURLOPT_WRITEINFO                  = $2738,
  139.     CURLOPT_VERBOSE                    = $0029,
  140.     CURLOPT_HEADER                      = $002A,
  141.     CURLOPT_NOPROGRESS                  = $002B,
  142.     CURLOPT_NOBODY                      = $002C,
  143.     CURLOPT_FAILONERROR                = $002D,
  144.     CURLOPT_UPLOAD                      = $002E,
  145.     CURLOPT_POST                        = $002F,
  146.     CURLOPT_DIRLISTONLY                = $0030,
  147.     CURLOPT_APPEND                      = $0032,
  148.     CURLOPT_NETRC                      = $0033,
  149.     CURLOPT_FOLLOWLOCATION              = $0034,
  150.     CURLOPT_TRANSFERTEXT                = $0035,
  151.     CURLOPT_PUT                        = $0036,
  152.     CURLOPT_PROGRESSFUNCTION            = $4E58,
  153.     CURLOPT_PROGRESSDATA                = $2749,
  154.     CURLOPT_AUTOREFERER                = $003A,
  155.     CURLOPT_PROXYPORT                  = $003B,
  156.     CURLOPT_POSTFIELDSIZE              = $003C,
  157.     CURLOPT_HTTPPROXYTUNNEL            = $003D,
  158.     CURLOPT_INTERFACE                  = $274E,
  159.     CURLOPT_KRBLEVEL                    = $274F,
  160.     CURLOPT_SSL_VERIFYPEER              = $0040,
  161.     CURLOPT_CAINFO                      = $2751,
  162.     CURLOPT_MAXREDIRS                  = $0044,
  163.     CURLOPT_FILETIME                    = $0045,
  164.     CURLOPT_TELNETOPTIONS              = $2756,
  165.     CURLOPT_MAXCONNECTS                = $0047,
  166.     CURLOPT_CLOSEPOLICY                = $0048,
  167.     CURLOPT_FRESH_CONNECT              = $004A,
  168.     CURLOPT_FORBID_REUSE                = $004B,
  169.     CURLOPT_RANDOM_FILE                = $275C,
  170.     CURLOPT_EGDSOCKET                  = $275D,
  171.     CURLOPT_CONNECTTIMEOUT              = $004E,
  172.     CURLOPT_HEADERFUNCTION              = $4E6F,
  173.     CURLOPT_HTTPGET                    = $0050,
  174.     CURLOPT_SSL_VERIFYHOST              = $0051,
  175.     CURLOPT_COOKIEJAR                  = $2762,
  176.     CURLOPT_SSL_CIPHER_LIST            = $2763,
  177.     CURLOPT_HTTP_VERSION                = $0054,
  178.     CURLOPT_FTP_USE_EPSV                = $0055,
  179.     CURLOPT_SSLCERTTYPE                = $2766,
  180.     CURLOPT_SSLKEY                      = $2767,
  181.     CURLOPT_SSLKEYTYPE                  = $2768,
  182.     CURLOPT_SSLENGINE                  = $2769,
  183.     CURLOPT_SSLENGINE_DEFAULT          = $005A,
  184.     CURLOPT_DNS_USE_GLOBAL_CACHE        = $005B,
  185.     CURLOPT_DNS_CACHE_TIMEOUT          = $005C,
  186.     CURLOPT_PREQUOTE                    = $276D,
  187.     CURLOPT_DEBUGFUNCTION              = $4E7E,
  188.     CURLOPT_DEBUGDATA                  = $276F,
  189.     CURLOPT_COOKIESESSION              = $0060,
  190.     CURLOPT_CAPATH                      = $2771,
  191.     CURLOPT_BUFFERSIZE                  = $0062,
  192.     CURLOPT_NOSIGNAL                    = $0063,
  193.     CURLOPT_SHARE                      = $2774,
  194.     CURLOPT_PROXYTYPE                  = $0065,
  195.     CURLOPT_ENCODING                    = $2776,
  196.     CURLOPT_PRIVATE                    = $2777,
  197.     CURLOPT_HTTP200ALIASES              = $2778,
  198.     CURLOPT_UNRESTRICTED_AUTH          = $0069,
  199.     CURLOPT_FTP_USE_EPRT                = $006A,
  200.     CURLOPT_HTTPAUTH                    = $006B,
  201.     CURLOPT_SSL_CTX_FUNCTION            = $4E8C,
  202.     CURLOPT_SSL_CTX_DATA                = $277D,
  203.     CURLOPT_FTP_CREATE_MISSING_DIRS    = $006E,
  204.     CURLOPT_PROXYAUTH                  = $006F,
  205.     CURLOPT_FTP_RESPONSE_TIMEOUT        = $0070,
  206.     CURLOPT_IPRESOLVE                  = $0071,
  207.     CURLOPT_MAXFILESIZE                = $0072,
  208.     CURLOPT_INFILESIZE_LARGE            = $75A3,
  209.     CURLOPT_RESUME_FROM_LARGE          = $75A4,
  210.     CURLOPT_MAXFILESIZE_LARGE          = $75A5,
  211.     CURLOPT_NETRC_FILE                  = $2786,
  212.     CURLOPT_USE_SSL                    = $0077,
  213.     CURLOPT_POSTFIELDSIZE_LARGE        = $75A8,
  214.     CURLOPT_TCP_NODELAY                = $0079,
  215.     CURLOPT_FTPSSLAUTH                  = $0081,
  216.     CURLOPT_IOCTLFUNCTION              = $4EA2,
  217.     CURLOPT_IOCTLDATA                  = $2793,
  218.     CURLOPT_FTP_ACCOUNT                = $2796,
  219.     CURLOPT_COOKIELIST                  = $2797,
  220.     CURLOPT_IGNORE_CONTENT_LENGTH      = $0088,
  221.     CURLOPT_FTP_SKIP_PASV_IP            = $0089,
  222.     CURLOPT_FTP_FILEMETHOD              = $008A,
  223.     CURLOPT_LOCALPORT                  = $008B,
  224.     CURLOPT_LOCALPORTRANGE              = $008C,
  225.     CURLOPT_CONNECT_ONLY                = $008D,
  226.     CURLOPT_CONV_FROM_NETWORK_FUNCTION  = $4EAE,
  227.     CURLOPT_CONV_TO_NETWORK_FUNCTION    = $4EAF,
  228.     CURLOPT_CONV_FROM_UTF8_FUNCTION    = $4EB0,
  229.     CURLOPT_MAX_SEND_SPEED_LARGE        = $75C1,
  230.     CURLOPT_MAX_RECV_SPEED_LARGE        = $75C2,
  231.     CURLOPT_FTP_ALTERNATIVE_TO_USER    = $27A3,
  232.     CURLOPT_SOCKOPTFUNCTION            = $4EB4,
  233.     CURLOPT_SOCKOPTDATA                = $27A5,
  234.     CURLOPT_SSL_SESSIONID_CACHE        = $0096,
  235.     CURLOPT_SSH_AUTH_TYPES              = $0097,
  236.     CURLOPT_SSH_PUBLIC_KEYFILE          = $27A8,
  237.     CURLOPT_SSH_PRIVATE_KEYFILE        = $27A9,
  238.     CURLOPT_FTP_SSL_CCC                = $009A,
  239.     CURLOPT_TIMEOUT_MS                  = $009B,
  240.     CURLOPT_CONNECTTIMEOUT_MS          = $009C,
  241.     CURLOPT_HTTP_TRANSFER_DECODING      = $009D,
  242.     CURLOPT_HTTP_CONTENT_DECODING      = $009E,
  243.     CURLOPT_NEW_FILE_PERMS              = $009F,
  244.     CURLOPT_NEW_DIRECTORY_PERMS        = $00A0,
  245.     CURLOPT_POSTREDIR                  = $00A1,
  246.     CURLOPT_SSH_HOST_PUBLIC_KEY_MD5    = $27B2,
  247.     CURLOPT_OPENSOCKETFUNCTION          = $4EC3,
  248.     CURLOPT_OPENSOCKETDATA              = $27B4,
  249.     CURLOPT_COPYPOSTFIELDS              = $27B5,
  250.     CURLOPT_PROXY_TRANSFER_MODE        = $00A6,
  251.     CURLOPT_SEEKFUNCTION                = $4EC7,
  252.     CURLOPT_SEEKDATA                    = $27B8,
  253.     CURLOPT_CRLFILE                    = $27B9,
  254.     CURLOPT_ISSUERCERT                  = $27BA,
  255.     CURLOPT_ADDRESS_SCOPE              = $00AB,
  256.     CURLOPT_CERTINFO                    = $00AC,
  257.     CURLOPT_USERNAME                    = $27BD,
  258.     CURLOPT_PASSWORD                    = $27BE,
  259.     CURLOPT_PROXYUSERNAME              = $27BF,
  260.     CURLOPT_PROXYPASSWORD              = $27C0,
  261.     CURLOPT_NOPROXY                    = $27C1,
  262.     CURLOPT_TFTP_BLKSIZE                = $00B2,
  263.     CURLOPT_SOCKS5_GSSAPI_SERVICE      = $27C3,
  264.     CURLOPT_SOCKS5_GSSAPI_NEC          = $00B4,
  265.     CURLOPT_PROTOCOLS                  = $00B5,
  266.     CURLOPT_REDIR_PROTOCOLS            = $00B6,
  267.     CURLOPT_SSH_KNOWNHOSTS              = $27C7,
  268.     CURLOPT_SSH_KEYFUNCTION            = $4ED8,
  269.     CURLOPT_SSH_KEYDATA                = $27C9,
  270.     CURLOPT_MAIL_FROM                  = $27CA,
  271.     CURLOPT_MAIL_RCPT                  = $27CB,
  272.     CURLOPT_FTP_USE_PRET                = $00BC,
  273.     CURLOPT_RTSP_REQUEST                = $00BD,
  274.     CURLOPT_RTSP_SESSION_ID            = $27CE,
  275.     CURLOPT_RTSP_STREAM_URI            = $27CF,
  276.     CURLOPT_RTSP_TRANSPORT              = $27D0,
  277.     CURLOPT_RTSP_CLIENT_CSEQ            = $00C1,
  278.     CURLOPT_RTSP_SERVER_CSEQ            = $00C2,
  279.     CURLOPT_INTERLEAVEDATA              = $27D3,
  280.     CURLOPT_INTERLEAVEFUNCTION          = $4EE4,
  281.     CURLOPT_WILDCARDMATCH              = $00C5,
  282.     CURLOPT_CHUNK_BGN_FUNCTION          = $4EE6,
  283.     CURLOPT_CHUNK_END_FUNCTION          = $4EE7,
  284.     CURLOPT_FNMATCH_FUNCTION            = $4EE8,
  285.     CURLOPT_CHUNK_DATA                  = $27D9,
  286.     CURLOPT_FNMATCH_DATA                = $27DA,
  287.     CURLOPT_RESOLVE                    = $27DB,
  288.     CURLOPT_TLSAUTH_USERNAME            = $27DC,
  289.     CURLOPT_TLSAUTH_PASSWORD            = $27DD,
  290.     CURLOPT_TLSAUTH_TYPE                = $27DE
  291.   );
  292.  
  293.   curl_usessl = (
  294.     CURLUSESSL_NONE = 0,
  295.     CURLUSESSL_TRY,
  296.     CURLUSESSL_CONTROL,
  297.     CURLUSESSL_ALL,
  298.     CURLUSESSL_LAST
  299.   );
  300.  
  301.   pcurl_slist = ^curl_slist;
  302.   curl_slist = record
  303.     data: PAnsiChar;
  304.     next: ^pcurl_slist;
  305.   end;
  306.  
  307.  
  308. const
  309.   libcurl = 'libcurl.dll';
  310.  
  311.   CURL_GLOBAL_SSL = 1;
  312.   CURL_GLOBAL_WIN32 = 2;
  313.   CURL_GLOBAL_ALL = CURL_GLOBAL_SSL or CURL_GLOBAL_WIN32;
  314.   CURL_GLOBAL_NOTHING = 0;
  315.   CURL_GLOBAL_DEFAULT = CURL_GLOBAL_ALL;
  316.  
  317.  
  318. // easy interface
  319. function curl_easy_init: TCURL;
  320.   cdecl; external libcurl;
  321. function curl_easy_setopt(curl: TCURL; option: CURLoption): CURLcode;
  322.   cdecl; varargs; external libcurl;
  323. function curl_easy_perform(curl: TCURL): CURLcode;
  324.   cdecl; external libcurl;
  325. procedure curl_easy_cleanup(curl: TCURL);
  326.   cdecl; external libcurl;
  327. // initialization
  328. function curl_global_init(flags: Longint): CURLcode;
  329.   cdecl; external libcurl;
  330. procedure curl_global_cleanup;
  331.   cdecl; external libcurl;
  332. // curl_slist
  333. function curl_slist_append(list: pcurl_slist; const Str: PAnsiChar): pcurl_slist;
  334.   cdecl; external libcurl;
  335. procedure curl_slist_free_all(list: pcurl_slist);
  336.   cdecl; external libcurl;
  337.  
  338. implementation
  339.  
  340. initialization
  341.   curl_global_init(CURL_GLOBAL_ALL);
  342. finalization
  343.   curl_global_cleanup;
  344. end.




Y aqui esta el código para enviar el correo:


delphi
  1. function ReadFromStream(Buffer: PAnsiChar; Size, Count: Integer;
  2.   Stream: TStream): Integer; cdecl;
  3. begin
  4.   Result:= Stream.Read(Buffer^,Size*Count) div Size;
  5. end;
  6.  
  7. function EnviarMail(Usuario, Clave, De, Para, Asunto, Texto: AnsiString): Boolean;
  8. var
  9.   Curl: TCURL;
  10.   Rcpt: pcurl_slist;
  11.   Stream: TMemoryStream;
  12. begin
  13.   Result:= FALSE;
  14.   Curl:= curl_easy_init;
  15.   if Curl <> nil then
  16.   try
  17.     // Queremos que se muestre informacion sobre todo el proceso
  18.     if curl_easy_setopt(Curl, CURLOPT_VERBOSE, TRUE) <> CURLE_OK then
  19.       Exit;
  20.     // Queremos usar SSL
  21.     if curl_easy_setopt(Curl, CURLOPT_USE_SSL, CURLUSESSL_ALL) <> CURLE_OK then
  22.       Exit;
  23.     // No queremos que compruebe el certificado de gmail
  24.     if curl_easy_setopt(Curl, CURLOPT_SSL_VERIFYPEER, FALSE) <> CURLE_OK then
  25.       Exit;
  26.     // Nombre de usuario
  27.     if curl_easy_setopt(Curl, CURLOPT_USERNAME, PAnsiChar(Usuario)) <> CURLE_OK then
  28.       Exit;
  29.     // Clave
  30.     if curl_easy_setopt(Curl, CURLOPT_PASSWORD, PAnsiChar(Clave)) <> CURLE_OK then
  31.       Exit;
  32.     // URL de gmail
  33.     if curl_easy_setopt(Curl, CURLOPT_URL, PChar('smtps://smtp.gmail.com')) <> CURLE_OK then
  34.       Exit;
  35.     if curl_easy_setopt(Curl, CURLOPT_MAIL_FROM, PAnsiChar(De)) <> CURLE_OK then
  36.       Exit;
  37.     Rcpt:= nil;
  38.     // Creamos una lista con los receptores
  39.     Rcpt:= curl_slist_append(Rcpt,PAnsiChar(Para));
  40.     // Podemos repetir la linea anterior para añadir mas de un receptor
  41.     try
  42.       if curl_easy_setopt(Curl, CURLOPT_MAIL_RCPT, Rcpt) <> CURLE_OK then
  43.         Exit;
  44.       // Le indicamos que tiene que usar la funcion ReadFromStream para leer el contenido del mensaje
  45.       if curl_easy_setopt(Curl, CURLOPT_READFUNCTION, @ReadFromStream) <> CURLE_OK then
  46.         Exit;
  47.       Stream:= TMemoryStream.Create;
  48.       try
  49.         // Creamos el contenido del mensaje y lo guardamos en un stream
  50.         with TStringList.Create do
  51.         try
  52.           Add('Content-Type: text/plain;');
  53.           Add('Subject: ' + Asunto);
  54.           Add('User-Agent: Curl');
  55.           Add(EmptyStr);
  56.           Add(Texto);
  57.           SaveToStream(Stream);
  58.         finally
  59.           Free;
  60.         end;
  61.         Stream.Position:= 0;
  62.         // Le indicamos que debe usar el stream que acabamos de crear
  63.         if curl_easy_setopt(Curl, CURLOPT_INFILE, Stream) <> CURLE_OK then
  64.           Exit;
  65.         if curl_easy_setopt(Curl, CURLOPT_UPLOAD, TRUE) <> CURLE_OK then
  66.           Exit;
  67.         // Enviamos el mensaje
  68.         Result:= curl_easy_perform(Curl) = CURLE_OK;
  69.       finally
  70.         Stream.Free;
  71.       end;
  72.     finally
  73.       curl_slist_free_all(Rcpt);
  74.     end;
  75.   finally
  76.     curl_easy_cleanup(Curl);
  77.   end;
  78. end;


Aquí dejo un ejemplo, en un archivo zip, pero hay que copiar las dll de la carpeta "bin" para que funcione.


hola

seoane-

una duda

como es que sabes o como se contruyen estas declaraciones qu pones




delphi
  1. unit ucurl;
  2.  
  3. interface
  4.  
  5. type
  6.   TCURL = Pointer;
  7.   PCURL = ^TCURL;
  8.  
  9.   CURLcode = (
  10.     CURLE_OK = 0,
  11.     CURLE_UNSUPPORTED_PROTOCOL,
  12.     CURLE_FAILED_INIT,
  13.     CURLE_URL_MALFORMAT,
  14.     CURLE_OBSOLETE4,
  15.     CURLE_COULDNT_RESOLVE_PROXY,
  16.     CURLE_COULDNT_RESOLVE_HOST,
  17.     CURLE_COULDNT_CONNECT,
  18.     CURLE_FTP_WEIRD_SERVER_REPLY,
  19.     CURLE_REMOTE_ACCESS_DENIED,
  20.     CURLE_OBSOLETE10,
  21.     CURLE_FTP_WEIRD_PASS_REPLY,
  22.     CURLE_OBSOLETE12,
  23.     CURLE_FTP_WEIRD_PASV_REPLY,
  24.     CURLE_FTP_WEIRD_227_FORMAT,
  25.     CURLE_FTP_CANT_GET_HOST,
  26.     CURLE_OBSOLETE16,
  27.     CURLE_FTP_COULDNT_SET_TYPE,
  28.     CURLE_PARTIAL_FILE,
  29.     CURLE_FTP_COULDNT_RETR_FILE,
  30.     CURLE_OBSOLETE20,
  31.     CURLE_QUOTE_ERROR,
  32.     CURLE_HTTP_RETURNED_ERROR,
  33.     CURLE_WRITE_ERROR,
  34.     CURLE_OBSOLETE24,
  35.     CURLE_UPLOAD_FAILED,
  36.     CURLE_READ_ERROR,
  37.     CURLE_OUT_OF_MEMORY,
  38.     CURLE_OPERATION_TIMEDOUT,
  39.     CURLE_OBSOLETE29,
  40.     CURLE_FTP_PORT_FAILED,
  41.     CURLE_FTP_COULDNT_USE_REST,
  42.     CURLE_OBSOLETE32,
  43.     CURLE_RANGE_ERROR,
  44.     CURLE_HTTP_POST_ERROR,
  45.     CURLE_SSL_CONNECT_ERROR,
  46.     CURLE_BAD_DOWNLOAD_RESUME,
  47.     CURLE_FILE_COULDNT_READ_FILE,
  48.     CURLE_LDAP_CANNOT_BIND,
  49.     CURLE_LDAP_SEARCH_FAILED,
  50.     CURLE_OBSOLETE40,
  51.     CURLE_FUNCTION_NOT_FOUND,
  52.     CURLE_ABORTED_BY_CALLBACK,
  53.     CURLE_BAD_FUNCTION_ARGUMENT,
  54.     CURLE_OBSOLETE44,
  55.     CURLE_INTERFACE_FAILED,
  56.     CURLE_OBSOLETE46,
  57.     CURLE_TOO_MANY_REDIRECTS ,
  58.     CURLE_UNKNOWN_TELNET_OPTION,
  59.     CURLE_TELNET_OPTION_SYNTAX ,
  60.     CURLE_OBSOLETE50,
  61.     CURLE_PEER_FAILED_VERIFICATION,
  62.     CURLE_GOT_NOTHING,
  63.     CURLE_SSL_ENGINE_NOTFOUND,
  64.     CURLE_SSL_ENGINE_SETFAILED,
  65.     CURLE_SEND_ERROR,
  66.     CURLE_RECV_ERROR,
  67.     CURLE_OBSOLETE57,
  68.     CURLE_SSL_CERTPROBLEM,
  69.     CURLE_SSL_CIPHER,
  70.     CURLE_SSL_CACERT,
  71.     CURLE_BAD_CONTENT_ENCODING,
  72.     CURLE_LDAP_INVALID_URL,
  73.     CURLE_FILESIZE_EXCEEDED,
  74.     CURLE_USE_SSL_FAILED,
  75.     CURLE_SEND_FAIL_REWIND,
  76.     CURLE_SSL_ENGINE_INITFAILED,
  77.     CURLE_LOGIN_DENIED,
  78.     CURLE_TFTP_NOTFOUND,
  79.     CURLE_TFTP_PERM,
  80.     CURLE_REMOTE_DISK_FULL,
  81.     CURLE_TFTP_ILLEGAL,
  82.     CURLE_TFTP_UNKNOWNID,
  83.     CURLE_REMOTE_FILE_EXISTS,
  84.     CURLE_TFTP_NOSUCHUSER,
  85.     CURLE_CONV_FAILED,
  86.     CURLE_CONV_REQD,
  87.     CURLE_SSL_CACERT_BADFILE,
  88.     CURLE_REMOTE_FILE_NOT_FOUND,
  89.     CURLE_SSH,
  90.     CURLE_SSL_SHUTDOWN_FAILED,
  91.     CURLE_AGAIN,
  92.     CURLE_SSL_CRL_BADFILE,
  93.     CURLE_SSL_ISSUER_ERROR,
  94.     CURLE_FTP_PRET_FAILED,
  95.     CURLE_RTSP_CSEQ_ERROR,
  96.     CURLE_RTSP_SESSION_ERROR,
  97.     CURLE_FTP_BAD_FILE_LIST,
  98.     CURLE_CHUNK_FAILED,
  99.     CURL_LAST
  100.   );
  101.  
  102.   CURLoption = (
  103.     CURLOPT_FILE                        = $2711,
  104.     CURLOPT_URL                        = $2712,
  105.     CURLOPT_PORT                        = $0003,
  106.     CURLOPT_PROXY                      = $2714,
  107.     CURLOPT_USERPWD                    = $2715,
  108.     CURLOPT_PROXYUSERPWD                = $2716,
  109.     CURLOPT_RANGE                      = $2717,
  110.     CURLOPT_INFILE                      = $2719,
  111.     CURLOPT_ERRORBUFFER                = $271A,
  112.     CURLOPT_WRITEFUNCTION              = $4E2B,
  113.     CURLOPT_READFUNCTION                = $4E2C,
  114.     CURLOPT_TIMEOUT                    = $000D,
  115.     CURLOPT_INFILESIZE                  = $000E,
  116.     CURLOPT_POSTFIELDS                  = $271F,
  117.     CURLOPT_REFERER                    = $2720,
  118.     CURLOPT_FTPPORT                    = $2721,
  119.     CURLOPT_USERAGENT                  = $2722,
  120.     CURLOPT_LOW_SPEED_LIMIT            = $0013,
  121.     CURLOPT_LOW_SPEED_TIME              = $0014,
  122.     CURLOPT_RESUME_FROM                = $0015,
  123.     CURLOPT_COOKIE                      = $2726,
  124.     CURLOPT_HTTPHEADER                  = $2727,
  125.     CURLOPT_HTTPPOST                    = $2728,
  126.     CURLOPT_SSLCERT                    = $2729,
  127.     CURLOPT_KEYPASSWD                  = $272A,
  128.     CURLOPT_CRLF                        = $001B,
  129.     CURLOPT_QUOTE                      = $272C,
  130.     CURLOPT_WRITEHEADER                = $272D,
  131.     CURLOPT_COOKIEFILE                  = $272F,
  132.     CURLOPT_SSLVERSION                  = $0020,
  133.     CURLOPT_TIMECONDITION              = $0021,
  134.     CURLOPT_TIMEVALUE                  = $0022,
  135.     CURLOPT_CUSTOMREQUEST              = $2734,
  136.     CURLOPT_STDERR                      = $2735,
  137.     CURLOPT_POSTQUOTE                  = $2737,
  138.     CURLOPT_WRITEINFO                  = $2738,
  139.     CURLOPT_VERBOSE                    = $0029,
  140.     CURLOPT_HEADER                      = $002A,
  141.     CURLOPT_NOPROGRESS                  = $002B,
  142.     CURLOPT_NOBODY                      = $002C,
  143.     CURLOPT_FAILONERROR                = $002D,
  144.     CURLOPT_UPLOAD                      = $002E,
  145.     CURLOPT_POST                        = $002F,
  146.     CURLOPT_DIRLISTONLY                = $0030,
  147.     CURLOPT_APPEND                      = $0032,
  148.     CURLOPT_NETRC                      = $0033,
  149.     CURLOPT_FOLLOWLOCATION              = $0034,
  150.     CURLOPT_TRANSFERTEXT                = $0035,
  151.     CURLOPT_PUT                        = $0036,
  152.     CURLOPT_PROGRESSFUNCTION            = $4E58,
  153.     CURLOPT_PROGRESSDATA                = $2749,
  154.     CURLOPT_AUTOREFERER                = $003A,
  155.     CURLOPT_PROXYPORT                  = $003B,
  156.     CURLOPT_POSTFIELDSIZE              = $003C,
  157.     CURLOPT_HTTPPROXYTUNNEL            = $003D,
  158.     CURLOPT_INTERFACE                  = $274E,
  159.     CURLOPT_KRBLEVEL                    = $274F,
  160.     CURLOPT_SSL_VERIFYPEER              = $0040,
  161.     CURLOPT_CAINFO                      = $2751,
  162.     CURLOPT_MAXREDIRS                  = $0044,
  163.     CURLOPT_FILETIME                    = $0045,
  164.     CURLOPT_TELNETOPTIONS              = $2756,
  165.     CURLOPT_MAXCONNECTS                = $0047,
  166.     CURLOPT_CLOSEPOLICY                = $0048,
  167.     CURLOPT_FRESH_CONNECT              = $004A,
  168.     CURLOPT_FORBID_REUSE                = $004B,
  169.     CURLOPT_RANDOM_FILE                = $275C,
  170.     CURLOPT_EGDSOCKET                  = $275D,
  171.     CURLOPT_CONNECTTIMEOUT              = $004E,
  172.     CURLOPT_HEADERFUNCTION              = $4E6F,
  173.     CURLOPT_HTTPGET                    = $0050,
  174.     CURLOPT_SSL_VERIFYHOST              = $0051,
  175.     CURLOPT_COOKIEJAR                  = $2762,
  176.     CURLOPT_SSL_CIPHER_LIST            = $2763,
  177.     CURLOPT_HTTP_VERSION                = $0054,
  178.     CURLOPT_FTP_USE_EPSV                = $0055,
  179.     CURLOPT_SSLCERTTYPE                = $2766,
  180.     CURLOPT_SSLKEY                      = $2767,
  181.     CURLOPT_SSLKEYTYPE                  = $2768,
  182.     CURLOPT_SSLENGINE                  = $2769,
  183.     CURLOPT_SSLENGINE_DEFAULT          = $005A,
  184.     CURLOPT_DNS_USE_GLOBAL_CACHE        = $005B,
  185.     CURLOPT_DNS_CACHE_TIMEOUT          = $005C,
  186.     CURLOPT_PREQUOTE                    = $276D,
  187.     CURLOPT_DEBUGFUNCTION              = $4E7E,
  188.     CURLOPT_DEBUGDATA                  = $276F,
  189.     CURLOPT_COOKIESESSION              = $0060,
  190.     CURLOPT_CAPATH                      = $2771,
  191.     CURLOPT_BUFFERSIZE                  = $0062,
  192.     CURLOPT_NOSIGNAL                    = $0063,
  193.     CURLOPT_SHARE                      = $2774,
  194.     CURLOPT_PROXYTYPE                  = $0065,
  195.     CURLOPT_ENCODING                    = $2776,
  196.     CURLOPT_PRIVATE                    = $2777,
  197.     CURLOPT_HTTP200ALIASES              = $2778,
  198.     CURLOPT_UNRESTRICTED_AUTH          = $0069,
  199.     CURLOPT_FTP_USE_EPRT                = $006A,
  200.     CURLOPT_HTTPAUTH                    = $006B,
  201.     CURLOPT_SSL_CTX_FUNCTION            = $4E8C,
  202.     CURLOPT_SSL_CTX_DATA                = $277D,
  203.     CURLOPT_FTP_CREATE_MISSING_DIRS    = $006E,
  204.     CURLOPT_PROXYAUTH                  = $006F,
  205.     CURLOPT_FTP_RESPONSE_TIMEOUT        = $0070,
  206.     CURLOPT_IPRESOLVE                  = $0071,
  207.     CURLOPT_MAXFILESIZE                = $0072,
  208.     CURLOPT_INFILESIZE_LARGE            = $75A3,
  209.     CURLOPT_RESUME_FROM_LARGE          = $75A4,
  210.     CURLOPT_MAXFILESIZE_LARGE          = $75A5,
  211.     CURLOPT_NETRC_FILE                  = $2786,
  212.     CURLOPT_USE_SSL                    = $0077,
  213.     CURLOPT_POSTFIELDSIZE_LARGE        = $75A8,
  214.     CURLOPT_TCP_NODELAY                = $0079,
  215.     CURLOPT_FTPSSLAUTH                  = $0081,
  216.     CURLOPT_IOCTLFUNCTION              = $4EA2,
  217.     CURLOPT_IOCTLDATA                  = $2793,
  218.     CURLOPT_FTP_ACCOUNT                = $2796,
  219.     CURLOPT_COOKIELIST                  = $2797,
  220.     CURLOPT_IGNORE_CONTENT_LENGTH      = $0088,
  221.     CURLOPT_FTP_SKIP_PASV_IP            = $0089,
  222.     CURLOPT_FTP_FILEMETHOD              = $008A,
  223.     CURLOPT_LOCALPORT                  = $008B,
  224.     CURLOPT_LOCALPORTRANGE              = $008C,
  225.     CURLOPT_CONNECT_ONLY                = $008D,
  226.     CURLOPT_CONV_FROM_NETWORK_FUNCTION  = $4EAE,
  227.     CURLOPT_CONV_TO_NETWORK_FUNCTION    = $4EAF,
  228.     CURLOPT_CONV_FROM_UTF8_FUNCTION    = $4EB0,
  229.     CURLOPT_MAX_SEND_SPEED_LARGE        = $75C1,
  230.     CURLOPT_MAX_RECV_SPEED_LARGE        = $75C2,
  231.     CURLOPT_FTP_ALTERNATIVE_TO_USER    = $27A3,
  232.     CURLOPT_SOCKOPTFUNCTION            = $4EB4,
  233.     CURLOPT_SOCKOPTDATA                = $27A5,
  234.     CURLOPT_SSL_SESSIONID_CACHE        = $0096,
  235.     CURLOPT_SSH_AUTH_TYPES              = $0097,
  236.     CURLOPT_SSH_PUBLIC_KEYFILE          = $27A8,
  237.     CURLOPT_SSH_PRIVATE_KEYFILE        = $27A9,
  238.     CURLOPT_FTP_SSL_CCC                = $009A,
  239.     CURLOPT_TIMEOUT_MS                  = $009B,
  240.     CURLOPT_CONNECTTIMEOUT_MS          = $009C,
  241.     CURLOPT_HTTP_TRANSFER_DECODING      = $009D,
  242.     CURLOPT_HTTP_CONTENT_DECODING      = $009E,
  243.     CURLOPT_NEW_FILE_PERMS              = $009F,
  244.     CURLOPT_NEW_DIRECTORY_PERMS        = $00A0,
  245.     CURLOPT_POSTREDIR                  = $00A1,
  246.     CURLOPT_SSH_HOST_PUBLIC_KEY_MD5    = $27B2,
  247.     CURLOPT_OPENSOCKETFUNCTION          = $4EC3,
  248.     CURLOPT_OPENSOCKETDATA              = $27B4,
  249.     CURLOPT_COPYPOSTFIELDS              = $27B5,
  250.     CURLOPT_PROXY_TRANSFER_MODE        = $00A6,
  251.     CURLOPT_SEEKFUNCTION                = $4EC7,
  252.     CURLOPT_SEEKDATA                    = $27B8,
  253.     CURLOPT_CRLFILE                    = $27B9,
  254.     CURLOPT_ISSUERCERT                  = $27BA,
  255.     CURLOPT_ADDRESS_SCOPE              = $00AB,
  256.     CURLOPT_CERTINFO                    = $00AC,
  257.     CURLOPT_USERNAME                    = $27BD,
  258.     CURLOPT_PASSWORD                    = $27BE,
  259.     CURLOPT_PROXYUSERNAME              = $27BF,
  260.     CURLOPT_PROXYPASSWORD              = $27C0,
  261.     CURLOPT_NOPROXY                    = [b]$27C1,[/b]
  262.     CURLOPT_TFTP_BLKSIZE                = [b]$00B2,[/b]
  263.     CURLOPT_SOCKS5_GSSAPI_SERVICE      = $27C3,
  264.     CURLOPT_SOCKS5_GSSAPI_NEC          =[b] $00B4[/b],
  265.     CURLOPT_PROTOCOLS                  = $00B5,
  266.     CURLOPT_REDIR_PROTOCOLS            = $00B6,
  267.     CURLOPT_SSH_KNOWNHOSTS              = $27C7,
  268.     CURLOPT_SSH_KEYFUNCTION            = $4ED8,
  269.     CURLOPT_SSH_KEYDATA                = $27C9,
  270.     CURLOPT_MAIL_FROM                  = $27CA,
  271.     CURLOPT_MAIL_RCPT                  = $27CB,
  272.     CURLOPT_FTP_USE_PRET                = $00BC,
  273.     CURLOPT_RTSP_REQUEST                = $00BD,
  274.     CURLOPT_RTSP_SESSION_ID            = $27CE,
  275.     CURLOPT_RTSP_STREAM_URI            = $27CF,
  276.     CURLOPT_RTSP_TRANSPORT              = $27D0,
  277.     CURLOPT_RTSP_CLIENT_CSEQ            = $00C1,
  278.     CURLOPT_RTSP_SERVER_CSEQ            = $00C2,
  279.     CURLOPT_INTERLEAVEDATA              = $27D3,
  280.     CURLOPT_INTERLEAVEFUNCTION          = $4EE4,
  281.     CURLOPT_WILDCARDMATCH              = $00C5,
  282.     CURLOPT_CHUNK_BGN_FUNCTION          = $4EE6,
  283.     CURLOPT_CHUNK_END_FUNCTION          = $4EE7,
  284.     CURLOPT_FNMATCH_FUNCTION            = $4EE8,
  285.     CURLOPT_CHUNK_DATA                  = $27D9,
  286.     CURLOPT_FNMATCH_DATA                = $27DA,
  287.     CURLOPT_RESOLVE                    = $27DB,
  288.     CURLOPT_TLSAUTH_USERNAME            = $27DC,
  289.     CURLOPT_TLSAUTH_PASSWORD            = $27DD,
  290.     CURLOPT_TLSAUTH_TYPE                = [b]$27DE[/b]
  291.   );
  292.  
  293. y como es que sabes que poner por ejemplo
  294. aqui estas ¿usando hexadecimales?
  295.  
  296.   CURLOPT_TLSAUTH_TYPE                = [b]$27DE
  297.  
  298.  
  299. bueno ahora mismo hago la prueba de egostar para enviar un mail con
  300. adjuntos.
  301.  
  302. me perdi en que se quita la declracion de la clase.
  303.  
  304. otra duda mas ¿estas  usando BDS 4  osea delphi 2006 win32?
  305.  
  306. gracias por tu atencion.
  307. [/b]


  • 0

#19 seoane

seoane

    Advanced Member

  • Administrador
  • 1.243 mensajes
  • LocationEspaña

Escrito 09 agosto 2011 - 03:31

Pues esos valores los saque del fichero curl.h que se encuentra dentro del las fuentes de Curl. Lo único que hice fue traducir a delphi las constantes y funciones que me parecieron interesantes, no todo el fichero.

En el primer caso dejo que la enumeración siga el orden natural (de 0 en adelante), al igual que en curl.h, mientras que en el segundo caso me veo obligado a indicar el valor de cada una ya que no siguen un orden, así que mientras en el curl.h utilizan una macro para asignar cada valor, yo me hice un pequeño programita que ecorrio el fichero curl.h y me dio el valor correspondiente de cada constante en formato pascal.

En cuanto a tu pregunta de si uso hexadecimal, la respuesta es que si ($ es el prefijo que se utiliza en pascal para lo hexadecimales, pero podría haber utilizado decimales, simplemente me pareció que quedaba todo mas ordenado usando hexadecimales, pero eso ya depende del gusto de cada uno.
  • 0

#20 seoane

seoane

    Advanced Member

  • Administrador
  • 1.243 mensajes
  • LocationEspaña

Escrito 09 agosto 2011 - 03:37

Se me olvidaba, uso TurboDelphi Explorer que es la, efímera, versión de delphi que se distribuyo de forma gratuita (y legal) durante un tiempo, con la única limitación de que no se podían instalar componentes de terceros (al menos sin romper el acuerdo de la licencia). Entre los componentes que no se pueden instalar están los Indy por eso mi interés por Curl.

Esta versión, por lo que he leido, creo que es similar a un Delphi 2006 para win32
  • 0