imap import fixes

This commit is contained in:
SJ 2014-10-15 09:36:09 +02:00
parent 83ce789420
commit 0a78b061d5
5 changed files with 27 additions and 13 deletions

View File

@ -14,7 +14,7 @@
#define VERSION "1.1.1-pre" #define VERSION "1.1.1-pre"
#define BUILD 892 #define BUILD 893
#define HOSTID "mailarchiver" #define HOSTID "mailarchiver"

View File

@ -130,7 +130,7 @@ int process_imap_folder(int sd, int *seq, char *folder, struct session_data *sda
data->import->total_messages += messages; data->import->total_messages += messages;
for(i=1; i<=messages; i++){ for(i=data->import->start_position; i<=messages; i++){
data->import->processed_messages++; data->import->processed_messages++;
printf("processed: %7d\r", data->import->processed_messages); fflush(stdout); printf("processed: %7d\r", data->import->processed_messages); fflush(stdout);
@ -384,6 +384,7 @@ int list_folders(int sd, int *seq, int use_ssl, struct __data *data){
while(1){ while(1){
n = recvtimeoutssl(sd, puf, sizeof(puf), 10, use_ssl, data->ssl); n = recvtimeoutssl(sd, puf, sizeof(puf), 10, use_ssl, data->ssl);
if(n < 0) return ERR;
if(pos + n >= len){ if(pos + n >= len){
q = realloc(buf, len+MAXBUFSIZE+1); q = realloc(buf, len+MAXBUFSIZE+1);
@ -430,6 +431,7 @@ int list_folders(int sd, int *seq, int use_ssl, struct __data *data){
} else { } else {
if(*q == '"') q++; if(*q == '"') q++;
if(q[strlen(q)-1] == ' ') q[strlen(q)-1] = '\0';
if(q[strlen(q)-1] == '"') q[strlen(q)-1] = '\0'; if(q[strlen(q)-1] == '"') q[strlen(q)-1] = '\0';
if(fldrlen) { if(fldrlen) {

View File

@ -190,12 +190,14 @@ int parse_line(char *buf, struct _state *state, struct session_data *sdata, int
} }
if(state->is_1st_header == 1 && sdata->ms_journal == 0 && (strncmp(buf, "X-MS-Journal-Report:", strlen("X-MS-Journal-Report:")) == 0 || (sdata->import == 1 && strncmp(buf, "X-MS-Exchange-Organization-Auth", strlen("X-MS-Exchange-Organization-Auth")) == 0))){ if(state->is_1st_header == 1 && sdata->ms_journal == 0 && (strncmp(buf, "X-MS-Journal-Report:", strlen("X-MS-Journal-Report:")) == 0 || (sdata->import == 1 && strncmp(buf, "X-MS-Exchange-Organization-Auth", strlen("X-MS-Exchange-Organization-Auth")) == 0))){
if(sdata->import == 0){
sdata->ms_journal = 1; sdata->ms_journal = 1;
memset(state->message_id, 0, SMALLBUFSIZE); memset(state->message_id, 0, SMALLBUFSIZE);
memset(state->b_from, 0, SMALLBUFSIZE); memset(state->b_from, 0, SMALLBUFSIZE);
memset(state->b_from_domain, 0, SMALLBUFSIZE); memset(state->b_from_domain, 0, SMALLBUFSIZE);
} }
}
if(state->message_rfc822 == 0 && (buf[0] == '\r' || buf[0] == '\n') ){ if(state->message_rfc822 == 0 && (buf[0] == '\r' || buf[0] == '\n') ){
@ -636,7 +638,7 @@ int parse_line(char *buf, struct _state *state, struct session_data *sdata, int
if(state->is_header == 1) p = strchr(buf, ' '); if(state->is_header == 1) p = strchr(buf, ' ');
else p = buf; else p = buf;
//printf("a: %d/%d/%d/%d %s\n", state->is_1st_header, state->is_header, state->message_rfc822, state->message_state, buf); printf("a: %d/%d/%d/%d %s\n", state->is_1st_header, state->is_header, state->message_rfc822, state->message_state, buf);
do { do {
memset(puf, 0, sizeof(puf)); memset(puf, 0, sizeof(puf));

View File

@ -297,8 +297,17 @@ int import_from_imap_server(char *server, char *username, char *password, int po
} }
/*
* if the user gives -f <foldername>, then don't iterate through the folder list
* rather build the folderlist based on the <foldername> option, 2014.10.14, SJ
*/
if(folder_imap){
addnode(data->imapfolders, folder_imap);
} else {
rc = list_folders(sd, &seq, use_ssl, data); rc = list_folders(sd, &seq, use_ssl, data);
if(rc == ERR) goto ENDE_IMAP; if(rc == ERR) goto ENDE_IMAP;
}
for(i=0;i<MAXHASH;i++){ for(i=0;i<MAXHASH;i++){
@ -462,7 +471,8 @@ ENDE:
void usage(){ void usage(){
printf("usage: pilerimport [-c <config file>] -e <eml file> | -m <mailbox file> | -d <directory> | -i <imap server> | -K <pop3 server> | -u <imap username> -p <imap password> -P <imap port> [-x <folder1,folder2,....,folderN,>] [-F <foldername>] [-R] [-r] [-q]\n"); printf("usage: pilerimport [-c <config file>] -e <eml file> | -m <mailbox file> | -d <directory> | -i <imap server> | -K <pop3 server> | -u <imap username> -p <imap password> -P <imap port>\n");
printf(" [-x <folder1,folder2,....,folderN,>] [-f <imap foldername>] [-F <foldername>] [-b <batchlimit>] [-s <start positiion>] [-D] [-R] [-r] [-q]\n");
exit(0); exit(0);
} }

View File

@ -85,7 +85,7 @@ int connect_to_pop3_server(int sd, char *username, char *password, int port, str
snprintf(buf, sizeof(buf)-1, "PASS %s\r\n", password); snprintf(buf, sizeof(buf)-1, "PASS %s\r\n", password);
write1(sd, buf, strlen(buf), use_ssl, data->ssl); write1(sd, buf, strlen(buf), use_ssl, data->ssl);
n = recvtimeoutssl(sd, buf, sizeof(buf), 10, use_ssl, data->ssl); n = recvtimeoutssl(sd, buf, sizeof(buf), 30, use_ssl, data->ssl);
if(strncmp(buf, "+OK", 3) == 0) return OK; if(strncmp(buf, "+OK", 3) == 0) return OK;
@ -106,7 +106,7 @@ int process_pop3_emails(int sd, struct session_data *sdata, struct __data *data,
snprintf(buf, sizeof(buf)-1, "STAT\r\n"); snprintf(buf, sizeof(buf)-1, "STAT\r\n");
n = write1(sd, buf, strlen(buf), use_ssl, data->ssl); n = write1(sd, buf, strlen(buf), use_ssl, data->ssl);
n = recvtimeoutssl(sd, buf, sizeof(buf), 10, use_ssl, data->ssl); n = recvtimeoutssl(sd, buf, sizeof(buf), 30, use_ssl, data->ssl);
if(strncmp(buf, "+OK ", 4) == 0){ if(strncmp(buf, "+OK ", 4) == 0){
p = strchr(&buf[4], ' '); p = strchr(&buf[4], ' ');