ひかり電話への着信をメールで通知する、月額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 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;
}
コメント