4

IMAPおよびPOP3サーバーに接続したいのですが、IMAPの場合は現在MailCoreを使用しています。残念ながら、適切な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。

4

2 に答える 2

3

私はOCMailを使用していませんが、それはあなたが探しているもののようです。「POP3、IMAP4、SMTP、POPS、IMAPS、SMTPS」をサポートすると主張しています。

編集:ビルドエラー
結局のところ、解決策は実際にはREADMEファイルにあります。

  1. GithubからZIPをダウンロードしたら、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ファイルをダウンロードして置き換えます。

于 2013-01-09T15:02:02.930 に答える
1

私は過去にlibetpanを使用していて、pop3サーバーに問題なく接続していたので、それがまだ機能しているかどうかを確認しました。ここからコードを使用しました:https ://github.com/dinhviethoa/libetpan/blob/master/tests/pop-sample.cそしてiOS用に調整しました。

これを使用すると、多くの警告が表示され、最初のメッセージを取得した後にアプリがクラッシュしますが、接続は機能しています(もちろん、メールのログインとパスワードを入力する必要があります)。

libetpanが良い解決策だと言っているのではありません。メールサポート付きのアプリを開発していたとき、IMAPにもmailcoreを使用し、最終的に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);
}
于 2013-01-14T11:26:43.343 に答える