#include "post.h"#include <properties.h>#include <language.h>#include <config.h>#include <mail.h>#include <wizlevels.h>#include <moving.h>
gehe zum Quellcode dieser Datei
Makrodefinitionen | |
| #define | TRUSTED(o) |
| #define | MAILFILE(name) ("/"+MAILPATH+name[0..0]+"/"+name) |
| #define | MAILFILEO(name) (MAILFILE(name)+".o") |
| #define | IS_NUMBER(n) (stringp(n)&&n[0]>='0'&&n[0]<='9') |
| #define | DEBUGVAR(x) |
Funktionen | |
| static varargs | SendMail (text, flag) |
| create () | |
| init () | |
| reset () | |
| postneustart () | |
| SetOfficeName (string n) | |
| static varargs | write_mail (mixed str, std_subject, text) |
| static varargs | get_subject (string str, string pretext) |
| static | get_carbon_copy (str) |
| static varargs | send_mail (mixed back) |
| varargs | do_mail (mixed str, string titel, string text) |
| static | MediumHelpPage () |
| static varargs int | GetFolders (int nocondflag) |
| static varargs | update (directflag, nocondflag) |
| static varargs | ListContent () |
| static | ChangeFolder (mixed x) |
| static | ListFolders () |
| static | MakeFolder (string s) |
| static | RemoveFolder (string x) |
| static varargs | DeleteMessage (int *nrs) |
| static | MoveMessage (mixed msg, mixed fol) |
| static varargs | Reply (int nr, int group) |
| static varargs | Forward (mixed to, mixed nr, int appendflag) |
| static | ForwardArea (mixed to, int *nrs) |
| static | ReadMessage (int nr) |
| static string | Message2string (int nr) |
| static | LagWarning () |
| static varargs | SaveMessage (int *nrs) |
| static | ListAliases () |
| static | mail_cmds (str) |
| static | prompt () |
| static | input () |
| static mixed | GetAlias (mixed a) |
| static mixed | process_names (mixed s) |
| static mapping | Read_mailrc (string file) |
| string * | unify_array (string *a) |
| string | GetReTitle (string s) |
| int * | GetNumbers (mixed s) |
| string | GetFolderName (mixed fol) |
| query_prevent_shadow () | |
Variablen | |
| inherit std | thing |
| inherit | NEDIT |
| static string | subject |
| static string | message |
| static string | receiver |
| static string | sender |
| static string * | carbon |
| static string | name |
| static string | office_name |
| static int | done |
| static int | akt_folder |
| static int | i |
| static int | akt_nr |
| static int | directflag |
| static int | folder_size |
| static int | folder_date |
| static mapping | aliases |
| mixed * | folders |
| #define DEBUGVAR | ( | x | ) |
Definiert in Zeile 85 der Datei testmailer.c.
| #define IS_NUMBER | ( | n | ) | (stringp(n)&&n[0]>='0'&&n[0]<='9') |
Definiert in Zeile 80 der Datei testmailer.c.
| #define MAILFILE | ( | name | ) | ("/"+MAILPATH+name[0..0]+"/"+name) |
Definiert in Zeile 76 der Datei testmailer.c.
| #define MAILFILEO | ( | name | ) | (MAILFILE(name)+".o") |
Definiert in Zeile 77 der Datei testmailer.c.
| #define TRUSTED | ( | o | ) |
(objectp(o)&& \
(geteuid(o)=="p:service"|| \
geteuid(o)==geteuid(this_interactive())))
Definiert in Zeile 72 der Datei testmailer.c.
| static ChangeFolder | ( | mixed | x | ) | [static] |
Definiert in Zeile 610 der Datei testmailer.c.
Benutzt akt_folder, akt_nr, folders, GetFolderName() und ListContent().
Wird benutzt von mail_cmds().
00610 { 00611 if (!(x=GetFolderName(x))) return; 00612 akt_folder=member(folders[0],x); 00613 write("Du oeffnest den Ordner '"+x+"'.\n"); 00614 if (akt_nr<=0) akt_nr=1; 00615 if (akt_nr>=sizeof(folders[1][akt_folder])) 00616 akt_nr=sizeof(folders[1][akt_folder]); 00617 ListContent(); 00618 }


| create | ( | ) |
Definiert in Zeile 105 der Datei testmailer.c.
Benutzt akt_folder, create(), folder_date, folder_size, office_name, P_IDS, P_NAME, P_NODROP, P_SHORT und SetProp().
00105 { 00106 (::create()); 00107 seteuid(getuid()); 00108 SetProp(P_IDS,({"mailer"})); 00109 SetProp(P_NAME,"mailer"); 00110 office_name="Morgengrauens Post"; 00111 akt_folder=-1; 00112 folder_size=folder_date=-42; 00113 SetProp(P_NODROP,1); 00114 SetProp(P_SHORT,0); 00115 }

| static varargs DeleteMessage | ( | int * | nrs | ) | [static] |
Definiert in Zeile 666 der Datei testmailer.c.
Benutzt akt_folder, LagWarning(), MAILDEMON, name, update() und x.
Wird benutzt von mail_cmds().
00666 { 00667 int ret,x; 00668 mixed m; 00669 if ( sizeof(nrs) > 15 ) LagWarning(); 00670 00671 for (x=sizeof(nrs)-1;x>=0;x--) { 00672 write("Loesche Brief "+(nrs[x]+1)+": "); 00673 ret=MAILDEMON->RemoveMsg(nrs[x], akt_folder, name); 00674 switch(ret) { 00675 case 1: write("Ok.\n"); break; 00676 case 0: write("Kein solcher Brief im aktuellen Ordner.\n"); break; 00677 case -1:write("Kein aktueller Ordner.\n"); update(); return ret; 00678 default: write("MAILDEMON: Interner Fehler Nummer "+ret+"!\n"); break; 00679 } 00680 } 00681 00682 return ret; 00683 }


