아웃룩(Outlook) 2010 버전에서 Imap 사용하기

아웃룩 2010 버전에서 imap 을 사용할때 expunge 기능을 명시적으로 사용할 수 없는데요.
Delete 키를 눌러도 삭제가 되지 않고 Deleted Items 폴더가 없다는 둥 에러메시지만 나옵니다.
실제로 있어도 마찬가지입니다.
아마 Gmail 을 기준으로 기능을 만들어 놓은듯 한데 정상작동을 안하죠.

그럼 이 문제에 대한 해결책은 expunge 명령을 안쓰면 되는거죠. ^^;
기존 아웃룩 2003 등에서는 imap 을 사용할때 지움표시만 해놓고 실제 파일을 삭제하는 것은
expunge 명령으로 실행했는데 따로 이것이 메뉴에 없으니 지움표시대신에 바로 삭제해버리는 것이죠.(지운 편지함으로 이동)

imap 에서는 삭제와 동일하게 이동 명령도 복사&삭제 표시인데 거기에 자동으로 expunge 명령을 붙은 것이나 마찬가지입니다.

일단 셋팅은 File -> Account Settings 을 클릭하고 Imap 계정의 Change Account 대화상자를 엽니다.
거기서 More Settings 를 선택하면 나오는 팝업 옵션창이 아래와 같습니다.

다른 부분은 건드릴 필요가 없이 Deleted Items 탭 부분만 아래와 같이 수정합니다.

imap 계정의 지운 편지함을 선택하고 제일 하단에 Purge items when switching folders while online 의 체크박스를 선택하면
자동으로 이동/삭제시 Expunge 명령이 실행되어서 원하는 작업을 할수 있게 됩니다.(삭제시 에러도 사라집니다.)

by ironiris | 2010/04/13 09:49 | 트랙백 | 덧글(1)

델파이에서 국가 코드에 따라 날짜정보를 읽어올때 오류 해결법

UserFormat : TFormatSettings;

GetLocaleFormatSettings(GetThreadLocale,UserFormat);
UserFomatSetting.ShortDateFormat := 'yyyy-MM-dd hh:mm:ss';
StrToDateTime(구한 날짜 문자열, UserFormat);

by ironiris | 2009/12/21 10:14 | 참고할만한 자작코드 | 트랙백 | 덧글(0)

50배는 빠른 base64 인코딩/디코딩 소스 - 자작

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

static const char MimeBase64[] = {
    'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
    'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
    'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
    'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
    'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
    'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
    'w', 'x', 'y', 'z', '0', '1', '2', '3',
    '4', '5', '6', '7', '8', '9', '+', '/'
};

static int DecodeMimeBase64[256] = {
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  /* 00-0F */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  /* 10-1F */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,  /* 20-2F */
    52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,  /* 30-3F */
    -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,  /* 40-4F */
    15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,  /* 50-5F */
    -1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,  /* 60-6F */
    41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1,  /* 70-7F */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  /* 80-8F */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  /* 90-9F */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  /* A0-AF */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  /* B0-BF */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  /* C0-CF */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  /* D0-DF */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  /* E0-EF */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1   /* F0-FF */
};

typedef union{
    struct{
        unsigned char c1,c2,c3;
    };
    struct{
        unsigned int e1:6,e2:6,e3:6,e4:6;
    };
} BF;

void base64e(char *src, char *result, int length){
    int i, j = 0;
    BF temp;

    for(i = 0 ; i < length ; i = i+3, j = j+4){
        temp.c3 = src[i];
        if((i+1) > length) temp.c2 = 0x00;
        else temp.c2 = src[i+1];
        if((i+2) > length) temp.c1 = 0x00;
        else temp.c1 = src[i+2];

        result[j]   = MimeBase64[temp.e4];
        result[j+1] = MimeBase64[temp.e3];
        result[j+2] = MimeBase64[temp.e2];
        result[j+3] = MimeBase64[temp.e1];

        if((i+2) > length) result[j+2] = '=';
        if((i+3) > length) result[j+3] = '=';
    }
}

