在Linux系统上需要从postfix邮件服务器检测某个账号的未读邮件。
在网上找了一下,用libmail库可以实现该需求: http://www.srcer.com/?p=624 这篇文章里使用pop3协议。
我这边的情况是postfix使用TLS协议,对上文稍作修改实现IMAP使用TLS协议连接postfix邮件服务器,检测未读邮件。
sudo ldconfig
编译 gcc imap.c -lmail
//imap.c
#include <libmail/libmail.h>
#include <libmail/imap4.h>
#include <libmail/error.h>
#include <libmail/libmail_intl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
imap4_mailbox_t *imapbox = NULL;
int ret = -1;
int newmsg = -1;
int oldmsg = -1;
libmail_init();
imapbox = ( imap4_mailbox_t *)malloc( sizeof(imap4_mailbox_t) );
libmail_init_imap4_mailbox(imapbox);
set_imap4_hostname(imapbox, "XXXXXX"); //连接到的邮件服务器
set_imap4_username(imapbox, "XXXXXX"); //账号
set_imap4_password(imapbox, "XXXXXX"); //密码
set_imap4_mailbox(imapbox, "inbox");
set_imap4_security_level(imapbox ,LIBMAIL_USE_SECURE);
if( (ret=imap4_connect(imapbox)) != LIBMAIL_SUCCESS )
{
fprintf( stderr, "imap Connect Error: %s !\n", libmail_strerror(ret) );
free(imapbox);
return 0;
}
printf( "connect XXXXXX success!\n" );
printf( "imap4_authenticate...\n" );
if( (ret=imap4_authenticate(imapbox)) != LIBMAIL_SUCCESS )
{
fprintf( stderr, "imap4_authenticate Error: %s !\n", libmail_strerror(ret) );
free(imapbox);
return 0;
}
if( (ret=imap4_check(imapbox, &newmsg, &oldmsg)) != LIBMAIL_SUCCESS ) //newmsg就是未读邮件数量
{
fprintf( stderr, "imap4_check failed: %s\n", libmail_strerror(ret) );
free(imapbox);
return 0;
}
printf( "imap4_check success new:%d old:%d\n", newmsg, oldmsg );
if( (ret=imap4_disconnect(imapbox)) != LIBMAIL_SUCCESS )
{
fprintf( stderr, "imap Connect Error: %s !\n", libmail_strerror(ret) );
free(imapbox);
return -1;
}
printf( "disconnect XXXXXX success!\n" );
free(imapbox);
return 0;
}