ItGo.me Focus on IT Recommend

Home > c++ - Reading emails from gmail POP3 account using libCurl

c++ - Reading emails from gmail POP3 account using libCurl

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
入口地址https://www.aliyun.com/minisite/goods

up vote 3 down vote favorite 4 I need your help guys... I'm currently working in a C++ project which has to be able to read emails from an gmail POP3 account just like the title says. Also is important to say that i need to download the attachments (is encode base64?) of the mail and its body. The fact is that everyone recommend to use libCurl for this task, but the code sample on their web is not working. I saw this example on Libcurl website: #include <stdio.h>

#include <curl/curl.h>

int main(void)

{

CURL *curl;

CURLcode res;

curl = curl_easy_init();

if(curl)

{

/* Set username and password */

curl_easy_setopt(curl, CURLOPT_USERPWD, "user:password");

/* This will only fetch the message with ID "1" of the given mailbox */

curl_easy_setopt(curl, CURLOPT_URL, "pop3s://user@pop.example.com/1");

/* Perform the request, res will get the return code */

res = curl_easy_perform(curl);

/* Check for errors */

if(res != CURLE_OK)

fprintf(stderr, "curl_easy_perform() failed: %s\n",

curl_easy_strerror(res));

/* always cleanup */

curl_easy_cleanup(curl);

}

return 0;

}

As you see, the code looks pretty easy for fetching email by email inside the inbox, but when i try to perform the operation with CURLcode curl_easy_perform(CURL *) the function doesn't return anything and the process 'dies' so i can't skip this line. My code is the following one: void MailServer::Open(char *username,char *password)

{

m_username = username; //username = example@gmail.com

m_password = password; //password = blabla123

curl = curl_easy_init();

curl_easy_setopt(curl,CURLOPT_USERNAME,username);

curl_easy_setopt(curl,CURLOPT_PASSWORD,password);

m_popsAccount = "pop3s://" + m_username +"/1";

curl_easy_setopt(curl, CURLOPT_URL, m_popsAccount.c_str());

res = curl_easy_perform(curl); //here does not return anything

}

I tried to find some 'clear' example on the web, but i really couldn't... Someone could give me a hand with it? :) c++ libcurl pop3
  |
  this question edited Nov 6 '13 at 12:36 asked Nov 6 '13 at 12:28 Mauro Bilotti 1,735 16 31 1   why downvoted? :S –  Mauro Bilotti Sep 1 '15 at 16:09



 |  1 Answers

up vote 5 down vote I made it guys! Here a good sample about how you can access to an gmail acount and see what is inside. I'm currently working about how to parse the information inside, because actually only retrieves the amount of mails on inbox and its size. If you change the url as "pops://pop.gmail.com:995/1" it will returns you the content of the messege and also including a base64 encoding for the attachments. Thanks Anyway... here is the cod

Recommend:asp.net - How to fetch new mail from Gmail Inbox using POP3 Command

my account. But i can fetch only 255 oldest mail. Help me to fetch new mail from my inbox.

public double GetEmailCount()

{

double count = 0;

string response = SendCommand("STAT");

if (IsResponseOk(response))

e! :) #pragma region Types

struct MemoryStruct {

char *memory;

size_t size;

};

#pragma endregion

void MailServer::Open(char *username,char *password)

{

m_username = username;

m_password = password;

struct MemoryStruct chunk;

chunk.memory = (char*) malloc(1);

//crecerá según sea necesario con el realloc

chunk.size = 0;

//no hay datos en este punto

//inicializacion

curl_global_init(CURL_GLOBAL_ALL);

curl = curl_easy_init();

//login

curl_easy_setopt(curl,CURLOPT_USERNAME,username);

curl_easy_setopt(curl,CURLOPT_PASSWORD,password);

m_popsAccount = "pop3s://pop.gmail.com:995/";

curl_easy_setopt(curl, CURLOPT_URL, m_popsAccount.c_str());

curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL);

curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);

curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);

curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);

curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);

//some servers needs this validation

curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcurl-agent/1.0");

res = curl_easy_perform(curl);

if(res != CURLE_OK)

{

fprintf(stderr, "curl_easy_perform() failed: %s\n",

curl_easy_strerror(res));

}

else

{

/*

here is where you can work with the data inside the chunk...

*/

printf("%s\n",chunk.memory); //here is the information

printf("%lu bytes retrieved\n", (long)chunk.size);

}

//se libera la memoria si hay datos

if(chunk.memory)

free(chunk.memory);

/* always cleanup */

curl_global_cleanup();

}

size_t MailServer::WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp)

{

size_t realsize = size * nmemb;

struct MemoryStruct *mem = (struct MemoryStruct *)userp;

mem->memory = (char *)realloc(mem->memory, mem->size + realsize + 1);

if(mem->memory == NULL) {

/* out of memory! */

printf("not enough memory (realloc returned NULL)\n");

return 0;

}

memcpy(&(mem->memory[mem->size]), contents, realsize);

mem->size += realsize;

mem->memory[mem->size] = 0;

return realsize;

}


  |
  this answer answered Nov 6 '13 at 14:53 Mauro Bilotti 1,735 16 31



 | 

Recommend:pop3 - Reading mails from gmail account in asp.net

unable to get the mails from the inbox.. below is the code i used for logging in... try { TcpClient tcpclient = new TcpClient(); // create an instance of TcpClient tcpclient.Connect("pop.gmail.com", 995); //

up vote 3 down vote favorite 4 I need your help guys... I'm currently working in a C++ project which has to be able to read emails from an gmail POP3 account just like the title sa

oriUlr:http://stackoverflow.com/questions/19812137/reading-emails-from-gmail-pop3-account-using-libcurl

------splitte line----------------------------