void base64d(char *src, char *result, int *length){
    int i, j = 0, src_length, blank = 0;
    BF temp;

    src_length = strlen(src);

    for(i = 0 ; i < src_length ; i = i+4, j = j+3){
        temp.e4 = DecodeMimeBase64[src[i]];
        temp.e3 = DecodeMimeBase64[src[i+1]];
        if(src[i+2] == '='){
            temp.e2 = 0x00;
            blank++;
        } else temp.e2 = DecodeMimeBase64[src[i+2]];
        if(src[i+3] == '='){
            temp.e1 = 0x00;
            blank++;
        } else temp.e1 = DecodeMimeBase64[src[i+3]];

        result[j]   = temp.c3;
        result[j+1] = temp.c2;
        result[j+2] = temp.c1;
    }
    *length = j-blank;
}

int main(void){
    char str1[]="테스트Test`1234567890-=\[];',./";
    char str2[]="7YWM7Iqk7Yq4VGVzdGAxMjM0NTY3ODkwLT1cW107JywuLw==";
    char *result;
    int src_size;
    struct timespec start,end;

    src_size = strlen(str1);
    result = (char *)malloc((4 * (src_size / 3)) + (src_size % 3? 4 : 0) + 1);
    clock_gettime(CLOCK_REALTIME, &start);
    base64e(str1, result, src_size);
    clock_gettime(CLOCK_REALTIME, &end);
    float time_dif = (end.tv_sec - start.tv_sec) + ((end.tv_nsec - start.tv_nsec) );
    printf("함수 수행 시간: %f\n", time_dif);
    printf("원본:%s, 결과값:%s\n",str1,result);
    free(result);

    src_size = strlen(str2);
    result = (char *)malloc(3 * (src_size / 4));
    base64d(str2,result,&src_size);
    printf("원본:%s, 결과값:%s, 길이:%d\n",str2,result,src_size);
    free(result);
}
----------------
기존 인터넷등에서 퍼올수 있는 소스는 주로 쉬프트연산을 사용한 소스가 많은데 보통 55000단위 시간이 걸립니다.
하지만 새로 작성한 코드는 유니온과 구조체, 배열등을 이용해서
최대한 연산을 줄여 1000단위 시간으로 처리가 가능하도록 했습니다.

그리고 Base64 테이블은 새로 만들기 귀찮아서 기존 코드에서 복사했습니다.

by ironiris | 2009/10/16 11:32 | 참고할만한 자작코드 | 트랙백 | 덧글(1)

DAUM 에서 지원하는 드래그로 체크박스 체크하기(drag, checkbox)

<script>
var mouse_status = false;

function ckeckthis(id){
        if(mouse_status==true){
                var frm = document.getElementsByName('list[]');
                frm[id].checked = true;
        }
}

function mouseclick(status){
    mouse_status = status;
}

function deselect(){
    var frm = document.getElementsByName('list[]');
    for(var i=0;i<frm.length;i++){
        frm[i].checked = false;
    }
}
</script>
<BODY onMouseDown="mouseclick(true);" onMouseUp="mouseclick(false);" onselectstart="return false;">
<div onmouseover='ckeckthis(0);'><input type=checkbox name='list[]'>블라블라</div>
<div onmouseover='ckeckthis(1);'><input type=checkbox name='list[]'>블라블라</div>
<div onmouseover='ckeckthis(2);'><input type=checkbox name='list[]'>블라블라</div>
<div onmouseover='ckeckthis(3);'><input type=checkbox name='list[]'>블라블라</div>
<div onmouseover='ckeckthis(4);'><input type=checkbox name='list[]'>블라블라</div>
<input type=button value="선택해제" onclick=deselect()>
</body>

by ironiris | 2009/06/11 19:31 | 참고할만한 자작코드 | 트랙백 | 덧글(0)

원하는 프레임을 인쇄하는 방법

function print(){
    var WebBrowser = '<OBJECT ID="WebBrowser1" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>';
    document.body.insertAdjacentHTML('beforeEnd', WebBrowser);
    WebBrowser1.ExecWB(6,1);
}
/*
ExecWB(6,1); //인쇄 대화상자를 표시
ExecWB(6,-1); // 대화상자없이 바로 인쇄
ExecWB(7,1); //미리보기창
ExecWB(8,1); //인쇄 페이지 설정
*/

--
다른 곳 내용 참고.

by ironiris | 2009/05/14 11:25 | 참고할만한 자작코드 | 트랙백 | 덧글(0)

◀ 이전 페이지다음 페이지 ▶