#! /usr/local/bin/perl
########################################################################
# qsf.pl Version 4.1 January 22, 1997
# Copyright (c) 1996-1997 Matthew J. Walker
# Written for the UCLA Virtual Office Hours Project
# Code can be freely distributed for educational use, as long as header
# remains intact. See included Copyright and Licensing information.
# For info send email to voh@chem.ucla.edu
########################################################################
# Requires the existence of several files:
# voh.conf, qa.html's.
# You MUST edit the mail command to point to a valid mail program!!!!
########################################################################
require 'voh-lib.pl';
&SetupVOH;
&GetConf;
&CheckEmpty;
($in{type} eq "confidential") && (&Confidential) ;
($conf[1] eq "no") && (&Failure(22)) ;
$questions_file_name = "$questions_path/$time";
$html = <<"EOF";
Date Submitted: $date
Student Name: $in{name}
Student Email: $in{email}
Submitted from: $posted_from
$in{question}
EOF
open(FILE, ">$questions_file_name") || &Failure(13) ;
print FILE ($html) ;
close FILE ;
&Success(Public) ;
# Confidential Sends mail to professor
# Config file voh.conf for email address. A "no" in the confidential field
# specifies the function as disabled.
sub Confidential {
local($output);
($conf[2] eq "no") && (&Failure(23)) ;
#----------------------------------------------------------
# Edit below as necessary. This will be the body of the
# email sent to the instructor by the confidential post.
#----------------------------------------------------------
$output = <<"EOO";
Lecture: $in{lecture}
Posted From: $posted_from
Name: $in{name}
Question:
$in{question}
###########################################################
Note:
Please verify the From: email address. If there is nothing
or something obviously invalid in that field, replying to
this message will be fruitless.
VOH Project
###########################################################
EOO
#----------------------------------------------------------
# Mail routine:
# Edit as necessary!
#----------------------------------------------------------
if($system_type eq "UNIX") {
open(MAIL, "|/usr/bin/mailx -r $in{email} -s \"VOH Confidential Submission\" $conf[3]") || (&Failure(14));
print MAIL $output;
close(MAIL) ;
} elsif ($system_type eq "Mac") {
require 'MacSMTP.pl';
unless (MacSMTP::smtp_connect($SMTP_server)) {
&Failure("$MacSMTP::smtp_error");
}
MacSMTP::smtp_reset();
MacSMTP::smtp_hello($VOH_server);
MacSMTP::smtp_mail($in{email});
MacSMTP::smtp_recipient($conf[3]);
MacSMTP::smtp_data($in{email}, "Confidential Submission from VOH");
MacSMTP::smtp_send_string($output);
MacSMTP::smtp_data_done();
MacSMTP::smtp_close();
} elsif ($system_type eq "NT") {
$smtp_message = &NTSMTP();
$smtp_message =~ s/\d+\s+(.*)\@.*/$1/;
} else {
&Failure(14);
}
&Success(Confidential);
}
# Success
# Creates HTML text to send after query.
# Uses file specified by $success for majority of text, and inserts
# submission specific info with a substitution of XXXX.
sub Success {
local ($type,$html) = @_ ;
$html = <<"EOS";
$HTTP_header
$HTML_title // Success!
$type Submission Successful!
$HTML_footer
EOS
if ($system_type eq "Mac") {
MacPerl::Reply($html);
} else {
print($html);
}
exit ;
}
sub NTSMTP {
# Inspired by Robin Chatterjee
use Socket;
my($port,$iaddr,$paddr,$proto,$a);
$port = 25;
# Setup stuff
# Error messages need rewritten....
$iaddr = inet_aton($SMTP_server) || (&Failure("SMTP Server Address Faulty"));
$paddr = sockaddr_in($port, $iaddr);
$proto = getprotobyname('tcp');
socket(S, PF_INET, SOCK_STREAM, $proto) || (&Failure("SMTP Socket: $!"));
connect(S, $paddr) || (&Failure("SMTP Connect: $!"));
# Mail away
select(S); $| = 1; select(STDOUT);
$a=;
print S "HELO $SMTP_server\n";
$a=; unless($a =~ /^250/) { &Failure("$a"); }
print S "MAIL FROM:<$in{email}>\n";
$a=;
print S "RCPT TO:<$conf[3]>\n";
$a=;
print S "DATA\n";
$a=;
print S "$output";
print S "\n.\n";
$a=;
print S "QUIT";
close S;
return $a;
}