Example #1
0
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);
}
Example #2
0
/***********************************************************
 *	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;
}
Example #3
0
File: mail.c Project: wtj/formosa
/*****************************************************
 *  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);
}
Example #4
0
/**************************************************************
 * 寄信給站上使用者
 **************************************************************/
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;
}