This is MailMessage.m in view mode; [Download] [Up]
#import "MailMessage.h"
#import "EnhancedText.h"
#import "TokenString.h"
#import <stdio.h>
@implementation MailMessage
-initForMUA: (const char *)anApp andMTA: (const char *)aMailer
{
[super init];
MUA = [[StringStorage alloc] init: anApp];
MTA = [[StringStorage alloc] init: aMailer];
to = [[StringStorage alloc] init];
subject = [[StringStorage alloc] init];
cc = [[StringStorage alloc] init];
text = [[StringStorage alloc] init];
mailFile = [[StringStorage alloc] init];
envelope = [[StringStorage alloc] init];
body = [[StringStorage alloc] init];
commandLine = [[StringStorage alloc] init];
[commandLine appendStringValue: [MTA stringValue]];
[commandLine appendCharValue: ' '];
fp = (FILE *)0;
return self;
}
-free
{
[MUA free];
[MTA free];
[to free];
[subject free];
[cc free];
[text free];
[mailFile free];
[envelope free];
[body free];
[commandLine free];
return [super free];
}
-commandArgs
{
const char *str;
id tokens = [[TokenString alloc] init: [to stringValue]];
[tokens setSeparator: ','];
while(str = [tokens popString])
{
[commandLine appendStringValue: str];
[commandLine appendCharValue:' '];
}
str = [cc stringValue];
if(str && *str)
{
[tokens setStringValue: str];
while(str = [tokens popString])
{
[commandLine appendStringValue: str];
[commandLine appendCharValue:' '];
}
}
[tokens free];
return self;
}
-buildEnvelope
{
const char *str;
[envelope appendStringValue: "Received: by "];
[envelope appendStringValue: [MUA stringValue]];
[envelope appendCharValue: '\n'];
/* to: */
[envelope appendStringValue: "To: "];
[envelope appendStringValue: [to stringValue]];
[envelope appendCharValue: '\n'];
/* subject: */
[envelope appendStringValue: "Subject: "];
[envelope appendStringValue: [subject stringValue]];
[envelope appendCharValue: '\n'];
/* cc: */
str = [cc stringValue];
if(str && *str)
{
[envelope appendStringValue: "CC: "];
[envelope appendStringValue: str];
[envelope appendCharValue: '\n'];
}
if(*[mailFile stringValue] && fp) /* generating a file - not memory image */
fwrite([envelope stringValue], 1, [envelope strlen], fp);
return self;
}
-buildBody
{
[body setStringValue: "\n"];
[body appendStringValue: [text stringValue]];
return self;
}
-deliverTo: (const char *)receivers
subject: (const char *)about
cc: (const char *)alsoReceives
text: (const char *)str
{
[to setStringValue: receivers];
[subject setStringValue: about];
[cc setStringValue: alsoReceives];
[text setStringValue: str];
[self commandArgs];
[self buildEnvelope];
[self buildBody];
if(*[mailFile stringValue] && fp) /* generated a file - not memory image */
{
fflush(fp);
[commandLine appendStringValue: " < "];
[commandLine appendStringValue: [mailFile stringValue]];
system([commandLine stringValue]);
}
else
{
FILE *cmd;
cmd = popen([commandLine stringValue], "w");
if(!cmd)
{
NXLogError("command failed: %s", [commandLine stringValue]);
return nil;
}
fputs([envelope stringValue], cmd);
fputs([body stringValue], cmd);
pclose(cmd);
}
return self;
}
-(BOOL)supportsAttachments
{
return NO;
}
- setAttachments: fileList
{
attachments = fileList;
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.