2013-01-07 1 views
4

IMAP 용 IMAP 및 POP3 서버에 연결하고 싶습니다. 현재 MailCore를 사용하고 있습니다. 불행히도 적절한 POP3 프레임 워크를 찾지 못했습니다.iOS/Objective-C : POP3에 연결하기위한 라이브러리

나는 libetpan으로 시도 :

mailpop3 * pop3; 
    int r; 
    pop3 = mailpop3_new(0, NULL); 
    r = mailpop3_ssl_connect(pop3, "pop.gmail.com", 995); 
    check_error(r, "connect failed"); 

하지만 난 항상 연결이 오류를 거부 얻을; 그리고 그것은 단지 C 다. 나는 Objective-C를 선호 할 것이다. 두 가지 모두에 사용할 수있는 라이브러리가 더 좋을 것입니다. IMAP 및 POP3.

답변

3

나는 OCMail을 사용하지 않았지만 찾고있는 것처럼 보입니다. 그것은 "POP3, IMAP4, SMTP, POPS, IMAPS, SMTPS"를 지원한다고 주장합니다.

편집 : 빌드 오류
이 솔루션은 README 파일에 실제로, 밝혀졌습니다.

  1. 당신이 Github에서에서 우편 번호를 다운로드 한 후에는 Xcode 프로젝트를 엽니 다.
  2. 프로파일 링을위한 빌드 (제품 메뉴> 빌드 프로파일> (Command-Shift-I)).
  3. Xcode 환경 설정을 열고 "위치"로 이동
  4. 파생 데이터에서 고급 버튼 옆에 파일 경로 (예 : /Users/YourUserName/Library/Developer/Xcode/DerivedData)가 표시됩니다. 경로 옆에는 작은 화살표가 있습니다. 화살표를 클릭하여 Finder에서 해당 위치로 이동하십시오.
  5. 모든 Xcode 프로젝트가있는 폴더로 이동합니다. 이름이 OCMail로 시작하는 폴더를 찾으십시오. (그 다음에 횡설수가 많습니다.)
  6. 해당 폴더에서 빌드> 제품> 디버그 -iphoneos>libOCMail.a을 찾으십시오. Xcode 프로젝트의에 추가하려는 라이브러리 파일입니다. Xcode 프로젝트로 끌어다 놓으면 바로 사용할 수 있습니다.

프로젝트를 구축하는 중 오류가 발생했습니다. 그들은 잘못 정의 된 enum 유형에서 왔습니다. 다음은 정리 된 파일입니다. http://cl.ly/code/442x2x3X3Y2I
빌드하기 전에 기존 MimeMessage.m 파일을 다운로드하고 바꿉니다.

+0

하지만 불행히도 여기 https://github.com/miyabichan/OCMail/issues/1 언급 한 문제가 나를 위해 진짜 문제는 ... 그것은 작동 가져올 수 없습니다 :/ – swalkner

+0

내 편집 위를 참조 도움이 되었길 바래요! – FeifanZ

+0

좋아, 나는 .a 파일을 만들 수 있었다. 하지만 테스트 프로젝트로 드래그하면 예를 들어 파일을 가져올 수 없습니다. '#import "MailServer.h"-'file not found' – swalkner

1

나는 libetpan과 함께 과거에 작업 중이었고 문제없이 pop3 서버에 연결 했으므로 아직 작동하는지 확인했습니다. 여기에서 코드 (https://github.com/dinhviethoa/libetpan/blob/master/tests/pop-sample.c)를 사용하고 iOS 용으로 조정했습니다.

사용하는 경우 많은 경고가 표시되고 첫 번째 메시지를 가져온 후에 응용 프로그램이 충돌하지만 연결이 작동합니다 (물론 전자 메일 로그인과 암호를 입력해야합니다).

저는 libetpan이 좋은 해결책이라고 말하고 있지 않습니다. 메일 지원이있는 앱을 개발할 때도 IMAP 용 메일 코어를 사용하고 결국 POP3 지원을 중단했습니다. 그러나 옵션에서 실행하면 유용 할 수 있습니다.

static void check_error(int r, char * msg) 
{ 
if (r == MAILPOP3_NO_ERROR) 
    return; 

fprintf(stderr, "%s\n", msg); 
exit(EXIT_FAILURE); 
} 

-(IBAction)testButtonClick:(id)sender 
{ 
mailpop3 * pop3; 
int r; 
carray * list; 
unsigned int i; 

// if (argc < 3) { 
//  fprintf(stderr, "syntax: pop-sample [gmail-email-address] [gmail-  password]\n"); 
//  exit(EXIT_FAILURE); 
// } 


mkdir("download", 0700); 

pop3 = mailpop3_new(0, NULL); 
r = mailpop3_ssl_connect(pop3, "pop.gmail.com", 995); 
check_error(r, "connect failed"); 

r = mailpop3_user(pop3, @"mail login".cString); 
check_error(r, "user failed"); 

r = mailpop3_pass(pop3, @"mail password".cString); 
check_error(r, "pass failed"); 

r = mailpop3_list(pop3, &list); 
check_error(r, "list failed"); 

NSLog(@"carray_count(list_: %d", carray_count(list)); 

for(i = 0 ; i < carray_count(list) ; i ++) { 
    struct mailpop3_msg_info * info; 
    char * msg_content; 
    size_t msg_size; 
    FILE * f; 
    char filename[512]; 

    struct stat stat_info; 

    info = (mailpop3_msg_info *) carray_get(list, i); 

    if (info->msg_uidl == NULL) { 
     continue; 
    } 

    snprintf(filename, sizeof(filename), "download/%s.eml", info->msg_uidl); 
    r = stat(filename, &stat_info); 
    if (r == 0) { 
     printf("already fetched %u %s\n", info->msg_index, info->msg_uidl); 
     continue; 
    } 

    if(msg_content != NULL) 
    NSLog(@"msg_content: %@", [NSString stringWithUTF8String:msg_content]); 
    r = mailpop3_retr(pop3, info->msg_index, &msg_content, &msg_size); 
    check_error(r, "get failed"); 

//  f = fopen(filename, "w"); 
//  fwrite(msg_content, 1, msg_size, f); 
//  fclose(f); 
//  mailpop3_retr_free(msg_content); 

    if (info->msg_uidl != NULL) { 
     printf("fetched %u %s\n", info->msg_index, info->msg_uidl); 
    } 
    else { 
     printf("fetched %u\n", info->msg_index); 
    } 
} 

mailpop3_quit(pop3); 
mailpop3_free(pop3); 

// exit(EXIT_SUCCESS); 
} 
관련 문제