投稿日:2003年01月22日 作成鷹の巣

No.7982 CGIプログラムでBLATJを使用し、20通以上の同報メール送信が出来ない。



CGIプログラムでBLATJを使用し、20通以上の同報メール送信が出来ない。

No.7982 投稿時間:2003年01月22日(Wed) 10:44 投稿者名:yoshi URL:

ホームページからのメール送信でBLATJを使用しています.
数十人で使用している会員限定のホームページなので
ホームページから入力したメッセージを会員全員または
一部選択によってメールを送れるように作ったのですが
動きません.

どのように動かないのかというと、
10人までぐらいの相手になら転送は可能でCGIの処理はOKでした。
ただ、20人以上の相手に送った場合にエラーが発生するようです.
ページもエラーメッセージが表示されメールサーバー(ARGOSOFT)の
ログを見ても送信がとちゅうまでしかできていないようです.
BLATJの仕様でしょうか?それともメールサーバー(ARGOSOFT)の
仕様なのでしょうか?それともプログラム?

最終的にはメーリングサーバーのようなものもCGIで
対応してみたいと思っていますが可能でしょうか?

よろしくお願いします.


BLATJとArGosoft Mail Serverとの関係がよく解りません。

No.8018 投稿時間:2003年01月24日(Fri) 19:00 投稿者名:鷹の巣 URL:http://sakaguch.com/

> ホームページからのメール送信でBLATJを使用しています.
> どのように動かないのかというと、
> 10人までぐらいの相手になら転送は可能でCGIの処理はOKでした。
> ただ、20人以上の相手に送った場合にエラーが発生するようです.
> ページもエラーメッセージが表示されメールサーバー(ARGOSOFT)の
> ログを見ても送信がとちゅうまでしかできていないようです.
> BLATJの仕様でしょうか?それともメールサーバー(ARGOSOFT)の
> 仕様なのでしょうか?それともプログラム?

BLATJとArGosoft Mail Serverとの関係がよく解りません。
これらは、どちらもSMTPサーバーとしての機能を持っていますので、両方同時に使用する必要はありません。
また、シングルスレッドのFIFO(先入れ先出し)ですから、送信能力以上の送信は出来ないかもしれません。

CGIを自作出来るのでしたら、こちら
http://sakaguch.com/CgiFaq.html#W170
のBASP21を使用して、この例
http://sakaguch.com/PerlSample/BASPmail2.pl.txt
の様に、BASP21の部分で、マルチスレッドにされては如何でしょうか?


送る宛先が多くなると動作しなくなるのです。

No.8088 投稿時間:2003年01月29日(Wed) 22:23 投稿者名:yoshi URL:

回答ありがとうございます.
また、レスが遅くなってすいません。
BlatJを使用してメールを出すサブルーチンとして
SendMailを作成し、
SMTPサーバーにArGosoftMailのサーバーを設定しています.
複数の宛先にまとめて送信をしようとしてこのサブルーチンを
複数の宛先の分だけループでまわして(もちろん宛先を変更しながら)
同じ内容のメールを送るわけです。
ところが、送る宛先が多くなると動作しなくなるのです.
この理由がわからないのですが
心当たりありますでしょうか?

追伸
もちろん宛先が一つの場合や、10件ぐらいまではうまくいくのですが。
15件ぐらいになるとループ後に表示されるはずの
ページが表示されずにエラーページが表示されます.


Outlookのように宛先のメールアドレスを『;』で区切ってみましたが、ダメでした。

No.8089 投稿時間:2003年01月29日(Wed) 22:28 投稿者名:yoshi URL:

すみません。
もうひとつ気づいたのが
サブルーチンでループ呼び出しを行うと
BLATJプログラムが複数立ち上がるので
リソースの問題とかもあるのでしょうかね.
と、すると
複数に同一メールを送る場合にはどうすればよいのでしょうか?
アウトルックのように宛先のメールアドレスを『;』で区切ってみましたが
うまくいきませんでした.
複数の相手に同じ文章のメールを送る方法を教えてください.


ご使用の言語は、何でしょうか?

No.8107 投稿時間:2003年01月31日(Fri) 00:14 投稿者名:鷹の巣 URL:http://sakaguch.com/

> サブルーチンでループ呼び出しを行うと
> BLATJプログラムが複数立ち上がるので
> リソースの問題とかもあるのでしょうかね.

OSは、Windows XPでしょうか?

> 複数に同一メールを送る場合にはどうすればよいのでしょうか?
> アウトルックのように宛先のメールアドレスを『;』で区切ってみましたが
> うまくいきませんでした.

私は、メーラのBCCにメールアドレスを『;』で区切って100通程度の同報メールを送ったことが
ありますが、宛先メールアドレスが使用されていない場合のエラーメールが帰ってきたとき、
多少やっかいでした。

