SendMail.pmを使ってメール送信がしたいんですが。

[上に] [前に] [次に]
NANA 2000/05/24(水) 12:19:04
おせわになります。
<a href="http://www.jiyu.net.np/phispace/sendmail.shtml">http://www.jiyu.net.np/phispace/sendmail.shtml</a>で配布されている
、ローカルサーバーでは動作するんですけど、
設置したいサーバー(freeweb)にアップするとエラー(500 Internal Server Error)になります。

具体的には、
cgi-binというディレクトリに、「SendMail.pm」と、「jcode.pl」と、それから
以下のスクリプトを「test.cgi」という名前にしてアップしました。

===============================================
#!/usr/local/bin/perl
use SendMail;
$subject='メールテスト';
$text='メール送信のテストです。';
$ret=SendMail("smtp.hogehoge.ne.jp","someone\@some.domain","myname\@my.domain",$subject,$text);
print "Content-Type: text/plain\n\n";
if ($ret!=0){
print 'メールが送信されました。';
}
else{
print 'エラーが発生しました。';
}
exit(0);
===============================================

「smtp.hogehoge.ne.jp」「someone\@some.domain」「myname\@my.domain」には、
SMTPサーバー名、送信先メールアドレス、送信元メールアドレスを書きました。
「@」は、「\@」としました。
パーミッションは、
「test.cgi」が 755、「SendMail.pm」と「jcode.pl」は、644と755の両方を試しましたが駄目です。
SendMail.pmの、
「require 'jcode.pl';」を「require './jcode.pl';」としてみても駄目です。
「use Socket;」を「use IO::Socket;」としてみても駄目です。

freewebのサーバは、Socketが利用できないからなのかと思ったのですが、
ここの過去ログの<a href="../200003/00030058.htm">http://www.wakusei.ne.jp/twn/wwwlng.cgi?print+200003/00030058.txt</a>にあった、

===============================================
#!/usr/local/bin/perl
    $addr = (gethostbyname("www.wakusei.ne.jp"))[4];
    $name = pack("S n a4 x8", 2, 80, $addr);
    socket(S, 2, 2, 0);
    connect(S, $name);
    binmode(S);
    select(S); $| = 1; select(stdout);
    print S "GET /twn/wwwlng.cgi HTTP/1.0\r\n";
    print S "Host:www.wakusei.ne.jp\r\n\r\n";
    while (<S>) { last if /^\s*$/; }
    print "Content-Type: text/html\n\n";
    while (<S>) { print; }
    close(S);
===============================================

というcgiを設置してみたところ、
http://www.wakusei.ne.jp/twn/wwwlng.cgiのページが表示されます。
(但しcgi-binディレクトリでしか動作しない)
ということは、Socketは使えてるってことなんですよね?

素人でちんぷんかんぷんなんですけど、どうかご指導お願いします。
因みにfreewebのCGIについてのFAQは<a href="http://www.freeweb.ne.jp/faq/faq6.html">これ</a>です。
よろしくおねがいします。

NANA 2000/05/24(水) 12:24:14
あ、タグが変。すいません。

Phi [E-Mail] 2000/05/24(水) 15:47:48
問題のスクリプトの作者です。
私が思いついた原因としては、サーバーにアップロードする時に
SendMail.pmがバイナリモードで転送されたために、改行コードが
おかしくなってエラーが起こっているのでは、と思います。
FTPソフトにもよりますが、例えばFFFTPの転送モードはデフォルトで
自動判別で、.htmlや.cgiの拡張子のファイルは自動的にアスキーモード
で転送され、その他のファイルはバイナリモードでアップロードされて
しまいます。
ということでSendMail.pmとjcode.plをアスキーモードで転送している
かどうか今一度確認なさってはいかがでしょうか。

NANA 2000/05/25(木) 00:42:35
作者の方ですか。おせわになります。
読みにくい質問にレスつけていただいて恐縮です。

アスキーモードでやってたつもりなんですが、
今一度アスキーでアップロードし直してみました。
でもやっぱりエラーになります。
ソフトはFTP Explorerです。

\n 2000/05/25(木) 06:28:00
@INCに、利用するライブラリを配置したパスは含まれていますか?

それ以外の試験法としては、以下のようなラッパーを作り
どこでエラーが発生しているか確認してみては。

#!/usr/local/bin/perl
$|=1;
print "Content-Type: text/plain\n\n";
system("./t.cgi 2>&1");

NANA 2000/05/25(木) 12:12:47
\nさん、おせわになります。

@INCっていうのはSendMail.pm のスクリプト内にはないですが…??
それで、

#!/usr/local/bin/perl
$|=1;
print "Content-Type: text/plain\n\n";
system("./test.cgi 2>&1");

というcgiを設置したら、

Can't locate Socket.pm in @INC (@INC contains: /usr/local/lib/perl5/5.00503/i86pc-solaris /usr/local/lib/perl5/5.00503 /usr/local/lib/perl5/site_perl/5.005/i86pc-solaris /usr/local/lib/perl5/site_perl/5.005 .) at SendMail.pm line 5.
BEGIN failed--compilation aborted at SendMail.pm line 5.
BEGIN failed--compilation aborted at ./test.cgi line 3.

という返事が返ってきました。

で、どうしたらいいんでしょう?^^;
@INC=うんぬん、とかっていうのを、
SendMail.pm のスクリプト内に書き足さなくちゃならないんですか?
なんて書けばいいんですか?

Phi [E-Mail] 2000/05/25(木) 13:38:07
↑のエラーメッセージを見ると、SendMail.pmで必要なモジュールSocket.pmが
存在しないためにエラーになっているようです。
Perl5なら普通はSocket.pmは標準で入っているはずなんで、管理者が
何らかの理由であえてSocket.pmを削除している可能性が高いです。
ソケットを使うCGIを使われたくないのかもしれません。ソケットを使うと
いろいろ悪いことも出来るので...。(具体例はいいません)
で、解決策としてはSendMail.pmをSocket.pmを使わないように書き換える
必要が有ります。以下のように書き換えてください。
1.まずSendMail.pmの頭にあるuse Socket;を消す。
2.SendMail.pmの #Create Socket 以下の行を以下のように書き換える。
#Create Socket
$port=getservbyname('smtp','tcp') || 25;
$iaddr=(gethostbyname($smtp))[4];
$sock=pack("S n a4 x8",2,$port,$iaddr);
if (!socket(SMTP,2,2,getprotobyname('tcp'))){
   return 0;
}
if (!connect(SMTP,$sock)){
   return 0;
}
select(SMTP); $|=1; select(STDOUT);
# 接続確認
(以下省略)
多分これで上手く行くと思います。
ちなみにfreewebの規約を見ていたらCGIの禁止事項のところに
>6.不特定多数にメールを送信するプログラム等の設置。
とあったので、そういう使い方は絶対にしないように注意してください。

NANA 2000/05/25(木) 23:28:37
[[解決]]
うまく行きました。ありがとうございました。

>そういう使い方は絶対にしないように注意してください。
はい、お約束します。
このスレッドをご覧のfreewebユーザーの皆さんも、
このSendMail.pmをお使いの時はくれぐれも
規約を守って下さいますよう僭越ながら私からもお願いします。

Phiさん、\nさん、どうもお世話になりました。

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