15. juni 2001 - 09:19
Der er
1 kommentar og
1 løsning
Formmail.cgi / sendmail / og windows server
Findes \"sendmail\" til windows, jeg har kun fundet den til UNIX.
Jeg anvender \"FormMail.pl\" i undervisning og bruger et asp hotel.
Er der en anden løsning cgi mæssigt, ( selvfølgeligt kan jeg bruge et \"form2mail.asp\", men det er jo ikke cgi ( perl) )
Brug denne funktion.... så behøver du ikke sendmail....
-->
sub sendmail {
use Socket;
my ($fromaddr, $replyaddr, $to, $smtp, $subject, $message) = @_;
$to =~ s/[ \\t]+/, /g;
$fromaddr =~ s/.*<([^\\s]*?)>/$1/;
$fromaddr =~ s/^([^\\s]+).*/$1/;
$replyaddr =~ s/.*<([^\\s]*?)>/$1/;
$replyaddr =~ s/^([^\\s]+).*/$1/;
$message =~ s/^\\./\\.\\./gm;
$message =~ s/\\r\\n/\\n/g;
$message =~ s/\\n/\\r\\n/g;
$smtp =~ s/^\\s+//g;
$smtp =~ s/\\s+$//g;
if (!$to) { return -8; }
my($proto) = (getprotobyname(\'tcp\'))[2];
my($port) = (getservbyname(\'smtp\', \'tcp\'))[2];
my($smtpaddr) = ($smtp =~
/^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/)
? pack(\'C4\',$1,$2,$3,$4)
: (gethostbyname($smtp))[4];
if (!defined($smtpaddr)) { return -1; }
if (!socket(S, AF_INET, SOCK_STREAM, $proto)) {
return -2; }
if (!connect(S, pack(\'Sna4x8\', AF_INET, $port, $smtpaddr))) {
return -3; }
my($oldfh) = select(S); $| = 1; select($oldfh);
$_ = <S>; if (/^[45]/) { close S; return -4; }
print S \"helo localhost\\r\\n\";
$_ = <S>; if (/^[45]/) { close S; return -5; }
print S \"mail from: <$fromaddr>\\r\\n\";
$_ = <S>; if (/^[45]/) { close S; return -5; }
foreach (split(/, /, $to)) {
print S \"rcpt to: <$_>\\r\\n\";
$_ = <S>; if (/^[45]/) { close S; return -6; }
}
print S \"data\\r\\n\";
$_ = <S>; if (/^[45]/) { close S; return -5; }
print S \"To: $to\\r\\n\";
print S \"From: $from\\r\\n\";
print S \"Reply-to: $replyaddr\\r\\n\" if $replyaddr;
print S \"Subject: $subject\\r\\n\\r\\n\";
print S \"$message\";
print S \"\\r\\n.\\r\\n\";
$_ = <S>; if (/^[45]/) { close S; return -7; }
print S \"quit\\r\\n\";
$_ = <S>;
close S;
return 1;
}