| varargs do_mail | ( | mixed | str, | |
| string | titel, | |||
| string | text | |||
| ) |
Definiert in Zeile 357 der Datei testmailer.c.
Benutzt aliases, ALIASFILE, break_string(), directflag, folders, FWSERV, input, ListContent(), MAILFILEO, move(), name, Read_mailrc(), SYSALIAS, TRUSTED, update() und write_mail().
00357 { 00358 // text und titel angegeben: versende Text, keine weiteren Taetigkeiten. 00359 00360 mixed i; 00361 if (name) return; /* security flag :-) */ 00362 if (!this_interactive()) return; 00363 if (!text) { 00364 name=geteuid(this_interactive()); 00365 move(this_interactive()); 00366 if (!name) remove(); 00367 } 00368 aliases=Read_mailrc(ALIASFILE(geteuid(this_interactive())))+ 00369 Read_mailrc(SYSALIAS); 00370 // akt_folder=member_array("newmail",folders[0]); 00371 // if (akt_folder==-1) akt_folder=0; 00372 if (str) { 00373 str=lower_case(str); 00374 directflag=1; 00375 if (text) { 00376 if (this_interactive()!=this_player()) return 0; 00377 if (!TRUSTED(previous_object())) return 00378 write(break_string("WARNUNG!!! Objekt "+object_name(previous_object())+ 00379 " versucht, Mail mit Deinem Absender zu versenden! " 00380 "Bitte Erzmagier oder Loco verstaendigen.",78)+ 00381 "\n"),1; 00382 directflag=2; 00383 return write_mail(str,titel,text); 00384 } 00385 directflag=1; 00386 return write_mail(str); 00387 } 00388 update(0,1); 00389 if (!pointerp(folders) || sizeof(folders)!=2 || sizeof(folders[0])==0) { 00390 write("Du hast im Moment keine Post !\n"); 00391 folders=({({}),({})}); 00392 } 00393 write("Du hast "+sizeof(folders[0])+" Ordner, Liste mit 'i'.\n"); 00394 00395 ListContent(); 00396 00397 write("Gesamtgroesse Deines Postfachs: "+ 00398 (i=(file_size(MAILFILEO(name))+512)/1024)+" KB.\n"); 00399 00400 if (i>500) // Extra-Warnung fuer Catweazle 00401 // man koennte natuerlich auch eine Channel-Meldung ausspucken 00402 // mit dem Hinweis, wer das aktuelle Lag verursacht... vielleicht 00403 // ab 800 KB? ;-) 00404 write("*****************************************************************\n" 00405 "* Dein Postfach hat eine absolut unakzeptable Groesse erreicht. *\n" 00406 "* Uebergrosse Postfaecher verursachen unnoetiges Lag fuer alle! *\n" 00407 "* Bitte raeume es dringend auf, d.h. loesche alle Briefe, die *\n" 00408 "* Du nicht _unbedingt_ benoetigst, oder lager sie aus und *\n" 00409 "* loesche sie anschliessend. Hauptsache, weg damit. *\n" 00410 "*****************************************************************\n"); 00411 else if (i>300) // Warnung fuer bestimmte Magier und Seher ab 300 KB 00412 write("WARNUNG! Dein Postfach hat eine bedenkliche Groesse erreicht.\n" 00413 "Beachte, dass uebergrosse Postfaecher nicht nur unnoetig Speicher, sondern\n" 00414 "insbesondere auch Rechenzeit verbrauchen und damit groesseres Lag verursachen\n" 00415 "koennen. Du solltest also dringend aufraeumen und alle nicht unbedingt\n" 00416 "notwendigen Briefe loeschen (evtl. natuerlich vorher auslagern.\n"); 00417 else if (i>200) // Hinweis fuer andere. 00418 write("Der Postbeamte macht dich darauf aufmerksam, dass Dein Postfach bereits\n" 00419 "ziemlich voll ist und Du dringend einmal aufraeumen solltest.\n"); 00420 else if (i>100) // Hinweis fuer andere. 00421 write("Der Postbeamte macht dich darauf aufmerksam, dass Dein Postfach\n" 00422 "relativ voll ist.\n"); 00423 00424 00425 if ((i=FWSERV->QueryForward(name))!=name) 00426 write("Du hast einen Nachsendeauftrag gestellt, Deine Post wird an\n" 00427 +i+" weitergeleitet.\n"); 00428 return input(); 00429 }

| static varargs Forward | ( | mixed | to, | |
| mixed | nr, | |||
| int | appendflag | |||
| ) | [static] |
Definiert in Zeile 747 der Datei testmailer.c.
Benutzt akt_folder, carbon, folders, get_carbon_copy(), get_subject(), message, msg(), MSG_BODY, MSG_FROM, MSG_SUBJECT, process_names(), receiver und subject.
Wird benutzt von ForwardArea() und mail_cmds().
00747 { 00748 mixed msg; 00749 if (!pointerp(folders)||!pointerp(folders[0])|| 00750 sizeof(folders[0])<=akt_folder) { 00751 write("Seltsamer Fehler: Kein aktueller Ordner!\n"); 00752 return 0; 00753 } 00754 if (nr<0 || !pointerp(folders[1][akt_folder]) || 00755 sizeof(folders[1][akt_folder])<=nr){ 00756 write("Nicht so viele Briefe in diesem Ordner!\n"); 00757 return 0; 00758 } 00759 to=process_names(to); 00760 receiver=to[0]; 00761 carbon=to[1..]; 00762 subject="Fw: "+folders[1][akt_folder][nr][MSG_SUBJECT]; 00763 message="Weitergesendeter Brief, urspruenglich von: "+ 00764 folders[1][akt_folder][nr][MSG_FROM]+"\n\ 00765 -----------------------------\n\ 00766 "+folders[1][akt_folder][nr][MSG_BODY]+"\ 00767 -----------------------------\n"; 00768 if (!appendflag) return get_carbon_copy(),1; 00769 else { 00770 write("Text kann angehaengt werden\n"); 00771 get_subject(subject,message); 00772 } 00773 return 1; 00774 }


| static ForwardArea | ( | mixed | to, | |
| int * | nrs | |||
| ) | [static] |
Definiert in Zeile 778 der Datei testmailer.c.
Benutzt carbon, dtime(), Forward(), get_carbon_copy(), LagWarning(), message, Message2string(), msg(), process_names(), receiver und subject.
Wird benutzt von mail_cmds().
00778 { 00779 mixed msg; 00780 00781 if (!sizeof(nrs)) return 0; 00782 if (sizeof(nrs)==1) return Forward(to,nrs[0]); 00783 if (sizeof(nrs)>15) LagWarning(); 00784 00785 to=process_names(to); 00786 receiver=to[0]; 00787 carbon=to[1..]; 00788 subject="Fw: Gesammelte Briefe ("+dtime(time())[5..23]+")"; 00789 message=""; 00790 for (i=0;i<sizeof(nrs);i++) { 00791 write("Brief "+(nrs[i]+1)+": "); 00792 message+=Message2string(nrs[i])+ 00793 "----------------------------------------------------------------------\n"; 00794 write("Angehaengt.\n"); 00795 } 00796 /* 00797 if (!appendflag) { 00798 */ 00799 return get_carbon_copy(),1; 00800 /* } 00801 else { 00802 write("Text kann angehaengt werden\n"); 00803 get_subject(subject,message); 00804 } 00805 return 1; 00806 */ 00807 }


| static get_carbon_copy | ( | str | ) | [static] |
Definiert in Zeile 222 der Datei testmailer.c.
Benutzt blindcarbon, carbon, directflag, h, i, input, message, p, process_names(), receiver, send_mail(), SendMail(), slice_array(), subject und x.
Wird benutzt von Forward(), ForwardArea() und SendMail().
00222 { // Aufruf mit 0, wenn keine cc gewuenscht. 00223 int i,j; 00224 object p; 00225 string *oldcarbons,h,*receivers; 00226 mapping orignames; 00227 00228 oldcarbons=carbon; 00229 if (str=="~q") return SendMail(0); // Abbruch, entspricht Abbruch im Editor 00230 if (!str || str=="") carbon=0; 00231 else carbon=process_names(str); 00232 carbon=(oldcarbons ? oldcarbons : ({}))+(carbon ? carbon : ({})); 00233 /* if (!sizeof(carbon)) carbon=0; */ 00234 00235 #ifdef MAIL_SUPPORT_BCC 00236 blindcarbon=filter(carbon,lambda(({'x}),({#'==,'-',({#'[,'x,0})}))); 00237 carbon-=blindcarbon; 00238 blindcarbon=map(blindcarbon,lambda(({'x}),({#'slice_array,'x,1,1000}))); 00239 #endif 00240 00241 #ifdef MAIL_SUPPORT_BCC 00242 oldcarbons=({receiver})+carbon+blindcarbon; // speichere alle Originaladressen 00243 #else 00244 oldcarbons=({receiver})+carbon; 00245 #endif 00246 00247 /* Forwards auswerten, dabei werden auch ungueltige Adressen gefiltert */ 00248 /* orignames speichert die Zuordnung Zieladressen -> Originaladressen */ 00249 00250 orignames=([]); 00251 h=old_explode(FWSERV->QueryForward(receiver),","); 00252 00253 DEBUGVAR(h); 00254 for (j=sizeof(h)-1;j>=0;j--) 00255 orignames[(h[j][0]=='\\'?h[j][1..]:h[j])]=({receiver[0]=='\\'?receiver[1..]:receiver}); 00256 receiver=h[0]; 00257 receivers=h[1..]; // Missbrauch dieser Variable! 00258 00259 DEBUGVAR(orignames); 00260 00261 for (i=sizeof(carbon)-1;i>=0;i--) { 00262 h=old_explode(FWSERV->QueryForward(carbon[i]),","); 00263 for (j=sizeof(h)-1;j>=0;j--) { 00264 h[j]=(h[j][0]=='\\'?h[j][1..]:h[j]); 00265 orignames[h[j]]=(orignames[h[j]]||({}))+({carbon[i][0]=='\\'?carbon[i][1..]:carbon[i]}); 00266 receivers+=h; 00267 } 00268 } 00269 carbon=receivers; 00270 00271 #ifdef MAIL_SUPPORT_BCC 00272 receivers=({}); 00273 for (i=sizeof(blindcarbon)-1;i>=0;i--) { 00274 h=old_explode(FWSERV->QueryForward(blindcarbon[i]),","); 00275 for (j=sizeof(h)-1;j>=0;j--) { 00276 h=(h[j][0]=='\\'?h[j][1..]:h[j]); 00277 orignames[h[j]]=(orignames[h[j]]||({}))+({blindcarbon[i][0]=='\\'?blindcarbon[i][1..]:blindcarbon[i]}); 00278 receivers+=h; 00279 } 00280 } 00281 blindcarbon=receivers; 00282 #endif 00283 00284 carbon=send_mail(); 00285 receivers=({}); 00286 00287 if (!pointerp(carbon) || !sizeof(carbon)){ 00288 write("Brief NICHT verschickt, da keine Empfaenger gefunden!\n"); 00289 } else { 00290 string *a; 00291 DEBUGVAR(orignames); 00292 for (i=0;i<sizeof(carbon);i++){ 00293 DEBUGVAR(carbon[i]); 00294 /* evtl. abfragen nach query_editing und/oder query_input_to */ 00295 /* Benachrichtige Spieler, die ein forward gesetzt haben */ 00296 for (j=sizeof(a=orignames[carbon[i]]-({carbon[i]}))-1;j>=0;j--) 00297 if (p=find_player(a[j])) 00298 tell_object(p,"Ein Postreiter ruft Dir aus einiger Entfernung zu, dass Du neue Post hast!\nDer Brief wurde wunschgemaess weitergeleitet.\n"); 00299 00300 /* Benachrichtige Empfaenger */ 00301 #ifndef MAILDEMON0297 00302 if (p=find_player(carbon[i])) 00303 tell_object(p,"Ein Postreiter ruft Dir aus einiger Entfernung zu, dass Du neue Post hast!\n"); 00304 #endif 00305 receivers+=orignames[carbon[i]]||orignames["\\"+carbon[i]]; 00306 } 00307 DEBUGVAR(carbon); 00308 write("Abgesandt an: "+implode(unify_array(map(receivers,#'capitalize)),", ")+"\n");//'))); 00309 } 00310 for (i=sizeof(oldcarbons)-1;i>=0;i--) 00311 if (oldcarbons[i][0]=='\\') 00312 oldcarbons[i]=oldcarbons[i][1..]; 00313 oldcarbons=oldcarbons-receivers; 00314 if (sizeof(oldcarbons)) { 00315 write("Empfaenger unbekannt: "+implode(map(oldcarbons,#'capitalize),", ")+"\nIrgendjemand wirft Dir den zurueckgekommenen Brief zu.\n");//'))) 00316 send_mail(oldcarbons); 00317 } 00318 00319 message=receiver=carbon=subject=0; 00320 if (directflag) { 00321 if (directflag==1) remove(); // 1: Direktmodus, 2: non-interactive 00322 return 1; 00323 } 00324 return input(); 00325 }


| static varargs get_subject | ( | string | str, | |
| string | pretext | |||
| ) | [static] |
Definiert in Zeile 190 der Datei testmailer.c.
Benutzt DEBUGVAR, input_to(), nedit(), SendMail() und subject.
Wird benutzt von Forward().
00190 { 00191 DEBUGVAR(str); 00192 DEBUGVAR(subject); 00193 if ((!str||str=="") && !subject) { 00194 write("Titel (Abbrechen mit ~q): "); 00195 return input_to("get_subject"); 00196 } 00197 if (str=="~q"||str=="~Q") return SendMail(0); // entspricht Abbruch im Editor. 00198 if (str && str!="") subject=str; 00199 write("Bitte gib jetzt Deine Nachricht an:\n\ 00200 ** oder . wenn fertig, ~q fuer Abbruch, ~h fuer eine Hilfsseite\n"); 00201 nedit("SendMail",pretext); 00202 // return 1; 00203 }


| static mixed GetAlias | ( | mixed | a | ) | [static] |
Definiert in Zeile 1157 der Datei testmailer.c.
Benutzt aliases und process_names().
01157 { return process_names(aliases[a]); }

| string GetFolderName | ( | mixed | fol | ) |
Definiert in Zeile 1242 der Datei testmailer.c.
Benutzt akt_folder, folders und IS_NUMBER.
01242 { // int oder string. alles andere -> Fehler! 01243 mixed h; 01244 01245 if (fol=="+") fol=akt_folder+1; 01246 if (fol=="-") fol=akt_folder-1; 01247 if ((!fol)||(intp(fol))||(IS_NUMBER(fol))) { 01248 if (!intp(fol)) fol=to_int(fol)-1; 01249 if (fol<0||fol>=sizeof(folders[0])) 01250 return write("Einen Ordner mit Nummer "+(fol+1)+" gibt es nicht.\n"),0; 01251 return folders[0][fol]; 01252 } 01253 fol=lower_case(fol); 01254 if (sizeof(h=regexp(folders[0],"^"+fol))==1) return h[0]; 01255 if (member(folders[0],fol)==-1) 01256 return write("Einen Ordner mit Namen "+fol+" hast Du nicht.\n"),0; 01257 return fol; 01258 }
| static varargs int GetFolders | ( | int | nocondflag | ) | [static] |
Definiert in Zeile 463 der Datei testmailer.c.
Benutzt file_time(), folder_date, folder_size, folders, MAILFILE, MAILFILEO, name und restore_object().
Wird benutzt von update().
00463 { 00464 // nocondflag: no condition, unbedingt neuladen 00465 00466 // Cache-Verwaltung endlich funktionsfaehig [251196] 00467 // IDEE: Uhrzeit & Groesse untersuchen, ausserdem nach Verschieben neuladen. 00468 // Auch nach automatischem Verschieben (unread -> newmail)! 00469 00470 00471 // write("DEBUG: GetFolders called, old date "+folder_date+", old size "+folder_size+", nocondflag="+nocondflag+"\n"); 00472 if (!nocondflag && 00473 file_time(MAILFILEO(name))==folder_date && 00474 file_size(MAILFILEO(name))==folder_size) return 0; 00475 00476 if (!restore_object(MAILFILE(name))) folders=({({}),({})}); 00477 folder_date=file_time(MAILFILEO(name)); 00478 folder_size=file_size(MAILFILEO(name)); 00479 if (!pointerp(folders) || sizeof(folders)!=2) folders=({({}),({})}); 00480 // write("DEBUG: GetFolders finished, new date "+folder_date+", new size "+folder_size+"\n"); 00481 return 1; 00482 }


| int* GetNumbers | ( | mixed | s | ) |
Definiert in Zeile 1200 der Datei testmailer.c.
Benutzt akt_folder, DEBUGVAR und folders.
01200 { 01201 int i,h1,h2; 01202 mixed ret; 01203 01204 if (intp(s)) return ({s-1}); 01205 if (stringp(s)) s=({s-1}); 01206 if (!pointerp(s)) return 0; 01207 01208 ret=({}); 01209 01210 for (i=sizeof(s)-1;i>=0;i--) { 01211 if (sscanf(s[i],"%d-%d",h1,h2)==2) { 01212 if (h2-h1>100) { 01213 write("Nicht so viele auf einmal, bitte.\n"); 01214 return ({}); 01215 } 01216 for (h1--;h1<h2;h1++) ret=ret-({h1})+({h1}); 01217 } 01218 else 01219 ret=ret-({h1=to_int(s[i])-1})+({h1}); 01220 } 01221 ret=sort_array(ret,#'>); //') 01222 DEBUGVAR(ret); 01223 if (ret[0]<0) { 01224 write("Illegale Nummer: "+(ret[0]+1)+", nichts unter 1 bitte!\n"); 01225 return ({}); 01226 } 01227 if (ret[<1]>=sizeof(folders[1][akt_folder])) { 01228 write("Illegale Nummer: "+(ret[<1]+1)+", so gross ist dieser Ordner nicht!\n"); 01229 return ({}); 01230 } 01231 return ret; 01232 }
| string GetReTitle | ( | string | s | ) |
Definiert in Zeile 1190 der Datei testmailer.c.
| init | ( | ) |
Definiert in Zeile 118 der Datei testmailer.c.
Benutzt init() und init_rescue().
00118 { 00119 (::init()); 00120 init_rescue(); 00121 add_action("postneustart","post"); 00122 add_action("postneustart","mail"); 00123 }

| static input | ( | ) | [static] |
Definiert in Zeile 1112 der Datei testmailer.c.
Benutzt input_to() und prompt().

| static LagWarning | ( | ) | [static] |
Definiert in Zeile 856 der Datei testmailer.c.
Wird benutzt von DeleteMessage(), ForwardArea() und SaveMessage().
00856 { 00857 write("\ 00858 WARNUNG!!! Diese Aktion kann sehr lange benoetigen. Bitte sparsam verwenden,\n\ 00859 um das Lag fuer alle ertraeglich zu halten. Falls die Aktion mit einem\n\ 00860 Fehler abbricht, waren es wahrscheinlich zu viele Briefe auf einmal.\n\ 00861 Dann kannst Du mit \"mail\" wieder in das Mailmenu einsteigen und solltest\n\ 00862 es mit weniger Briefen versuchen.\n"); 00863 }

| static ListAliases | ( | ) | [static] |
Definiert in Zeile 901 der Datei testmailer.c.
Benutzt aliases und P_MAILADDR.
Wird benutzt von mail_cmds().
00901 { 00902 mixed a; 00903 int i; 00904 string s; 00905 a=sort_array(m_indices(aliases),#'>); // '); 00906 s=( "Definierte Aliase:\n" 00907 "d.xyz = Alle Mitarbeiter der Domain xyz\n" 00908 "freunde = Deine Freunde (entsprechend Freundschaftsband)\n" 00909 "me = "+(this_player()->QueryProp(P_MAILADDR))+"\n"); 00910 for (i=0;i<sizeof(a);i++) 00911 s+=sprintf("%-12s = %s\n",a[i],aliases[a[i]]); 00912 write(s); 00913 }

| static varargs ListContent | ( | ) | [static] |
Definiert in Zeile 581 der Datei testmailer.c.
Benutzt akt_folder, akt_nr, DEBUGVAR, folders, MSG_DATE, MSG_FROM, MSG_SUBJECT und update().
Wird benutzt von ChangeFolder(), do_mail() und mail_cmds().
00581 { 00582 int i; 00583 update(); 00584 // DEBUGVAR(folders[0]); 00585 // DEBUGVAR(folders[1]); 00586 DEBUGVAR(akt_folder); 00587 if (!pointerp(folders)||sizeof(folders)!=2|| 00588 !pointerp(folders[0])||!sizeof(folders[0])) { 00589 write("Du hast keinen einzigen Ordner!\n"); 00590 return; 00591 } 00592 write("Ordner "+folders[0][akt_folder]+": "); 00593 if (!pointerp(folders[1]) || akt_folder>=sizeof(folders[1]) || 00594 !pointerp(folders[1][akt_folder])) { 00595 write("Dieser Ordner ist leer.\n"); 00596 return; 00597 } 00598 write(sizeof(folders[1][akt_folder])+" Brief"+ 00599 ((sizeof(folders[1][akt_folder])!=1)?"e\n":"\n")); 00600 for (i=0;i<sizeof(folders[1][akt_folder]);i++){ 00601 write(((i+1==akt_nr) ? "->" : " ")+ 00602 sprintf("%3d: (%12s, %s) ",i+1,capitalize(folders[1][akt_folder][i][MSG_FROM]), 00603 folders[1][akt_folder][i][MSG_DATE][5..11])+ 00604 folders[1][akt_folder][i][MSG_SUBJECT]+"\n"); 00605 } 00606 return; 00607 }


| static ListFolders | ( | ) | [static] |
Definiert in Zeile 621 der Datei testmailer.c.
Benutzt akt_folder, folders, MAILFILEO, name und update().
Wird benutzt von mail_cmds().
00621 { 00622 int i; 00623 update(); 00624 write("Du hast "+sizeof(folders[0])+" Ordner:\n"); 00625 for (i=0;i<sizeof(folders[0]);i++) 00626 write(sprintf("%2s%3d: %-20s(%3d Briefe)\n", 00627 ((i==akt_folder)?"->":" "), 00628 i+1,folders[0][i],sizeof(folders[1][i]))); 00629 write("Gesamtgroesse Deines Postfachs: "+ 00630 ((file_size(MAILFILEO(name))+512)/1024)+" KB.\n"); 00631 }


| static mail_cmds | ( | str | ) | [static] |
Definiert in Zeile 920 der Datei testmailer.c.
Benutzt akt_folder, akt_nr, ChangeFolder(), DEBUGVAR, DeleteMessage(), folders, Forward(), ForwardArea(), GetFolderName(), GetNumbers(), input, IS_NUMBER, ListAliases(), ListContent(), ListFolders(), MakeFolder(), MediumHelpPage(), MoveMessage(), old_explode(), ReadMessage(), RemoveFolder(), Reply(), SaveMessage(), update() und write_mail().
00920 { 00921 00922 string *strargs; 00923 int i,nrargs; 00924 00925 update(); 00926 00927 if (!str || str=="" || !(nrargs=sizeof(strargs=old_explode(str[0..0]+lower_case(str[1..])," ")))) { 00928 ListContent(); 00929 return input(); 00930 } 00931 strargs[0]=strargs[0][0..3]; 00932 if (IS_NUMBER(strargs[0])) { 00933 strargs=({"lies",strargs[0]}); 00934 nrargs=2; 00935 } 00936 DEBUGVAR(strargs); 00937 switch (strargs[0]) { 00938 case "q": // quit 00939 case "quit": 00940 remove(); return 1; 00941 case "?": // Hilfeseite 00942 case "hilf": 00943 case "h": 00944 MediumHelpPage(); 00945 return; 00946 case "oeff": // change folder 00947 case "c": 00948 if (nrargs<2) { 00949 write("Welchen Ordner willst Du oeffnen (Name, Nummer, +, -)?\n"); 00950 break; 00951 } 00952 ChangeFolder(strargs[1]); 00953 break; 00954 case "ordn": // list folders 00955 case "i": 00956 ListFolders(); 00957 break; 00958 case "anze": // list content 00959 case "l": 00960 ListContent(); 00961 break; 00962 case "alia": // list aliases 00963 case "a": 00964 ListAliases(); 00965 break; 00966 case "erze": // make new folder 00967 case "n": 00968 if (nrargs<2) { 00969 write("Bitte als Argument einen Namen fuer den neuen Ordner angeben!\n"); 00970 break; 00971 } 00972 MakeFolder(lower_case(strargs[1])); 00973 break; 00974 case "entf": // delete folder 00975 case "e": 00976 if (nrargs<2) { 00977 write("Bitte als Argument Name oder Nummer des zu loeschenden Ordners angeben.\n"); 00978 break; 00979 } 00980 RemoveFolder(GetFolderName(strargs[1])); 00981 break; 00982 case "loes": // delete message 00983 case "d": 00984 if (nrargs==1) DeleteMessage(({akt_nr-1})); 00985 else DeleteMessage(GetNumbers(strargs[1..])); 00986 break; 00987 case "schr": // write mail 00988 case "m": 00989 if (nrargs<2) { 00990 write("Bitte Empfaenger als Argument angeben!\n"); 00991 break; 00992 } 00993 write_mail(strargs[1..]); 00994 return 1; 00995 case "vers": // move message to other folder 00996 case "verl": 00997 case "v": 00998 if (nrargs<2 || (nrargs>2 && !IS_NUMBER(strargs[1]))) { 00999 write("Syntax: v [nr|nr-nr [nr|nr-nr ...]] <ordnername>|<ordnernr>|+|-\n"); 01000 break; 01001 } 01002 if (nrargs==2) MoveMessage(({akt_nr-1}),GetFolderName(strargs[1])); 01003 else MoveMessage(GetNumbers(strargs[1..<2]),GetFolderName(strargs[<1])); 01004 update(0,1); // unbedingt neuladen. 01005 break; 01006 case "bean": 01007 case "r": 01008 case "grup": 01009 case "g": 01010 if (nrargs<2) { 01011 if (Reply(akt_nr-1,(strargs[0][0]=='g'))) return 1; 01012 break; 01013 } 01014 if (!IS_NUMBER(strargs[1])) { 01015 write("Argumentfehler: Bitte Nummer des Briefes angeben, auf den sich die Antwort\n" 01016 "beziehen soll. Ohne Argument bezieht sie sich auf den aktuellen Brief.\n"); 01017 break; 01018 } 01019 if (nrargs>2) { 01020 write("Zu viele Argumente. Eine Antwort darf sich nur auf einen Brief beziehen!\n"); 01021 break; 01022 } 01023 if (Reply(to_int(strargs[1])-1,(strargs[0][0]=='g'))) return 1; 01024 break; 01025 case "weit": 01026 case "f": 01027 if (nrargs<2 || 01028 (IS_NUMBER(strargs[nrargs-1])&&sizeof(old_explode(strargs[nrargs-1],"@"))==1)) { 01029 write("Syntax: f [nr|nr-nr [nr|nr-nr ...]] empfaenger [empf2 ...]\n"); 01030 break; 01031 } 01032 if (!IS_NUMBER(strargs[1])) { 01033 if (Forward(strargs[1..],akt_nr-1)) return 1; 01034 } // return, nicht break: input() wird von get_carbon_copy() aufger. 01035 else { 01036 int pos; // letzte Position, an der eine Nummer steht 01037 01038 for (pos=nrargs-1;pos>1&&!IS_NUMBER(strargs[pos]);pos--); 01039 if (ForwardArea(strargs[(pos+1)..],GetNumbers(strargs[1..pos]))) 01040 return 1; 01041 } 01042 break; 01043 case "Weit": 01044 case "F": 01045 if (nrargs<2 || (nrargs==2 && IS_NUMBER(strargs[1]))) { 01046 write("Haeh? Bitte so: F [nr] empfaenger\n"); 01047 break; 01048 } 01049 if (!IS_NUMBER(strargs[1])) { 01050 if (Forward(strargs[1..],akt_nr-1,1)) return 1; 01051 break; 01052 } 01053 if (IS_NUMBER(strargs[2])||member(strargs[1],'-')>=0) { 01054 write("Argumentfehler: Wenn Du eigenen Text anhaengen willst, darfst Du nur einen\n" 01055 "Brief angeben, nicht mehrere.\n"); 01056 break; 01057 } 01058 if (Forward(strargs[2..],to_int(strargs[1])-1,1)) return 1; 01059 break; 01060 case "lies": 01061 if (nrargs<2) { if (ReadMessage(akt_nr-1)) return 1; } else 01062 if (ReadMessage(to_int(strargs[1])-1)) return 1; 01063 break; 01064 case ".": 01065 if (ReadMessage(akt_nr-1)) return 1; 01066 break; 01067 case "+": 01068 if (akt_nr==sizeof(folders[1][akt_folder])) 01069 write("Noch weiter vorwaerts gehts nicht!\nMit 'c +' kannst Du den naechsten Ordner oeffnen.\n"); 01070 else if (ReadMessage(akt_nr)) return 1; 01071 break; 01072 case "-": 01073 if (akt_nr==1) 01074 write("Noch weiter zurueck gehts nicht!\nMit 'c -' kannst Du den vorhergehenden Ordner oeffnen.\n"); 01075 else if (ReadMessage(akt_nr-2)) return 1; 01076 break; 01077 case "spei": 01078 case "s": 01079 if ((nrargs==2 && !IS_NUMBER(strargs[1]))) { 01080 write("Syntax: s [nr|nr-nr [nr|nr-nr ...]]\n"); 01081 break; 01082 } 01083 if (nrargs==1) (SaveMessage(({akt_nr-1}))); 01084 else (SaveMessage(GetNumbers(strargs[1..]))); 01085 break; 01086 default: 01087 write("Kommando nicht verstanden. Eine Hilfsseite bekommst Du mit 'h'.\n"); 01088 break; 01089 } 01090 return input(); 01091 }

| static MakeFolder | ( | string | s | ) | [static] |
Definiert in Zeile 634 der Datei testmailer.c.
00634 { 00635 int ret; 00636 if (sscanf(s,"%d",ret)||s[0]<'a'||s[0]>'z') return 00637 write("Um Probleme zu vermeiden, duerfen Ordner nicht mit Nummern oder Sonderzeichen\nbezeichnet werden.\n"); 00638 if (s=="newmail"||s=="unread") return 00639 write("Die Ordnernamen 'newmail' und 'unread' sind reserviert.\n"); 00640 ret=MAILDEMON->MakeFolder(s, name); 00641 if (ret==1) write("Ok, neuer Ordner mit Namen "+s+" angelegt.\n"); 00642 else write("Ein Ordner mit dem Namen existiert bereits.\n"); 00643 return s; 00644 }
| static MediumHelpPage | ( | ) | [static] |
Definiert in Zeile 432 der Datei testmailer.c.
Benutzt akt_folder, folders, input, IS_WIZARD und SAVEFILENAME.
Wird benutzt von mail_cmds().
00432 { 00433 if (sizeof(folders[0])) 00434 write("Aktueller Ordner ist \""+folders[0][akt_folder]+"\"\n"); 00435 write("\n\ 00436 Brief <nr> lesen '<nr>' (lies <nr>)\n\ 00437 Aktueller / naechster / letzter Brief '.' / '+' / '-'\n\ 00438 Brief schreiben 'm <name>' (schreibe)\n\ 00439 Brief beantworten 'r [nr]' (beantworte)\n\ 00440 Gruppenantwort an alle Empfaenger 'g [nr]' (gruppe)\n\ 00441 Brief(e) loeschen 'd [nummern]' (loesche)\n\ 00442 Brief(e) weitersenden 'f [nummern] <name>' (weiter)\n\ 00443 Weitersenden plus eigenen Text 'F [nr] <name>' (Weiter)\n\ 00444 Brief(e) in anderen Ordner verschieben 'v [nummern] <ordner>' (verschiebe)\n\ 00445 Mails in diesem Ordner listen 'l' (oder nichts) (anzeigen)\n\ 00446 Aktuellen Ordner wechseln 'c <ordner>' (oeffne)\n\ 00447 Neuen Ordner anlegen 'n <ordnername>' (erzeuge)\n\ 00448 Leeren Ordner loeschen 'e <ordner>' (entferne)\n\ 00449 Alle Ordner anzeigen 'i' (ordner)\n\ 00450 "+ (IS_WIZARD(this_player()) ? "\ 00451 Brief(e) speichern in Datei 's [nummern]' (speichere)\n\ 00452 "+SAVEFILENAME+"\n" : "")+ "\ 00453 Mailaliase anzeigen 'a' (aliase)\n\ 00454 Verfuegbare Kommandos zeigen '?' oder 'h'\n\ 00455 Postmenue verlassen 'q'\n\ 00456 Kommando <cmd> ausfuehren '!<cmd>'\n\ 00457 [nummern] bedeutet: [nr|nr-nr [nr|nr-nr ...]]. (Liste von Nr und Bereichen)\n\ 00458 Bei der Langform reicht es, die ersten 4 Zeichen eines Kommandos anzugeben.\n\ 00459 "); 00460 return input(); 00461 }

| static string Message2string | ( | int | nr | ) | [static] |
Definiert in Zeile 822 der Datei testmailer.c.
Benutzt akt_folder, folders, message, MSG_BODY, MSG_CC, MSG_DATE, MSG_FROM, MSG_RECIPIENT, MSG_SENDER, MSG_SUBJECT und x.
Wird benutzt von ForwardArea(), ReadMessage() und SaveMessage().
00822 { 00823 mixed letter; 00824 string message; 00825 int x; 00826 if (!pointerp(folders)||!pointerp(folders[0])|| 00827 sizeof(folders[0])<=akt_folder){ 00828 write("Seltsamer Fehler: Kein aktueller Ordner!\n"); 00829 return 0; 00830 } 00831 if (!pointerp(folders[1][akt_folder]) || 00832 sizeof(folders[1][akt_folder])<=nr || 00833 nr<0) { 00834 write("Diese Nummer gibt es in diesem Ordner nicht!\n"); 00835 return 0; 00836 } 00837 letter=folders[1][akt_folder][nr]; 00838 message= 00839 "Absender: "+capitalize(letter[MSG_FROM])+"\n"+ 00840 ((letter[MSG_FROM]==letter[MSG_SENDER]) ? "" : 00841 "Abgesandt aber von: "+capitalize(letter[MSG_SENDER])+"\n") + 00842 "An: "+capitalize(letter[MSG_RECIPIENT]); 00843 if (letter[MSG_CC] && letter[MSG_CC]!="") { 00844 message+="\nCc: "; 00845 if (!pointerp(letter[MSG_CC])) message+=capitalize(letter[MSG_CC]); 00846 else message+=implode(map(letter[MSG_CC],#'capitalize),", ");//')) 00847 } 00848 message+="\nDatum: "+letter[MSG_DATE]+"\n"+ 00849 /* Sinnlos, oder? "Id: "+letter[MSG_ID]+"\n"+ */ 00850 "Titel: "+letter[MSG_SUBJECT]+"\n\n"+ 00851 letter[MSG_BODY]+"\n\n"; 00852 return message; 00853 }

| static MoveMessage | ( | mixed | msg, | |
| mixed | fol | |||
| ) | [static] |
Definiert in Zeile 687 der Datei testmailer.c.
Benutzt akt_folder, akt_nr, folders, MAILDEMON und name.
Wird benutzt von mail_cmds().
00687 { 00688 int ret,i; 00689 00690 for (i=0;i<sizeof(msg);i++) { 00691 ret=MAILDEMON->MoveMsg(msg[i]-i, akt_folder, fol, name); 00692 switch(ret) { 00693 case 1: 00694 write("Brief "+(msg[i]+1)+" verschoben nach "+fol+".\n"); 00695 break; 00696 case 0: 00697 write("So viele Briefe sind nicht im aktuellen Ordner.\n"); return 0; 00698 case -1: 00699 write("Seltsamer Fehler - duerfte eigentlich nicht passieren:\n'Kein aktueller Ordner.'\n"); return -1; 00700 case -3: 00701 write("Den Zielordner "+fol+" gibt es nicht!\n"); return ret; 00702 default: 00703 write("MAILDEMON: MoveMsg Interner Fehler "+ret+". Bitte Erzmagier verstaendigen.\n"); return ret; 00704 } 00705 } 00706 if (akt_nr>=sizeof(folders[1][akt_folder])) 00707 akt_nr=sizeof(folders[1][akt_folder])-1; 00708 00709 return ret; 00710 }

| postneustart | ( | ) |
Definiert in Zeile 143 der Datei testmailer.c.
Benutzt input, name, nedittext und RescueText().
00143 { 00144 if (!this_interactive() || name!=geteuid(this_interactive()) 00145 || query_input_pending(this_interactive()) 00146 || this_interactive()!=this_player()) return 0; 00147 write("Und weiter gehts...\n"); 00148 if (nedittext) return RescueText(); 00149 return input(); 00150 }

| static mixed process_names | ( | mixed | s | ) | [static] |
Definiert in Zeile 1126 der Datei testmailer.c.
Wird benutzt von Forward(), ForwardArea(), get_carbon_copy(), GetAlias() und write_mail().
01126 { 01127 mixed a1,a2,h; 01128 int i; 01129 string domain; 01130 if (stringp(s)) a1=explode(lower_case(s)," "); 01131 else a1=s; 01132 a2=({}); 01133 for (i=0;i<sizeof(a1);i++) a2+=explode(a1[i],","); 01134 a1=({}); 01135 01136 // printf("DEBUG ANFANG: %O\n",a2); 01137 01138 for (i=0;i<sizeof(a2);i++) { 01139 if (sscanf(a2[i],"d.%s",domain)) 01140 a1+=((sizeof(h=filter(((h=(get_dir("/d/"+domain+"/*")||({}))-({".",".."})) ? h : ({})),#'query_wiz_level))) ? h : ({"d."+domain})); 01141 else if (a2[i]=="freunde") a1+=(this_player()->QueryProp("friends") || ({})); 01142 else if (a2[i]=="me") a1+=({this_player()->QueryProp(P_MAILADDR)}); 01143 else if (aliases[a2[i]]) a1+=GetAlias(a2[i]); 01144 #ifdef MAIL_SUPPORT_BCC 01145 else if (a2[i][0]=='-') a1+=map(RecurseProcessNames(a2[i][1..]),lambda(({'x}),({#'+,"-",'x}))); 01146 #endif 01147 else if ( (a2[i][0]>='a' && a2[i][0]<='z') || (sscanf(a2[i],"%s@%s",domain,domain)) || a2[i][0]=='\\') a1+=({a2[i]}); 01148 } 01149 01150 // printf("DEBUG ENDE: %O\n",a1); 01151 01152 return filter(a1, 01153 lambda( ({'x}) , ({ #'> , ({ #'strlen,'x }) , 1 }) )); 01154 }

| static prompt | ( | ) | [static] |
Definiert in Zeile 1096 der Datei testmailer.c.
Benutzt akt_folder, akt_nr, folders, path und update().
01096 { 01097 string path; 01098 01099 update(); 01100 if (!pointerp(folders)||!pointerp(folders[0])|| 01101 sizeof(folders[0])<=akt_folder) 01102 path="(kein Ordner)"; 01103 else 01104 path= "(" + folders[0][akt_folder] + ":" + 01105 ( sizeof(folders[1][akt_folder]) ? 01106 akt_nr + "/" + sizeof(folders[1][akt_folder]) : 01107 "leer") + ")"; 01108 write(path + " [Hilfe mit h] => "); 01109 }

| query_prevent_shadow | ( | ) |
Definiert in Zeile 1260 der Datei testmailer.c.
| static mapping Read_mailrc | ( | string | file | ) | [static] |
Definiert in Zeile 1163 der Datei testmailer.c.
Wird benutzt von do_mail().
01163 { 01164 mapping al; 01165 int i; 01166 mixed ar; 01167 string s1,s2; 01168 01169 if (!(ar=read_file(file))) { 01170 // write(file+" not readable\n"); 01171 return ([]); 01172 } 01173 al=([]); 01174 ar=explode(ar,"\n"); 01175 for (i=sizeof(ar)-1;i>=0;i--) 01176 if (sscanf(ar[i],"%s %s",s1,s2)==2) 01177 al+=([s1:s2]); 01178 // printf("Got aliases %O",al); 01179 return al; 01180 }

| static ReadMessage | ( | int | nr | ) | [static] |
Definiert in Zeile 812 der Datei testmailer.c.
Benutzt akt_folder, akt_nr, folders, message und Message2string().
Wird benutzt von mail_cmds().
00812 { 00813 if (nr<sizeof(folders[1][akt_folder]) && nr>=0) 00814 akt_nr=nr+1; 00815 message=Message2string(nr); 00816 if (!message) return 0; 00817 this_player()->More(message,0,#'input); //') 00818 return 1; 00819 }


| static RemoveFolder | ( | string | x | ) | [static] |
Definiert in Zeile 647 der Datei testmailer.c.
00647 { 00648 int ret; 00649 if (!x) return -42; // folder existiert nicht, Fehlermeldung bereits geg. 00650 // if (intp(x)) x=folders[0][x]; 00651 00652 if (x=="newmail") return 00653 write("Der Ordnername 'newmail' ist reserviert.\nDieser Ordner darf nicht geloescht werden.\n"),-43; 00654 00655 ret=MAILDEMON->RemoveFolder(x, name); 00656 switch (ret) { 00657 case 1: write("Ordner "+x+" geloescht.\n"); break; 00658 case -1: write("Kein solcher Ordner.\n"); break; 00659 case 0: write("Der Ordner war nicht leer - nicht geloescht.\n"); break; 00660 default: write("Fehler Nummer "+ret+" - was auch immer das heisst...\n"); break; 00661 } 00662 return ret; 00663 }
| static varargs Reply | ( | int | nr, | |
| int | group | |||
| ) | [static] |
Definiert in Zeile 713 der Datei testmailer.c.
Benutzt akt_folder, DEBUGVAR, folders, GetReTitle(), MSG_BODY, MSG_CC, MSG_FROM, MSG_RECIPIENT, MSG_SUBJECT, name und write_mail().
Wird benutzt von mail_cmds().
00713 { 00714 mixed to,dummy; 00715 if (!pointerp(folders)||!pointerp(folders[0])|| 00716 sizeof(folders[0])<=akt_folder) { 00717 write("Seltsamer Fehler: Kein aktueller Ordner!\n"); 00718 return 0; 00719 } 00720 if (nr<0 || !pointerp(folders[1][akt_folder]) || 00721 sizeof(folders[1][akt_folder])<=nr){ 00722 write("Einen Brief mit Nummer "+(nr+1)+" gibt es in diesem Ordner nicht!\n"); 00723 return 0; 00724 } 00725 00726 if (sscanf("\n"+lower_case(folders[1][akt_folder][nr][MSG_BODY]), 00727 "%s\nreply-to:%s\n",dummy,to)==2) { // Reply-to gesetzt 00728 while (to[0]==' ') to=to[1..]; // ueberschuessige Leerzeichen entfernen 00729 while (to[<1]==' ') to=to[0..<2]; 00730 } 00731 else 00732 to=folders[1][akt_folder][nr][MSG_FROM]; 00733 if (group) // Gruppenantwort 00734 to=({to, 00735 folders[1][akt_folder][nr][MSG_RECIPIENT]})+ 00736 (pointerp(folders[1][akt_folder][nr][MSG_CC]) ? folders[1][akt_folder][nr][MSG_CC] : ({})) 00737 -({name}); 00738 #ifdef DEBUG 00739 DEBUGVAR(name); 00740 DEBUGVAR(to); 00741 #endif 00742 write_mail(to,GetReTitle(folders[1][akt_folder][nr][MSG_SUBJECT])); 00743 return 1; 00744 }


| reset | ( | void | ) |
Definiert in Zeile 126 der Datei testmailer.c.
Benutzt find_player(), name, nedittext, pl und reset().
00126 { 00127 object pl; 00128 (::reset()); 00129 if (!name) return remove(); 00130 pl=find_player(name); 00131 if (!pl || environment()!=pl) return remove(); 00132 if (nedittext && !query_input_pending(pl)) { 00133 tell_object(pl,"\ 00134 *** Hoppla! Du hast noch einen nicht fertiggeschriebenen Brief!\n\ 00135 *** Mit ~r kannst Du weiterschreiben.\n"); 00136 return; 00137 } 00138 if (query_input_pending(pl)!=this_object()) 00139 return remove(); 00140 }

| static varargs SaveMessage | ( | int * | nrs | ) | [static] |
Definiert in Zeile 866 der Datei testmailer.c.
Benutzt IS_WIZARD, LagWarning(), Message2string(), SAVEFILENAME und x.
Wird benutzt von mail_cmds().
00866 { 00867 int x,nr; 00868 string rest; 00869 mixed letter; 00870 00871 if (!IS_WIZARD(this_player())) { 00872 write("Das koennen nur Magier!\n"); 00873 return 0; 00874 } 00875 if (!sizeof(nrs)) { 00876 write("Speichere nichts.\n"); 00877 return 1; 00878 } 00879 00880 if ( sizeof(nrs) > 15 ) LagWarning(); 00881 00882 for (nr=0;nr<sizeof(nrs);nr++) { 00883 write("Speichere Brief "+(nrs[nr]+1)+": "); 00884 letter=Message2string(nrs[nr]); 00885 letter+="----------------------------------------------------------------------\n"; 00886 if (!letter) { 00887 write("Speichern unmoeglich.\n"); 00888 return 0; 00889 } 00890 if (!write_file(SAVEFILENAME, letter)) 00891 write("Brief zu lang!\n"); 00892 else 00893 write("Ok.\n"); 00894 } 00895 write("Speichern nach "+SAVEFILENAME+" fertig.\nBitte denk dran, diese Datei wieder zu loeschen!\n"); 00896 return 1; 00897 }


| static varargs send_mail | ( | mixed | back | ) | [static] |
Definiert in Zeile 328 der Datei testmailer.c.
Benutzt blindcarbon, carbon, ctime(), DEBUGVAR, MAILDEMON, message, MSG_BCC, MSG_BODY, MSG_CC, MSG_DATE, MSG_FROM, MSG_ID, MSG_RECIPIENT, MSG_SENDER, MSG_SUBJECT, office_name, receiver und subject.
Wird benutzt von get_carbon_copy().
00328 { 00329 mixed *mail; 00330 00331 mail=allocate(9); 00332 00333 #ifdef DEBUG 00334 DEBUGVAR(receiver); 00335 DEBUGVAR(carbon); 00336 #endif 00337 00338 if (!pointerp(carbon) || !sizeof(carbon)) carbon=0; 00339 mail[MSG_FROM]=this_player()->query_real_name(); 00340 mail[MSG_SENDER]=office_name; 00341 mail[MSG_RECIPIENT]=(back ? mail[MSG_FROM] : receiver); 00342 mail[MSG_CC]=(back ? 0 : carbon); 00343 #ifdef MAIL_SUPPORT_BCC 00344 mail[MSG_BCC]=blindcarbon; 00345 #else 00346 mail[MSG_BCC]=0; 00347 #endif 00348 00349 mail[MSG_SUBJECT]=(back ? "Zurueck! Empfaenger unbekannt: "+implode(back,", ") : subject); 00350 mail[MSG_DATE]=ctime(time()); 00351 mail[MSG_ID]="MorgenGrauen:"+time(); 00352 mail[MSG_BODY]=message; 00353 return MAILDEMON->DeliverMail(mail,1); 00354 }


| static varargs SendMail | ( | text | , | |
| flag | ||||
| ) | [static] |
Definiert in Zeile 206 der Datei testmailer.c.
Benutzt carbon, directflag, flag, get_carbon_copy(), input, input_to(), message, receiver, subject und text().
00206 { 00207 // flag: 1 = keine CC abfragen. 00208 if (!text) { 00209 write("Abbruch! Brief landet im Reisswolf.\n"); 00210 if (directflag) return remove(); 00211 subject=receiver=carbon=message=0; 00212 return input(); 00213 } 00214 message=text; 00215 if (flag) return get_carbon_copy(0); 00216 write("Cc: "); 00217 input_to("get_carbon_copy"); 00218 return 1; 00219 }

| SetOfficeName | ( | string | n | ) |
Definiert in Zeile 153 der Datei testmailer.c.
Benutzt office_name.
00153 { 00154 return office_name=n; 00155 }
| string* unify_array | ( | string * | a | ) |
Definiert in Zeile 1183 der Datei testmailer.c.
01183 { 01184 int i; 01185 for (i=sizeof(a)-1;i>=0;i--) a=a-({a[i]})+({a[i]}); 01186 return a; 01187 }
| static varargs update | ( | directflag | , | |
| nocondflag | ||||
| ) | [static] |
Definiert in Zeile 484 der Datei testmailer.c.
Benutzt akt_folder, akt_nr, DEBUGVAR, directflag, find_player(), folders, GetFolders(), MAILDEMON, member_array(), msg(), MSG_BCC, MSG_BODY, MSG_CC, MSG_FROM, MSG_RECIPIENT, MSG_SUBJECT, name, office_name, P_IGNORE und QueryProp().
00484 { 00485 // directflag: Mailer wird im Direktmodus betrieben 00486 // nocondflag: Unbedingt neuladen 00487 00488 int i,j,k,newletters; 00489 mixed *ignored; 00490 00491 if (!GetFolders(nocondflag)) return; // es hat sich nix getan 00492 00493 if (akt_nr<1) akt_nr=1; 00494 00495 DEBUGVAR(akt_folder); 00496 00497 if (akt_folder>=sizeof(folders[0]) || akt_folder<0) { 00498 akt_folder=member_array("newmail",folders[0]); 00499 if (akt_folder==-1) { 00500 MAILDEMON->MakeFolder("newmail",name); 00501 GetFolders(1); 00502 DEBUGVAR(folders[0]); 00503 akt_folder=member_array("newmail",folders[0]); 00504 } 00505 if (!directflag && akt_folder!=-1) write("Ordner 'newmail' aufgeschlagen.\n"); 00506 } 00507 00508 // if (!pointerp(folders)) return write("ERROR: folders no array in update\n"); // Kann eigentlich nicht vorkommen 00509 if (sizeof(folders[0]) && akt_nr>sizeof(folders[1][akt_folder])) 00510 akt_nr=sizeof(folders[1][akt_folder]); 00511 j=member_array("unread",folders[0]); 00512 if (j==-1) return; 00513 newletters=0; 00514 00515 // Testweise eine neue Version, die aber voraussetzt, dass die Position von 00516 // unread in der Folderliste von /secure/mail waehrend der Aktion 00517 // nicht veraendert wird. 00518 // alt ausgeklammert, ausserdem ueberall 0 statt k 00519 // k=0; 00520 // Neue Version wieder testweise drin 00521 00522 // while (j != -1 && pointerp(folders[1][j]) && sizeof(folders[1][j])>0) { 00523 for (k=0;k<sizeof(folders[1][j]);k++) { 00524 00525 // write("DEBUG: j="+j+"\n"); 00526 00527 if (pointerp(ignored=this_player()->QueryProp(P_IGNORE)) && 00528 member(ignored, lower_case(folders[1][j][k][MSG_FROM]+".mail"))>=0) { 00529 mixed msg; 00530 msg=folders[1][j][k]; 00531 write("Du laesst einen Brief von "+capitalize(msg[MSG_FROM])+ 00532 " unbesehen zurueckgehen.\n"); 00533 msg[MSG_BODY]=this_player()->name()+" \ 00534 hat diesen Brief ungeoeffnet an Dich zurueckgehen lassen\n\ 00535 und moechte nicht mehr von Deinen Briefen belaestigt werden.\n\ 00536 Titel: "+msg[MSG_SUBJECT]+"\n\ 00537 ------ Inhalt: ------------------------\n"+ 00538 msg[MSG_BODY]; 00539 msg[MSG_RECIPIENT]=msg[MSG_FROM]; 00540 msg[MSG_SUBJECT]="Annahme verweigert - zurueck an Absender"; 00541 msg[MSG_CC]=0; 00542 msg[MSG_BCC]=0; 00543 MAILDEMON->DeliverMail(msg,1); 00544 if (find_player(msg[MSG_RECIPIENT])) 00545 tell_object(find_player(msg[MSG_RECIPIENT]), 00546 "Ein Postreiter ruft Dir aus einiger Entfernung leicht sauer zu, dass er einen\nzurueckgekommenen Brief fuer Dich hat.\n"); 00547 MAILDEMON->RemoveMsg(0,j,name); 00548 } else { 00549 // Testweise durch DeleteUnreadFolder ersetzt (080297) 00550 #ifndef MAILDEMON0297 00551 MAILDEMON->MoveMsg(0, j, "newmail", name); 00552 #endif 00553 newletters++; 00554 } 00555 // GetFolders(1); 00556 // j=member_array("unread",folders[0]); 00557 // Letzte 2 Zeilen in "neuer" Version ersatzlos gestrichen 00558 } 00559 00560 #ifdef MAILDEMON0297 00561 MAILDEMON->DeleteUnreadFolder(name); 00562 #else 00563 MAILDEMON->RemoveFolder("unread",name); 00564 #endif 00565 if (newletters) { 00566 if (office_name=="mpa Kurierdienst") 00567 write("Ein Kurier drueckt Dir "+ 00568 ((newletters==1) ? "einen neuen Brief" : newletters+" neue Briefe") 00569 +" in die Hand und verschwindet wieder.\n"); 00570 else 00571 write("Du siehst, wie ein Postbeamter "+ 00572 ((newletters==1) ? "einen neuen Brief" : newletters+" neue Briefe") 00573 +" in Dein Fach legt.\n"); 00574 } 00575 GetFolders(1); // jetzt ohne unread, damit im endgueltigen Zustand. 00576 while (akt_folder>=sizeof(folders[0])) akt_folder--; 00577 if ((!akt_nr)&&sizeof(folders[1][akt_folder])) akt_nr=1; 00578 }

| static varargs write_mail | ( | mixed | str, | |
| std_subject | , | |||
| text | ||||
| ) | [static] |
Definiert in Zeile 158 der Datei testmailer.c.
Benutzt carbon, directflag, h, input und process_names().
Wird benutzt von do_mail(), mail_cmds() und Reply().
00158 { 00159 string str2; 00160 int h; 00161 00162 carbon=process_names(str); 00163 if (!sizeof(carbon)) return 00164 write("Kein Empfaenger angegeben!\n"),(directflag?remove():input()); 00165 write("Empfaenger: "+implode(map(carbon,#'capitalize),", ")+"\n"); 00166 str=carbon[0]; 00167 if (sizeof(carbon)>=2) carbon=carbon[1..<1]; 00168 else carbon=0; 00169 if ((str2=str) && str2!="" && str2[0]=='\\') str2=str2[1..]; 00170 if (!str) return write("WEM willst Du schreiben?\n"),(directflag?remove():input()); 00171 if (((catch(h=file_size("/"+SAVEPATH+str2[0..0]+"/"+str2+".o"))),h<=0 00172 && member(str2,'@')==-1)) 00173 return write("Mit dem Namen gibt es hier niemanden.\n"),(directflag?remove():input()); 00174 receiver=str; 00175 00176 if (text) { 00177 subject=std_subject; 00178 return SendMail(text,1); // flag 1: keine CC's bitte. 00179 } 00180 00181 write("Titel"); 00182 if (std_subject) write(" ("+std_subject+")"); 00183 write(": "); 00184 subject=std_subject; 00185 input_to("get_subject"); 00186 return 1; 00187 }


int akt_folder [static] |
Definiert in Zeile 95 der Datei testmailer.c.
Wird benutzt von ChangeFolder(), create(), DeleteMessage(), Forward(), GetFolderName(), GetNumbers(), ListContent(), ListFolders(), mail_cmds(), MediumHelpPage(), Message2string(), MoveMessage(), prompt(), ReadMessage(), Reply() und update().
int akt_nr [static] |
Definiert in Zeile 95 der Datei testmailer.c.
Wird benutzt von ChangeFolder(), ListContent(), mail_cmds(), MoveMessage(), prompt(), ReadMessage() und update().
mapping aliases [static] |
Definiert in Zeile 97 der Datei testmailer.c.
string * carbon [static] |
Definiert in Zeile 90 der Datei testmailer.c.
Wird benutzt von Forward(), ForwardArea(), get_carbon_copy(), send_mail(), SendMail() und write_mail().
int directflag [static] |
Definiert in Zeile 95 der Datei testmailer.c.
Wird benutzt von do_mail(), get_carbon_copy(), SendMail(), update() und write_mail().
int done [static] |
Definiert in Zeile 95 der Datei testmailer.c.
int folder_date [static] |
Definiert in Zeile 96 der Datei testmailer.c.
Wird benutzt von create() und GetFolders().
int folder_size [static] |
Definiert in Zeile 96 der Datei testmailer.c.
Wird benutzt von create() und GetFolders().
| mixed* folders |
Definiert in Zeile 99 der Datei testmailer.c.
int i [static] |
Definiert in Zeile 95 der Datei testmailer.c.
static string message [static] |
Definiert in Zeile 90 der Datei testmailer.c.
string name [static] |
Definiert in Zeile 94 der Datei testmailer.c.
| inherit NEDIT |
Definiert in Zeile 61 der Datei testmailer.c.
string office_name [static] |
Definiert in Zeile 94 der Datei testmailer.c.
Wird benutzt von create(), send_mail(), SetOfficeName() und update().
string receiver [static] |
Definiert in Zeile 90 der Datei testmailer.c.
Wird benutzt von Forward(), ForwardArea(), get_carbon_copy(), send_mail() und SendMail().
string sender [static] |
Definiert in Zeile 90 der Datei testmailer.c.
string subject [static] |
Definiert in Zeile 90 der Datei testmailer.c.
Wird benutzt von Forward(), ForwardArea(), get_carbon_copy(), get_subject(), send_mail() und SendMail().
| inherit std thing |
Definiert in Zeile 59 der Datei testmailer.c.
1.6.3