ひかり電話の着信お知らせメールみたいなものを RaspberryPi で実現する

スポンサーリンク
スポンサーリンク

ひかり電話への着信をメールで通知する、月額100円の着信お知らせメールというサービスがあります。
これと同じようなものを RaspberryPi で実現します。
(PC上のLinuxでもできます)

下記の記事で説明した、ひかり電話にかかってきた電話番号の取得を使っています。
「動作確認」までの設定を事前に行っておいて下さい。

パソコン鳥のブログ

本記事の最後にあるスクリプトを使用します。
スクリプトの sendmail ()関数内の $server , $port , $user , $pass を、お使いのプロバイダのメール設定で記述します。
$server は SMTPサーバです。

また、 sendmail( ‘送信元メールアドレス’ , ‘宛先メールアドレス’ , ‘着信通知’ , $str ); の行の、送信元メールアドレス、宛先メールアドレスの個所を記述します。
“送信元メールアドレス” は、送信されるメールの From になる文字列です。

その後、
perl oshirase_mail.pl
と実行すると、着信の度に次のようなメールが届きます。

Subject:着信通知
着信日時:2017/11/14 22:00:06
通知番号 XXXXXXXXXX
呼出時間:5 秒

なお、ワン切りのような短いコールで切れる電話はメール通知しないようにしています。
デフォルトでは電話のコールから4秒以内ですが、これを変更するには
if( $dtime > 4 ){
の行の 4 を変えて下さい。

oshirase_mail.pl

use strict;
use Encode;
use Net::SMTP;
use warnings;
use utf8;

use IO::Handle;

STDOUT->autoflush(1);
binmode(STDOUT, “:utf8”);

my( $number , $stime , $dtime, $sdt , $str , );

open( IN , ‘baresip 2>&1|’ );

while( <IN> ){
    if( $_ =~ /from: (\d+) sip/ ){
        $number = $1;
        $stime = time;
        $sdt = `date +”%Y/%m/%d %H:%M:%S”`;
        chomp( $sdt );
    }elsif( $_ =~ /sip:(\d+)\@.+ session closed/ ){
        $number = $1;
        $dtime = time – $stime;
        if( $dtime > 4 ){
            $str = “着信日時:$sdt\n通知番号 $number\n呼出時間:$dtime 秒\n”;
            sendmail( ‘送信元メールアドレス‘ , ‘宛先メールアドレス‘ , ‘着信通知’ , $str );
        }
    }
}
close( IN );

sub sendmail {

    my $server = ‘SERVER‘;
    my $port = 587;
    my $user = ‘USER‘;
    my $pass = ‘PASSWORD‘;

    my $from = $_[0];
    my $mailto  = $_[1];
    my $subject = Encode::encode( ‘MIME-Header-ISO_2022_JP’ , $_[2] );
    my $header  = “From: $from\n” .
        “To: $mailto\n” .
        “Subject: $subject\n” .
        “Mime-Version: 1.0\n” .
        “Content-Type: text/plain; charset = ISO-2022-JP\n” .
        “Content-Trensfer-Encoding: 7bit\n”;
    my $message = Encode::encode( ‘iso-2022-jp’ , $_[3] );

    my $smtp = Net::SMTP->new( $server , Hello => $server , Port=> $port );
    if ( !$smtp ) {
        print encode(‘iso-2022-jp’,  “メールサーバーにアクセスできません\n”);
        exit;
    }
    $smtp->starttls();
    $smtp->auth( $user, $pass );
    $smtp->mail($from);
    $smtp->to($mailto);
    $smtp->data();
    $smtp->datasend($header);
    $smtp->datasend($message);
    $smtp->dataend();
    $smtp->quit;

}

コメント

タイトルとURLをコピーしました