CGI-BBS > 電子掲示板 > Trees > 管理者に全書き込みをsendmailしたい


カレッヂ
カレッヂ


質問者 渋谷  投稿日 7/29(日) 18:52:46
管理者には、全書き込みをsendmailして、書き込みがあったことを知らせたいのですが可能でしょうか?

テスト運用中ですが、細かいところにまで心配りされた素晴らしいBBSだと思います。
現在使用中のBBSから移行させようと思っていますが、いろいろなサイトを運用している関係から、できれば書き込みのあったことをメールでチェックできればと思っています。

書き込み者へ「レスありメール」を返す機能を持っていますので、それと干渉してしまって、管理者への全書き込みsendmail機能が用意されていないのでしょうか?
回答者 呑兵衛  [削除]  投稿日 7/29(日) 23:05:14
呑兵衛といいます。
可能です。問題ありません。

いくつかスクリプトを書き換えたほうが良い部分もありますので、併せてお知らせします。
まず、書き換えたほうが良い部分ですが、
Errors-Toのある行は、RFC2822 の勧告で使用しないことになっていますので取り去ってもいいでしょう。
それからヘッダーの Subject に全角文字が入る場合、jis変換に続けてbase64へのコード変換が必要です。
ヘッダーに全角文字があれば、JIS処理しても文字化けするためです。
base64 については
http://www.watch.impress.co.jp/internet/www/article/1999/1122/special.htm
「Subjectに日本語を使いたい」にとても詳しい説明が
base64.pl本体は 上のページに紹介されているURLではなく
ftp://ftp.dti.ad.jp/pub/lang/CPAN/scripts/mailstuff/base64.pl にあります。

自己宛てお知らせ機能ですが、
スクリプトの  「コメントお知らせメール処理」の
close(OUT);
}
に続けて、
To の変数を$administratorにし、
スクリプト前段にある、$mail_subject $mail_val $mail_val2 を書き換えたメール処理を
コメントお知らせメールにならって施します。

電子掲示板 -Trees- v2.03にはまだいくつかのバグや改良すべき点があり、
レスキューさんにもメールでお知らせし把握されています。
時間があればどこかで説明できればと思っています。
健闘を祈ります。
回答者 いのちゃん  [削除]  投稿日 7/29(日) 23:24:42
http://www.kcb-net.ne.jp/ki-net/mini97/treesv2.03.cgi?log=
http://www.kcb-net.ne.jp/ki-net/mini97/treesv2.03.txt

改造箇所にはそれぞれ下記のLine辺りですのでご参考にして見て下さい。
第1段階改造 (Line42辺り)
第2段階改造 (Line1523辺り)
第3段階改造 (Line2051辺り)
質問者 渋谷  [削除]  投稿日 7/30(月) 08:34:09
呑兵衛さん、いのちゃん、レスありがとうございます。

可能だと言うことがわかり、大助かりです。
いただいたレスは一部、まだ理解できない部分がありますが、
Scriptの解読と合わせて、やってみようと思います。

ありがとうございました。
質問者 渋谷  [削除]  投稿日 7/30(月) 15:15:56
書き込みがあったことを管理者に知らせるsendMailは、「# コメントお知らせメール処理」の上に、数行 print OUT文を追加するだけでできました。30分程度でした。

これでは、書き込み内容は見れませんが、いずれにせよ、返信は掲示板上でしかできませんので、それで良しとしました。

ありがとうございました。
回答者 mj  [削除]  投稿日 6/7(金) 13:18:38
実際にはどういう風に書かれたのか、よろしければ教えて下さい。
私も、レスだけでなく、投稿があったら特定アドレスへメールするように
したいです。また、このとき、複数アドレスへメールできるのでしょうか?
回答者 いのちゃん  [削除]  投稿日 6/9(日) 14:44:26
Line113辺り、
#●コメントお知らせ機能を 1:使う 0:使わない
#  (使う状態でコメント機能を利用している記事であっても、この設定が0に
なればメールしません)
$resmail = 1;

新規投稿する時(ページ)に書き込み枠の下に
 □コメントがついたらメール連絡が欲しいの行頭にチェックを入れれば
投稿文章に対してのコメントが自動発生して送信されます。

管理者はそのチェックいかんに関わらず先の当方の第1段階から第3段階の
改造を遣れば訪問者および管理者の全ての新規投稿を事前にE-mailで受信
可能ですので新規投稿があったかどうかを掲示板を開く前に感知出来ます。

これは複数の掲示板を管理している場合に全部開かなくてもどの掲示板に
新規投稿が追加されたかを知る手段として有効です。
回答者 mj  [削除]  投稿日 7/19(金) 20:35:34
なんだかできそうです。ありがとうございます。

メールで知らせるのを、複数のメールアドレス宛にできるのでしょうか。
というか、やってみたのですが、mailtoはカンマで区切って並べることで
問題ないようなんですが、そのままカンマで区切ったFromできてしまって
気持ち悪いのです。Fromは1つのアドレスに限定したいのですが
できるのでしょうか。

また、ヘッダのContent-Transfer-Encoding: 7bitの前にどうしても
1行空いてしまい、ヘッダなはずなのに本文に来てしまいます。
携帯メールで見てると余計なので、ヘッダはヘッダにいて欲しいのですが
どうしたらよいのでしょうか。
回答者 mj  [削除]  投稿日 7/19(金) 21:07:43
Fromは、$mailtoを$administratorにすることで限定できました。
Dateが、-700のままなので、日本時刻を表示したいのですが
どうしたら良いのでしょうか。
すみません、教えて下さい。

