summaryrefslogtreecommitdiff
path: root/src/mail.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mail.c')
-rw-r--r--src/mail.c283
1 files changed, 0 insertions, 283 deletions
diff --git a/src/mail.c b/src/mail.c
deleted file mode 100644
index ef3d6cd4d..000000000
--- a/src/mail.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/* Mail utility routines.
- *
- * (C) 2003-2010 Anope Team
- * Contact us at team@anope.org
- *
- * Please read COPYING and README for further details.
- *
- * Based on the original code of Epona by Lara.
- * Based on the original code of Services by Andy Church.
- *
- *
- */
-
-#include "services.h"
-#include "language.h"
-
-/*************************************************************************/
-
-/**
- * Begins to send a mail. Must be followed by a MailEnd call.
- * Returns NULL if the call failed. Error messages are
- * automatically sent to the user.
- * @param u the User struct
- * @param nr NickReqest Struct
- * @param subject Subject of the email
- * @param service Service to respond with
- * @return MailInfo struct
- */
-MailInfo *MailRegBegin(User * u, NickRequest * nr, char *subject,
- char *service)
-{
- int timeToWait = 0;
- if (!u || !nr || !subject || !service) {
- return NULL;
- }
-
- if (!Config.UseMail) {
- notice_lang(service, u, MAIL_DISABLED);
- } else if ((time(NULL) - u->lastmail < Config.MailDelay)) {
- timeToWait = Config.MailDelay - (time(NULL) - u->lastmail);
- notice_lang(service, u, MAIL_DELAYED, timeToWait);
- } else if (!nr->email) {
- notice_lang(service, u, MAIL_INVALID, nr->nick);
- } else {
- MailInfo *mail;
-
- mail = new MailInfo;
- mail->sender = u;
- mail->recipient = NULL;
- mail->recip = nr;
-
- if (!(mail->pipe = popen(Config.SendMailPath, "w"))) {
- delete mail;
- notice_lang(service, u, MAIL_LATER);
- return NULL;
- }
-
- fprintf(mail->pipe, "From: %s\n", Config.SendFrom);
- if (Config.DontQuoteAddresses) {
- fprintf(mail->pipe, "To: %s <%s>\n", nr->nick, nr->email);
- } else {
- fprintf(mail->pipe, "To: \"%s\" <%s>\n", nr->nick, nr->email);
- }
- fprintf(mail->pipe, "Subject: %s\n", subject);
- return mail;
- }
-
- return NULL;
-}
-
-/*************************************************************************/
-
-/**
- * Begins to send a mail. Must be followed by a MailEnd call.
- * Returns NULL if the call failed. Error messages are
- * automatically sent to the user.
- * @param u the User struct
- * @param nc NickCore Struct
- * @param subject Subject of the email
- * @param service Service to respond with
- * @return MailInfo struct
- */
-MailInfo *MailBegin(User * u, NickCore * nc, char *subject, char *service)
-{
- if (!u || !nc || !subject || !service) {
- return NULL;
- }
-
- if (!Config.UseMail) {
- notice_lang(service, u, MAIL_DISABLED);
- } else if (((time(NULL) - u->lastmail < Config.MailDelay)
- || (time(NULL) - nc->lastmail < Config.MailDelay))
- && !(u->Account() && u->Account()->IsServicesOper())) {
- notice_lang(service, u, MAIL_DELAYED, Config.MailDelay);
- } else if (!nc->email) {
- notice_lang(service, u, MAIL_INVALID, nc->display);
- } else {
- MailInfo *mail;
-
- mail = new MailInfo;
- mail->sender = u;
- mail->recipient = nc;
- mail->recip = NULL;
-
- if (!(mail->pipe = popen(Config.SendMailPath, "w"))) {
- delete mail;
- notice_lang(service, u, MAIL_LATER);
- return NULL;
- }
-
- fprintf(mail->pipe, "From: %s\n", Config.SendFrom);
- if (Config.DontQuoteAddresses) {
- fprintf(mail->pipe, "To: %s <%s>\n", nc->display, nc->email);
- } else {
- fprintf(mail->pipe, "To: \"%s\" <%s>\n", nc->display,
- nc->email);
- }
- fprintf(mail->pipe, "Subject: %s\n", subject);
-
- return mail;
- }
-
- return NULL;
-}
-
-/*************************************************************************/
-
-/**
- * new function to send memo mails
- * @param nc NickCore Struct
- * @return MailInfo struct
- */
-MailInfo *MailMemoBegin(NickCore * nc)
-{
-
- if (!nc)
- return NULL;
-
- if (!Config.UseMail || !nc->email) {
- return NULL;
-
- } else {
- MailInfo *mail;
-
- mail = new MailInfo;
- mail->sender = NULL;
- mail->recipient = nc;
- mail->recip = NULL;
-
- if (!(mail->pipe = popen(Config.SendMailPath, "w"))) {
- delete mail;
- return NULL;
- }
-
- fprintf(mail->pipe, "From: %s\n", Config.SendFrom);
- if (Config.DontQuoteAddresses) {
- fprintf(mail->pipe, "To: %s <%s>\n", nc->display, nc->email);
- } else {
- fprintf(mail->pipe, "To: \"%s\" <%s>\n", nc->display,
- nc->email);
- }
- fprintf(mail->pipe, "Subject: %s\n",
- getstring(MEMO_MAIL_SUBJECT));
- return mail;
- }
-}
-
-/*************************************************************************/
-
-/**
- * Finish to send the mail. Cleanup everything.
- * @param mail MailInfo Struct
- * @return void
- */
-void MailEnd(MailInfo * mail)
-{
- /* - param checking modified because we don't
- have an user sending this mail.
- Certus, 02.04.2004 */
-
- if (!mail || !mail->pipe) { /* removed sender check */
- return;
- }
-
- if (!mail->recipient && !mail->recip) {
- return;
- }
-
- pclose(mail->pipe);
-
- if (mail->sender) /* added sender check */
- mail->sender->lastmail = time(NULL);
-
- if (mail->recipient)
- mail->recipient->lastmail = time(NULL);
- else
- mail->recip->lastmail = time(NULL);
-
-
- delete mail;
-}
-
-/*************************************************************************/
-
-/**
- * Resets the MailDelay protection.
- * @param u the User struct
- * @param nc NickCore Struct
- * @return void
- */
-void MailReset(User * u, NickCore * nc)
-{
- if (u)
- u->lastmail = 0;
- if (nc)
- nc->lastmail = 0;
-}
-
-/*************************************************************************/
-
-/**
- * Checks whether we have a valid, common e-mail address.
- * This is NOT entirely RFC compliant, and won't be so, because I said
- * *common* cases. ;) It is very unlikely that e-mail addresses that
- * are really being used will fail the check.
- *
- * FIXME: rewrite this a bit cleaner.
- * @param email Email to Validate
- * @return int
- */
-int MailValidate(const char *email)
-{
- int has_period = 0, len;
- char copy[BUFSIZE], *domain;
-
- static char specials[] =
- { '(', ')', '<', '>', '@', ',', ';', ':', '\\', '\"', '[', ']',
- ' '
- };
-
- if (!email)
- return 0;
- strlcpy(copy, email, sizeof(copy));
-
- domain = strchr(copy, '@');
- if (!domain)
- return 0;
- *domain = '\0';
- domain++;
-
- /* Don't accept NULL copy or domain. */
- if (*copy == 0 || *domain == 0)
- return 0;
-
- /* Check for forbidden characters in the name */
- for (unsigned int i = 0; i < strlen(copy); i++) {
-
- if (copy[i] <= 31 || copy[i] >= 127)
- return 0;
- for (unsigned int j = 0; j < 13; j++)
- if (copy[i] == specials[j])
- return 0;
- }
-
- /* Check for forbidden characters in the domain, and if it seems to be valid. */
- for (int i = 0; i < (len = strlen(domain)); i++) {
- if (domain[i] <= 31 || domain[i] >= 127)
- return 0;
- for (unsigned int j = 0; j < 13; j++)
- if (domain[i] == specials[j])
- return 0;
- if (domain[i] == '.') {
- if (i == 0 || i == len - 1)
- return 0;
- has_period = 1;
- }
- }
-
- if (!has_period)
- return 0;
-
- return 1;
-}