int SendMail(int ms, char *fname, char *from, const char *to, char *title, char ident) { if (is_emailaddr(to)) return SendMail_Internet(ms, fname, from, to, title, NULL); else return SendMail_Local(fname, from, to, title, ident); }
/*********************************************************** * check user has permission to send mail * ************************************************************/ int MailCheck(char *address) { if(!is_emailaddr(address)) { USEREC user; if (get_passwd(&user, address) <= 0) { strncpy(username, address, IDLEN); return WEB_USER_NOT_FOUND; } if(isExceedMailLimit(&user)) return WEB_ERROR; } #ifdef USE_IDENT else { if(curuser.ident!=7) return WEB_USER_NOT_IDENT; } #endif return WEB_OK; }
/***************************************************** * Syntax: FORWARD * 自動轉寄信件開關 *****************************************************/ DoForward() { if (!strcmp(curuser.userid, GUEST)) { /* 如果使用者為 guest 登陸 */ RespondProtocol(WORK_ERROR); return; } if (curuser.flags[0] & FORWARD_FLAG) /* 已開啟 */ curuser.flags[0] &= ~FORWARD_FLAG; else { if (!is_emailaddr(curuser.email)) /* lthuang */ { RespondProtocol(WORK_ERROR); return; } curuser.flags[0] |= FORWARD_FLAG; } RespondProtocol(OK_CMD); }
/************************************************************** * 寄信給站上使用者 **************************************************************/ static int SendMail_Local(char *fname,char *from, const char *to, char *title, char ident) { USEREC urcTmp; char pathTmp[PATHLEN]; int retval, fsize; retval = CheckMail(&urcTmp, to, FALSE); if (retval == -1) return -1; /* kmwang:20000610:blacklist */ /* bug fixed by lasehu 2002/05/22 if (in_blacklist(to, from)) return -1; */ if (!is_emailaddr(from) && in_blacklist(to, from)) return -1; else if (retval > 0) { bbslog("SENDMAIL", "from=%s, to=%s, total=%d, stat=ENOSPC", from, to, retval); return -2; } /* Auto-Forward */ if ((urcTmp.flags[0] & FORWARD_FLAG) && is_emailaddr(urcTmp.email)) { #ifdef NSYSUBBS if (strncmp(urcTmp.email, "bbs@", 4) && !strstr(urcTmp.email, "..")) { #endif if (SendMail_Internet(-1, fname, from, urcTmp.email, title, urcTmp.userid) == 0) return 0; #ifdef NSYSUBBS } #endif bbslog("ERR", "auto-forward: %s", urcTmp.email); } setmailfile(pathTmp, to, NULL); if (!isdir(pathTmp)) { if (mkdir(pathTmp, 0700) == -1) return -1; } if (!(fsize = get_num_records(fname, sizeof(char)))) return -2; if (fsize > MAX_MAIL_SIZE) { bbslog("SENDMAIL", "from=%s, to=%s, size=%d, stat=EFBIG", from, to, fsize); return -3; } #ifdef USE_THREADING /* syhu */ if (append_article(fname, pathTmp, from, title, ident, NULL, FALSE, 0, NULL, -1, -1 ) == -1) /* syhu */ #else if (append_article(fname, pathTmp, from, title, ident, NULL, FALSE, 0, NULL) == -1) #endif return -1; return 0; }