#!/usr/bin/perl # 任意の電話番号にFAXを送信するスクリプト # -s To: xxxxx@tsaitoh.net # Subject: 相手電話番号 タイトル # -r 送信成功の返信をしない # -f 返信するメールの From # -m 拡大表示 # -h FAX変換のヘッダを表示しない require 'jcode.pl' ; require 'mimer.pl' ; require 'getopts.pl' ; do Getopts( 'rsf:mh' ) ; # require '/etc/mgetty/perl.config' ; $sys_admin = "root" ; $sys_admin = $opt_f if ( $opt_f ne "" ) ; $faxallow = "/etc/mgetty/faxmail.allow" ; #$sendmail = "/usr/sbin/sendmail -t" ; $sendmail = "/usr/sbin/qmail-inject" ; #$sendmail = "/bin/cat" ; $faxspool = "/usr/bin/faxspool" ; $mag_filter = "" ; if ( $opt_m ) { $mag_filter = "| /usr/bin/a2psj -ns -nh -nt -fx1.4 -p" ; } if ( -r $faxallow ) { open( FILE , "$faxallow" ) || die( "Can't open $faxallow\n" ) ; while( ) { next if ( /^#/ ) ; s/^\s+// ; s/\s+$// ; $faxallow{$_} = 1 ; } close( FILE ) ; } if ( @ARGV ) { $faxphone = $ARGV[0] ; shift ; } sub getaddr { local( $line ) = @_ ; if ( $line =~ /<(.*)>/ ) { return $1 ; } else { return (split( /\s+/ , $line ))[1] ; } } $header=1 ; $hd = "" ; $body = "" ; while( <> ) { jcode::convert( *_ , 'euc' ) ; if ( $header ) { if ( /^[ \t]/ ) { $hd .= $_ ; } else { if ( $hd ne "" ) { $hd = do mimedecode( $hd ) ; jcode::convert( *hd , 'euc' ) ; if ( $hd =~ /^From:\s/i ) { $from = do getaddr( $hd ) ; $fullfrom = $hd ; $fullfrom =~ s/^From:\s+//i ; $fullfrom =~ s/\s+$// ; } elsif ( $hd =~ /^Reply-To:\s/i ) { $replyto = do getaddr( $hd ) ; } elsif ( $hd =~ /^Subject:\s/i ) { $subject = $hd ; $subject =~ s/^Subject:\s+//i ; $subject =~ s/^\s+// ; $subject =~ s/\s+$// ; } } $hd = $_ ; if ( /^$/ ) { $header = 0 ; $mailto = $from ; $mailto = $replyto if ( $replyto ne "" ) ; } } } else { $body .= $_ ; } } # 利用許可の確認 if ( ! $faxallow{$from} ) { open( ANSWER , "| $sendmail" ) || die( "Can't open $sendmail" ) ; $text = <<"EOF" ; To: $mailto From: $sys_admin (FAX gateway) Subject: [faxmail] Your FAX to $faxphone あなた($from)は、メール/FAX 変換サービスを利用できません。 もし変換サービスを利用したいなら、 管理者 $sys_admin に連絡してください。 > Subject: $subject EOF jcode::convert( *text , 'jis' ) ; print ANSWER $text ; close( ANSWER ) ; exit( 0 ) ; } # 任意のFAX先への送信機能 if ( $faxphone eq "" || $opt_s ) { if ( $subject =~ /^[0-9\-]+\s/ ) { ($faxphone , $subject) = $subject =~ /^([0-9\-]+)\s+(.*)$/ ; } else { open( ANSWER , "| $sendmail" ) || die( "Can't open $sendmail" ) ; $text = <<"EOF" ; To: $mailto From: $sys_admin (FAX gateway) Subject: [faxmail] Your FAX to faxmail 任意の FAX 先への送付を利用したい場合には、 Subject欄の先頭に FAX 電話番号を記入してください。 > Subject: $subject EOF jcode::convert( *text , 'jis' ) ; print ANSWER $text ; close( ANSWER ) ; exit( 0 ) ; } } $tmp = "/tmp/faxmail.$$.tmp" ; open( FAX , $mag_filter ."| $faxspool -f $mailto -F \"Electronic Mail Gateway\" $faxphone" ." - > $tmp 2>&1" ) || die( "Can't open faxspool" ) ; if ( $opt_h ) { print FAX <<"EOF" ; FAX FROM: $fullfrom SUBJECT: $subject EOF } else { print FAX <<"EOF" ; FAX FROM: $fullfrom TO: $faxphone SUBJECT: $subject この FAX は電子メールを変換したものです。 --- 受信したメール --- EOF } print FAX $body ; close( FAX ) ; if ( !$opt_r ) { open( ANSWER , "| $sendmail" ) || die( "Can't open $sendmail" ) ; $text = <<"EOF" ; To: $mailto From: $sys_admin (FAX gateway) Subject: [faxmail] Your FAX to $faxphone あなたの $faxphone 宛の FAX を受け付けました。 --- 転送の記録 --- EOF jcode::convert( *text , 'jis' ) ; print ANSWER $text ; if ( -f $tmp ) { open( FILE , "$tmp" ) || die( "Can't open $tmp" ) ; while( ) { jcode::convert( *_ , 'jis' ) ; print ANSWER $_ ; } close( FILE ) ; unlink( $tmp ) ; } close( ANSWER ) ; } ### Local Variables: ### ### mode: perl ### ### tab-width: 4 ### ### End: ###