/*~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- ~ Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, ~ ~ Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. ~ ~ ~ ~ Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael ~ ~ Chastain, Michael Quan, and Mitchell Tse. ~ ~ ~ ~ Ack 2.2 improvements copyright (C) 1994 by Stephen Dooley ~ ~ ACK!MUD is modified Merc2.0/2.1/2.2 code (c)Stephen Zepp 1998 Ver: 4.3 ~ ~ ~ ~ In order to use any part of this PA Diku Mud, you must comply with ~ ~ both the original Diku license in 'license.doc' as well the Merc ~ ~ license in 'license.txt', and the Ack!Mud license in 'ack_license.txt'.~ ~ In particular, you may not remove any of these copyright notices. ~ ~ ~ ~ _______ _____ ~ ~ / __ /\ / ___ \ 222222 PA_MUD by Amnon Kruvi ~ ~ /______/ / / /___\ \ 2 PA_MUD is modified ~ ~ / _______/ / _______ \ 2 Ack!Mud, v4.3 ~ ~ /_/ /_/ \_\ 2 ~ ~ 2 ~ ~ 2222222 ~ ~ ~ ~ ~ ~ Years of work have been invested to create DIKU, Merc, Ack and PA. ~ ~ Please show your respect by following the licenses, and issuing ~ ~ credits where due. ~ ~ ~ ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-*/ #ifndef DEC_EMAIL_H #include "email.h" #endif bool valid_email_addy( char * address ) { /* checks for simple email address, person@place.cat...if valid, returns TRUE, otherwise, sends a message to ch, and stores it anyway, but ch->valid_email is set to false */ char * checkme = address; bool valid = TRUE; for( ; *checkme != '\0'; checkme++ ) { if ( ( IS_LETTER( *checkme ) ) || ( *checkme == '1' ) || ( *checkme == '2' ) || ( *checkme == '3' ) || ( *checkme == '4' ) || ( *checkme == '5' ) || ( *checkme == '6' ) || ( *checkme == '7' ) || ( *checkme == '8' ) || ( *checkme == '9' ) || ( *checkme == '0' ) || ( *checkme == '.' ) || ( *checkme == '@' ) || ( *checkme == '-' ) || ( *checkme == '_' ) ) continue; else { valid = FALSE; break; } } return valid; } void do_email( CHAR_DATA * ch, char * argument ) { /* interface for setting up email addresses */ char arg1[MSL]; char arg2[MSL]; char outbuf[MSL]; char catbuf[MSL]; bool valid_email = FALSE; if ( IS_NPC( ch ) ) return; argument = one_argument( argument, arg1 ); if ( arg1[0] == '\0' ) { sprintf( outbuf, "%s", "Syntax for email:\n\r" ); sprintf( catbuf, "%s", "set <email address>\n\r" ); safe_strcat( MSL, outbuf, catbuf ); if ( ch->pcdata->valid_email ) { sprintf( catbuf, "Your email address is currently set to %s.\n\r", ch->pcdata->email_address ); safe_strcat( MSL, outbuf, catbuf ); } else { if ( !str_cmp( ch->pcdata->email_address, "not set" ) ) safe_strcat(MSL, outbuf, "Your email address has not been set.\n\r" ); else { sprintf( catbuf, "Your email address has been set to %s, but has not been authorized by an Implementor.\n\r", ch->pcdata->email_address ); safe_strcat( MSL, outbuf, catbuf ); } } send_to_char( outbuf, ch ); return; } argument = one_argument( argument, arg2 ); if ( arg2[0] == '\0' ) { do_email( ch, "" ); return; } if ( !str_cmp( arg1, "set" ) ) { valid_email = valid_email_addy( arg2 ); if ( valid_email ) { free_string( ch->pcdata->email_address ); ch->pcdata->email_address = str_dup( arg2 ); ch->pcdata->valid_email = TRUE; do_save( ch, "" ); sprintf( outbuf, "Your email address has been set to %s.\n\r", ch->pcdata->email_address ); send_to_char( outbuf, ch ); return; } else { sprintf( outbuf, "%s is not an acceptable email address.\n\r", arg2 ); send_to_char( outbuf, ch ); return; } } /* if ( !str_cmp( arg1, "validate" ) ) { if ( get_trust( ch ) < MAX_LEVEL ) { send_to_char( "Only Implementors may use this command.\n\r", ch ); return; } else { CHAR_DATA *victim; DESCRIPTOR_DATA d; BRAND_DATA * brand; DL_LIST * brand_list; bool logged_in = FALSE; if ( arg2[0] == '\0' ) { send_to_char( "Authorize email for whom?\n\r", ch ); return; } if ( ( victim = get_char_world( ch, arg2 ) ) == NULL ) { bool found = FALSE; found = load_char_obj( &d, arg2, TRUE ); if (!found) { char buf[MSL]; sprintf( buf, "No pFile found for '%s'.\n\r", capitalize( arg2 ) ); send_to_char( buf, ch ); free_char( d.character ); return; } victim = d.character; d.character = NULL; victim->desc = NULL; LINK( victim, first_char, last_char, next, prev ); } else { logged_in = TRUE; } victim->pcdata->valid_email = TRUE; send_to_char( "OK.\n\r", ch ); for ( brand_list = first_brand; brand_list; brand_list = brand_list->next ) { brand = brand_list->this_one; if ( ( !str_cmp( brand->branded, victim->name ) ) && ( !str_cmp( brand->priority, "Email Validation" ) ) ) break; } if ( brand_list != NULL ) { UNLINK( brand_list, first_brand, last_brand, next, prev ); brand = brand_list->this_one; PUT_FREE(brand, brand_data_free); brand_list->this_one = NULL; PUT_FREE( brand_list, dl_list_free ); save_brands( ); } if ( !logged_in ) do_quit( victim, "" ); return; } } */ do_email( ch, "" ); return; } void send_email( const char * m_address, const char * m_subject, const char * mfilename ) { FILE *mailfp; char mailbuf[MSL]; char mailfpbuf[MSL]; char delbuf[MSL]; char dbbuf[MSL]; int forkval; sprintf( mailbuf, "mail -s \"%s\" %s <%s%s", m_subject, m_address, MAIL_DIR, capitalize( mfilename ) ); signal( SIGCHLD, SIG_IGN ); if ( ( forkval = fork() ) > 0 ) { sprintf( dbbuf, "Just sent email: %s", mailbuf ); monitor_chan( NULL, dbbuf, MONITOR_SYSTEM ); return; } else if ( forkval < 0 ) { sprintf( dbbuf, "Error in fork for sent email: %s", mailbuf ); monitor_chan( NULL, dbbuf, MONITOR_SYSTEM ); return; } sprintf( mailfpbuf, "%s%s", MAIL_DIR, mfilename ); if ( ( mailfp = fopen( mailfpbuf, "r" ) ) == NULL ) { fpReserve = fopen( NULL_FILE, "r" ); kill( getpid(), SIGKILL ); /* didn't have a valid file to mail */ } fclose( mailfp ); system( mailbuf ); sprintf( delbuf, "rm %s%s", MAIL_DIR, mfilename ); system( delbuf ); kill( getpid(), SIGKILL ); return; } bool save_mail_file( const char * mfilename, char * mtext ) { FILE * mailfp; char mailfpfilename[MSL]; fclose( fpReserve ); sprintf( mailfpfilename, "%s%s", MAIL_DIR, mfilename ); if ( ( mailfp = fopen( mailfpfilename, "w" ) ) == NULL ) { fpReserve = fopen( NULL_FILE, "r" ); return FALSE; } fprintf( mailfp, "%s\n", strip_color( mtext, "@@" ) ); fflush( mailfp ); fclose( mailfp ); fpReserve = fopen( NULL_FILE, "r" ); return TRUE; } void send_rep_out( CHAR_DATA * ch, char * outbuf, bool mailme, char * msub ) { if ( ( IS_NPC( ch ) ) || ( ch->pcdata->valid_email == FALSE ) ) { mailme = FALSE; } if ( mailme ) { bool saved_mail = FALSE; if ( ( !IS_NPC( ch ) ) && ( str_cmp( ch->pcdata->email_address, "not set" ) ) ) { char mailfilename[MSL]; sprintf( mailfilename, "%s.mail", ch->name ); saved_mail = save_mail_file( mailfilename , outbuf ); if ( saved_mail ) { char outbuf2[MSL]; sprintf( outbuf2, "Email sent to %s\n\r", ch->pcdata->email_address ); send_to_char( outbuf2, ch ); send_email( ch->pcdata->email_address, msub, mailfilename ); } else { send_to_char( outbuf, ch ); send_to_char( "\n\r@@eUNABLE TO SEND SYSTEM MAIL. @@WCheck your sendmail settings.@@N\n\r", ch ); } } else { send_to_char( outbuf, ch ); } } else { send_to_char( outbuf, ch ); } }