⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 email_rw.cxx

📁 LINUX下的收发E-MAIL的程序
💻 CXX
📖 第 1 页 / 共 2 页
字号:
// generated by Fast Light User Interface Designer (fluid) version 1.0010

#include "Email_rw.h"

char *format(char *p0, char *p1, char *p2);


int cpmail_content(NEW * mail_cont)
{
    sprintf(mail_cont->user, USERNAME);

    if (strlen(Mnew_sdp_in->value()) <= 0)
	return -1;
    else
	sprintf(mail_cont->from, "%s", Mnew_sdp_in->value());
    if (strlen(Mnew_recp_in->value()) <= 0)
	return -1;
    else
	sprintf(mail_cont->to, "%s", Mnew_recp_in->value());
    if (strlen(Mnew_top_in->value()) <= 0)
	strcpy(mail_cont->subject, "");
    else
	sprintf(mail_cont->subject, "%s", Mnew_top_in->value());
    if (strlen(Mnew_rep_in->value()) <= 0)
	strcpy(mail_cont->cc, "");
    else
	sprintf(mail_cont->cc, "%s", Mnew_rep_in->value());
    if (strlen(Mnew_write_multin->value()) <= 0)
	return -1;
    else
	sprintf(mail_cont->textbody, "%s", Mnew_write_multin->value());
    return 1;
}


static void cb_Mold_rep_but(Fl_Button *, void *)
{
    char sdp[64], recp[64];
    char *p;
    int i;

    strncpy(sdp, Mold_sdp_in->value(), 64);

    p = sdp;
    while (*p != '\0') {
	if (*p == '<')
	    break;
	p++;
    }

    if (*p == '<') {
	p++;
	for (i = 0; *p != '>'; i++) {
	    recp[i] = *p++;
	}
	recp[i] = '\0';
    }

    Mold_read_gp->hide();
    Mnew_write_gp->show();
    Mnew_sdp_in->value(numset.maddr);
    Mnew_sdp_in->redraw();

    Mnew_recp_in->value(recp);
    Mnew_recp_in->redraw();
    Mnew_rep_in->value("");
    Mnew_rep_in->redraw();
    Mnew_top_in->value("");
    Mnew_top_in->redraw();
    Mnew_write_multin->value("");
    Mnew_write_multin->redraw();
    Mnew_del_but->deactivate();
}


static void cb_Mold_del_but(Fl_Button *, void *)
{
    switch (com) {

    case OLD_MAIL_READ:
	delete_mail(newmail_id, oldmail_id, lines, OLD_MAIL_READ);
	Mold_read_window->hide();
	Mold_read_gp->hide();
	Emain_window->show();
	if (com == OLD_MAIL_READ)
	    Mreiv_gp->show();
	else if (com == NEW_MAIL_READ) {
	    rcvsend = SMBOX;
	    Msend_gp->show();
	}
	Rm_browser->value(lines);
	Rm_browser->redraw();
	break;

    case NEW_MAIL_READ:
	delete_mail(newmail_id, oldmail_id, Sm_browser->value(),
		    NEW_MAIL_READ);
	Mold_read_window->hide();
	Mnew_write_gp->hide();
	Emain_window->show();
	rcvsend = SMBOX;
	Msend_gp->show();
	Sm_browser->value(Sm_browser->value());
	Sm_browser->redraw();
	break;

    default:
	break;
    }
}


static void cb_Mold_quit_but(Fl_Button *, void *)
{
    Mold_read_window->hide();
    Mold_read_gp->hide();
    Emain_window->show();
    if (com == OLD_MAIL_READ) {
	rcvsend = RMBOX;
	Mreiv_gp->show();
	Rm_browser->value(lines);
	Rm_browser->redraw();
    } else if (com == NEW_MAIL_READ) {
	rcvsend = SMBOX;
	Msend_gp->show();
    }
}


static void cb_Mold_next_but(Fl_Button *, void *)
{
    char *buf;
    int email_sum = user_oldmail;

    lines++;
    buf = (char *) malloc(MAXRCVMAIL);

    if ((buf =
	 read_fromdatabase(buf, lines, RECEIVE, newmail_id,
			   oldmail_id)) == 0) {
	printf("read data from database error!\n");
	free(buf);
	return;
    }

    if (Rm_browser->text(lines) != 0) {
	Email_reic_show(buf);
    } else {
	free(buf);
    }
    Mold_back_but->activate();
    if (lines >= email_sum)
	Mold_next_but->deactivate();
    return;
}


static void cb_Mold_back_but(Fl_Button *, void *)
{
    char *buf;

    lines--;

    buf = (char *) malloc(MAXRCVMAIL);

    if ((buf =
	 read_fromdatabase(buf, lines, RECEIVE, newmail_id,
			   oldmail_id)) == 0) {
	printf("read data from database error!\n");
	free(buf);
	return;
    }

    if (lines > 0) {
	Email_reic_show(buf);
    } else {
	free(buf);
    }
    Mold_next_but->activate();
    if (lines == 1)
	Mold_back_but->deactivate();
    return;
}