> 複数の相手に同じ文章のメールを送る方法を教えてください.

現在の方法で、宛先毎に毎回送る方が良いと考えますが、
ご使用の言語は、何でしょうか?Cでしょうか?Perlでしょうか?
BLATJ相手でしたら、batファイルでも送信出来そうですが。
のんびり送信していいのであれば、sleep(10)とか入れて、
送信毎に10秒間休止させて送信間隔を空けて試して見てはどうでしょうか?


使用言語はPerlです。

No.8114 投稿時間:2003年01月31日(Fri) 09:47 投稿者名:yoshi URL:

回答どうもありがとうございます.

> OSは、Windows XPでしょうか?

Windows2000です。

> 私は、メーラのBCCにメールアドレスを『;』で区切って100通程度の同報メールを送ったことが
> ありますが、宛先メールアドレスが使用されていない場合のエラーメールが帰ってきたとき、
> 多少やっかいでした。

厄介というとどういうふうにでしょうか?
HP(認証によるクローズド)には複数の人間が参加し、メッセージを書き込んで送信ボタンをおすと
HP参加者の一部または選択により一部にメールを送れるようにしたもので、
エラーの解析とはしません。
Fromには送り主のアドレスが入りますから、エラーメッセージは送り主に返ると思うのですが...
そういった意味じゃないのでしょうか?

> 現在の方法で、宛先毎に毎回送る方が良いと考えますが、
> ご使用の言語は、何でしょうか?Cでしょうか?Perlでしょうか?
> BLATJ相手でしたら、batファイルでも送信出来そうですが。
> のんびり送信していいのであれば、sleep(10)とか入れて、
> 送信毎に10秒間休止させて送信間隔を空けて試して見てはどうでしょうか?

使用言語はPerlです。
Sleepを入れるとCPUがとまるのではないのでしょうか?
そうすると、他からのHPへのアクセスが重くなるんじゃないでしょうか?
それともSleepとはタイマー形式なのでしょうか?
また、ページでは
<メッセージ入力><送信ボタン><送信><送信相手の表示>
というふうになっていて、のんびりと送信していると
HP参加者は待ってられないと思うのですが。
また、送信を別(バック)で動かし表示を先にするという方法が
あれば教えてください.


リンク先のサンプルが既にそのようになっています。

No.8132 投稿時間:2003年02月01日(Sat) 00:37 投稿者名:鷹の巣 URL:http://sakaguch.com/

> > 私は、メーラのBCCにメールアドレスを『;』で区切って100通程度の同報メールを送ったことが
> > ありますが、宛先メールアドレスが使用されていない場合のエラーメールが帰ってきたとき、
> > 多少やっかいでした。
>
> 厄介というとどういうふうにでしょうか?

エラーメールが帰ってきたとき、どこに送ったユーザーに対してのエラーメールかが
わかりにくいという程度です。

> > 現在の方法で、宛先毎に毎回送る方が良いと考えますが、
> > ご使用の言語は、何でしょうか?Cでしょうか?Perlでしょうか?
> > BLATJ相手でしたら、batファイルでも送信出来そうですが。
> > のんびり送信していいのであれば、sleep(10)とか入れて、
> > 送信毎に10秒間休止させて送信間隔を空けて試して見てはどうでしょうか?
>
> 使用言語はPerlです。
> Sleepを入れるとCPUがとまるのではないのでしょうか?

CGIのプロセスが10秒間休止します。CPU全体が休止することではありません。

> そうすると、他からのHPへのアクセスが重くなるんじゃないでしょうか?

CGIのプロセスが10秒間休止しますので、その間は逆に軽くなります。

> それともSleepとはタイマー形式なのでしょうか?

タイマー形式の意味が解りませんが、設定した数値の秒数、CGIの処理が休止します。

> <メッセージ入力><送信ボタン><送信><送信相手の表示>
> というふうになっていて、のんびりと送信していると
> HP参加者は待ってられないと思うのですが。
> また、送信を別(バック)で動かし表示を先にするという方法が
> あれば教えてください.

先に示しましたリンク先のサンプルが既にそのようになっています。
SMTPサーバー自体は、マルチスレッド動作を行わなくてもその前段のオブシェクトが
マルチスレッド動作を行いますので、CGI側から見ると送信が全て終わったかのように見えます。

どのようなPerlスクリプトかは、解りませんが、open関数を使用してハンドルを取得すると、
メモリ上にバッファ領域が確保されます。バッファが邪魔する場合も考えられますので、
バッファを使用しないようなコーディングも必要だと思います。


|目次|掲示板|過去ログ目次|▲頁先頭|