NTのWEBサーバーで動くメーラーが作りたい

[上に] [前に] [次に]
ユタカ [E-Mail] 1997/09/26(金) 01:20:05
こんにちわ、CGI初心者のユタカです。 現在、Windows NT上で動作するCGI(メーラー)を作成しています。
webサーバーがNTの為、unixのメール送信コマンド(sendmail)が 使用できなくて困っています。良い方法を教えてください。 一応、Software.comのpostamail()を使おうと考えたのですがメールの 内容をファイルのリダイレクション(<)で、得ようとするとファイルの ハンドルが 0の為、コマンドを実行できませんと怒らてしまいます。 postamailの記述方法をご存知でしたら、教えてください。

YMK [HomePage] 1997/09/26(金) 15:24:50
メーラー ってのが、メールを送受信し、管理するモノなのか、
それとも単にWEB上で「メール送信したい」モノなのか
判断に苦しんだんですケド…

一応 後者が希望であると仮定して(T-T)
趣旨違いだったら ごめんなさいなんですけど、
要は 直接SMTPたたいて送信すればいいんじゃないんですか?
適当につくったのがあったので参考までに

#!/user/bin/perl

#jis変換の為にjcode.plを利用
require 'jcode.pl';

#SMTPサーバーのアドレス
$SERVER_NAME = 'your.smtp.server.address';
$SERVER_PORT = 25;
$AF_INET = 2;
$SOCK_STREAM = 1;

#引数入力されなかった場合の為
$pFrom = 'email@address';
$pTo = 'email@address';
$pSubject = "postmailのテスト";

print "Content-type: text/html\n\n";
&myInit();

if( !$param{'pMsg'} ) {
print "メッセージないじゃん\n";
exit 0;
}
if( $param{'pFrom'} ) { $pFrom = $param{'pFrom'}; }
if( $param{'pTo'} ) { $pTo = $param{'pTo'}; }
if( $param{'pSubject'} ) { $pSubject = $param{'pSubject'}; }

&postMail( $pFrom, $pTo, $pSubject, $param{'pMsg'} );

exit 0;

#メール送信
# $from    : yourname@pop3adress にしておくのがベスト?
# $to      : your e-mail adress
# $subject : タイトル
# $body    : メール本文
sub postMail {
my( $from, $to, $subject, $body ) = @_;

#subject と bodyを jisへ変換
$subject = jcode'jis($subject);
$body = jcode'jis($body);

my ($template, $proto, $local_info, $remote_info, $remote_addr, $flgs);
my(@headers) = ( "HELO\n", "MAIL From:$from\n", "RCPT To: $to\n", "DATA\n" );
my(@msgs) = ( "From: $from\n", "To: $to<$to>\n", "Subject: $subject\n",
"Content-type: text/html; charset=ISO-2022-JP\n", "$body", "\n.\n" );

$flgs = 0;
$template = 'S n a4 x8';
$proto = getprotobyname('tcp');
$local_info = gethostbyname('localhost');
$remote_info = gethostbyname($SERVER_NAME);
$remote_addr = pack($template, $AF_INET, $SERVER_PORT, $remote_info);

while(1) {
socket(SOCK, $AF_INET, $SOCK_STREAM, $proto);
connect(SOCK, $remote_addr);
if( !&sockResult() ) { last; }
for( @headers ) {
send(SOCK, $_, 0);
if( !&sockResult() ) { last; }
}
while (@msgs) {
send(SOCK, shift(@msgs),0);
}
send(SOCK, "QUIT\n", 0 );
if( !&sockResult() ) { last; }
$flgs = 1;
last;
}
if( $flgs ) { print "送れたじゃん\n"; } else { print "送れてないじゃん\n"; }
shutdown(SOCK,2);
close(SOCK);
}

sub sockResult {
my($result,$buf);
recv( SOCK, $buf, 256, 0 );
print "$buf\n";
$result = (split(/ /,$buf) ) [0];
($result >= 200 && $result < 400 ) ? 1 : 0;
}

sub myInit {
jcode'init();
if( $ENV{'REQUEST_METHOD'} eq 'GET' ) {
$query_string = $ENV{'QUERY_STRING'};
} else {
read( STDIN, $query_string, $ENV{'CONTENT_LENGTH'} );
}

foreach (split('&',$query_string)){
($variable,$value)=split('=');
$value=~ tr/+/ /;
$value=~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("c",hex($1))/eg;
&jcode'convert(*value,'euc');
$value=~ s/\r\n/\n/g;
$value=~ s/\r/\n/g;
$param{$variable}=$value;
}
}


[上に] [前に] [次に]