あと、相変わらす、ヘッダの途中に一行空いてしまいます。
(Content-Transfer-Encoding: 7bitの手前)
これはどうしてなのでしょうか。できれば空けたくないです。
回答者 呑兵衛@大阪  [削除]  投稿日 7/20(土) 09:35:50
スクリプトの初段に
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
がありますが、これを
# サーバーのある場所の日本との時差
$t_dist = '時差時間';
# 夏時間に自動対応
if ((localtime(time))[8]) { $t_dist -= 1; }
# 使わない変数を排除し、日本時間を求める変数をセット
($sec,$min,$hour,$mday,$mon,$year,$wday) = (localtime(time + $t_dist*3600))[0,1,2,3,4,5,6];
とします。

> Content-Transfer-Encoding: 7bitの手前
その前段のスクリプトを、変数の設定を含めて貼り付けて下さい。
回答者 mj  [削除]  投稿日 7/20(土) 23:27:12
お返事ありがとうございます。
それらしきところはこの部分です。
いかがでしょうか

--ここから--

#--------第3段階改造
sub s_mail {

        @mv = @_;
        $mv[4] =~ s/\r/\n/g;

        if (!open(OUT,"| $sendmail -t")) { return; }

        print OUT "To: $mailto\n";
        print OUT "From: $administrator\n";
        &jis("Subject: $mv[0]"); print OUT "$msg\n";
        print OUT "Content-Transfer-Encoding: 7bit\n";
        print OUT 'Content-Type: text/plain; charset=iso-2022-jp' . "\n\n\n";

        &jis("投稿者: $mv[1]"); print OUT "$msg\n";
        &jis("題名: $mv[3]"); print OUT "$msg\n";
        &jis("\n$mv[4]"); print OUT "$msg\n\n";

        close(OUT);
}

sub jis { $msg = $_[0]; &jcode'convert(*msg, 'jis'); }

#1
回答者 mj  [削除]  投稿日 7/20(土) 23:30:01
出力はこんな風になります。

Received: from biwa6.he.net (biwa6.he.net [64.71.137.10])
	by mx1.rim.or.jp (8.9.3+Sun/3.7W) with ESMTP id UAA21735
	for <hoge@st.rim.or.jp>; Fri, 19 Jul 2002 20:49:06 +0900 (JST)
Received: (from bs0476@localhost) by biwa6.he.net (8.8.6/8.8.2) id EAA15498; Fri, 19 Jul 2002 04:49:07 -0700
Date: Fri, 19 Jul 2002 04:49:07 -0700
Message-Id: <200207191149.EAA15498@biwa6.he.net>
To: hoge@ezweb.ne.jp, hoge@st.rim.or.jp
From: hoge@st.rim.or.jp
Subject: hoge
X-UIDL: e1905276d9dc4fdcb180ff95bdd4dc0d
X-winbiff-received-account: mail_st_rim_or_jp
X-winbiff-flags: Seen

Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=iso-2022-jp


投稿者: miharuてすと
Eメール: hoge@ezweb.ne.jp
題名: re(1):5度目

返信のテスト

回答者 いのちゃん  [削除]  投稿日 7/21(日) 04:03:43
一部改造されているようですが当方の設定で新規投稿のテストをした結果は
以下のように配信されておりますが,,,。

To: ki-net@mail.kcb-net.ne.jp
Subject: 10.電子掲示板(Treesv2.03)

新着情報
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=iso-2022-jp


投稿者: いのちゃん
Eメール: ki-net@mail.kcb-net.ne.jp
題名: re(2):コメントがついたらメール連絡が欲しい

新規投稿の送信テストです。
回答者 mj  [削除]  投稿日 7/21(日) 12:30:20
>To: ki-net@mail.kcb-net.ne.jp
>Subject: 10.電子掲示板(Treesv2.03)
>
>新着情報
>Content-Transfer-Encoding: 7bit
>Content-Type: text/plain; charset=iso-2022-jp

これですと、Content-Transfer-Encoding の行の2つ上に改行が入っています。
そのため、ヘッダと本文の間の区切りとみなされて、Contentで始まる行が
本文に入ってしまいます。

携帯電話のような小さい画面では、Contentで始まる行を読むのは
面倒くさいので、Contentで始まる行はヘッダに入って欲しいのです。
でも、考えてみればSubject:の中身を決めうちにしても何の問題もないので
そうやって解決してしまいました。

ところで、メールヘッダのDate行なのですが、教えていただいた場所に
処理をほどこすだけだと、WWWで見たときは確かに日本時間になっているの
ですが、メールヘッダにはつきません。
そのため、メールサーバがつけてくるDateが有効になってしまいます。
しかしよく考えてみると、そのDateヘッダの-700をきちんと解釈しない
携帯端末のメールソフトがタコなだけだという気がしてきました。
ちょっと携帯メーカーの方に聞いてみます。

いろいろありがとうございました。
回答者 呑兵衛@大阪  [削除]  投稿日 7/21(日) 13:54:36
@mv のデータに改行コードが入っている可能性があります。

> &jis("Subject: $mv[0]"); print OUT "$msg\n";
の \n を取り除いてみると、、、。

それから送信地が海外にある場合、
詳しく言うと送信メールを作成する「場所」がどこかによって、
SMTPサーバーはどこのMTAが送信してきたかを判断しますので、
海外にあるサーバーのCGIスクリプトが作成したメールは
そのサーバーのある場所の時間が採用され、CGIスクリプトに
規定された「日本時間」は意味を無さなくなります。

返信(回答)する


Web裏技