IMAP协议检测未读邮件

在Linux系统上需要从postfix邮件服务器检测某个账号的未读邮件。
在网上找了一下,用libmail库可以实现该需求: http://www.srcer.com/?p=624  这篇文章里使用pop3协议。
我这边的情况是postfix使用TLS协议,对上文稍作修改实现IMAP使用TLS协议连接postfix邮件服务器,检测未读邮件。


首先安装gnutls库,源码安装的可能还要依赖libgcrypt  libgpg-erro
libmail的imap4.c中相关断言如:assert(n_print >= LIBMAIL_BUFSIZE+1 || n_print < 0);   注释掉再编译,否则会终止程序运行。
接下来安装libmail库: ./configure --enable-tls (打开tls) ,然后make && make install

头文件目录:/usr/local/include/libmail
库目录: /usr/local/lib

libmail_intl.h头文件需要从源码目录里拷贝到头文件目录
config.h  拷贝到/usr/local/include里

设置环境:
vim ~/.bashrc
添加:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
修改完后,记得关掉当前终端并重新打开一个新的终端,从而使上面的配置生效。


linux系统里需要添加下库文件路径:
vim /etc/ld.so.conf
添加: include /usr/local/lib

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;
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值