static void cb_Mnew_send_but(Fl_Button *, void *)
{
    NEW new_send;
    Mlist *mimefiles = NULL;
    char smtphost[30];;
    int smtpport = 25;
    int securstyle = 1;
    char username[30];
    char password[30];

    signal(SIGSEGV, func);
    strcpy(smtphost, numset.smtp);
    strcpy(username, numset.mnum);
    strcpy(password, numset.passwd);

    if (cpmail_content(&new_send) < 0) {
	fl_alert("请填写必要的邮件内容!\n");
	return;
    }
    if (eml_prepare_mail
	(smtphost, smtpport, new_send.from, new_send.to, new_send.cc,
	 new_send.subject, new_send.textbody, mimefiles) != SUCCESS) {
	printf("%s\n ", smtpArror());
	return;
    }
    if (securstyle)
	if (eml_send_mail_needAuth
	    (&smtpserver, &mymail, username, password) != SUCCESS) {
	    printf("%s\n ", smtpArror());
	    return;
	}
    if (!securstyle)
	if (eml_send_mail_noNeedAuth(&smtpserver, &mymail) != SUCCESS) {
	    printf("%s\n ", smtpArror());
	    return;
	}

    if (Sm_browser->value())
	delete_mail(newmail_id, oldmail_id,
		    Sm_browser->value(), NEW_MAIL_READ);

    Mreiv_gp->hide();
    Mold_read_window->hide();
    Emain_window->show();
    rcvsend = SMBOX;
    Msend_gp->show();
    Msend_gp->redraw();
    return;
}


static void cb_Mnew_save_but(Fl_Button *, void *)
{
    NEW new_send;
    struct new_email *temp;
    struct loginfo *buf;
    time_t ticks;
    int i, n, flag = 0;
    int db_num;			// total records num;
    int current;		// current user's records num;
    ticks = time(NULL);

    temp = (struct new_email *) malloc(MAXNEWMAIL);

    if (cpmail_content(&new_send) < 0) {
	fl_alert("请填写必要的邮件内容!\n");
	return;
    }

    if ((db_num = get_the_datanum(newmail_id)) == -1) {
	printf("get record number error!\n");
	return;
    }

    printf("db number = %d\n", db_num);
    if (db_num)
	sort_newmail_database(newmail_id);

    if (com == MAIL_READ) {
	for (i = 0, current = 0; i < db_num; i++) {
	    db_change_current_pos(newmail_id, i);
	    n = db_get_current_pos(newmail_id, temp);
	    printf("Current position is %d\n", n);
	    if (!strcmp(temp->user, USERNAME)) {
		current++;
	    }

	    if (current == Sm_browser->value()) {
		new_send.mail_line = i;
		new_send.mailid = temp->mailid;
		printf("%d\n", new_send.mail_line);
		n = db_modify_current(newmail_id, &new_send, MAXNEWMAIL);
		if (n)
		    printf("modify success\n");
		else
		    printf("modify failed\n");
		Sm_browser->remove(current);
		Sm_browser->insert(current, format(new_send.from,
						   new_send.to,
						   new_send.subject));
		Sm_browser->redraw();
		break;
	    }
	}

	db_num = db_get_record_number(changelog_id);
	buf = (struct loginfo *) malloc(MAXCHLOG);
	sort_changelog_database(changelog_id);

	for (i = 0; i < db_num; i++) {
	    db_change_current_pos(changelog_id, db_num);
	    db_get_current_pos(changelog_id, buf);
	    if (buf->mailid == temp->mailid) {
		flag = 1;
		break;
	    }
	}

	if (!flag) {
	    buf->order = db_num;
	    buf->mailid = temp->mailid;
	    buf->opid = 1;
	    strncpy(buf->user, USERNAME, 20);
	    add_changelog2db(buf, changelog_id);
	}
	free(buf);

    } else {
	new_send.mail_line = user_newmail++;
	if (add_newmail2db(&new_send, newmail_id) < 0)
	    printf("database create error\n");

	Sm_browser->insert(user_newmail, format(new_send.from,
						new_send.to,
						new_send.subject));

	db_num = db_get_record_number(changelog_id);
	buf = (struct loginfo *) malloc(MAXCHLOG);
	buf->order = db_num;
	buf->mailid = total_mailid++;
	buf->opid = 0;
	strncpy(buf->user, USERNAME, 20);
	add_changelog2db(buf, changelog_id);
	free(buf);
    }

    free(temp);
    temp = NULL;

    Mreiv_gp->hide();
    Mold_read_window->hide();
    Emain_window->show();
    Msend_gp->show();
    Msend_gp->redraw();
}


static void cb_Mnew_del_but(Fl_Button *, void *)
{
    delete_mail(newmail_id, oldmail_id, Sm_browser->value(),
		NEW_MAIL_READ);
    Mold_read_window->hide();
    Mnew_write_gp->hide();
    Emain_window->show();
    rcvsend = SMBOX;
    Msend_gp->show();
}


static void cb_Mnew_quit_but(Fl_Button *, void *)
{
    Mold_read_window->hide();
    Mnew_write_gp->hide();
    Emain_window->show();
    rcvsend = SMBOX;
    Msend_gp->show();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -