ゴミ出しの日の朝、メールで教えてくれるスクリプト
新しい家に引っ越して、半月が過ぎましたが、なかなか生活になじまないのがゴミ出しの日。
朝はばたばたしているため、つい忘れがち。
そんな僕のために、ゴミ出しの日だった場合、朝メールで連絡してくれるツールを作りました。
下記の設定は神戸市の僕の住むとある地域の設定です。
これをcronで毎朝起きる時間くらいに動かしてやればいいわけです。
目覚まし代わりにもなりますね。
ちなみに、必要なモジュールCarp::Clanは6.04、Date::Pcalcは6.1をCPANからダウンロードしpure perl で生成して下記スクリプトと同じディレクトリにおいています。
#!/usr/bin/perl use strict; use warnings; use Carp::Clan; use Date::Pcalc qw( Today Date_to_Days Nth_Weekday_of_Month_Year Day_of_Week ); #-------------------- # define #-------------------- my $subject = ''; my $m_moeru = '今日は燃えるゴミの日です'; my $m_funen = '今日は燃えないゴミの日です'; my $m_housou = '今日は包装ゴミの日です'; my $m_sigen = '今日は資源ゴミ(古新聞など)の日です'; my $m_sigen_kan = '今日は資源ゴミ(空き缶など)の日です'; #sendmailパス my $name = 'account'; my $password = 'password'; my $from = 'gomi@mail.com'; my $to = 'to@mail.com'; #-------------------- # main #-------------------- my ($year,$month,$day) = Today(); my $today = Date_to_Days($year,$month,$day); # 燃えるゴミの日判定 my $dow1 = 1; # 1 = Monday everyweeks my $dow2 = 4; # 4 = Thursday everyweeks my $dow = Day_of_Week($year,$month,$day); if (($dow == $dow1 || $dow == $dow2)) { &send_mail( $from, $to, $subject, $m_moeru); } sleep(2); # 燃えないゴミの日判定 第2,4金曜日 my $mn1 = 2; # 1 = second of that day of week my $mn2 = 4; # 4 = fourth of that day of week my $mn_dow = 5; # 5 = Friday everyweeks if ($today == Date_to_Days(Nth_Weekday_of_Month_Year($year,$month,$mn_dow,$mn1)) || $today == Date_to_Days(Nth_Weekday_of_Month_Year($year,$month,$mn_dow,$mn2))) { &send_mail( $from, $to, $subject, $m_funen) } sleep(2); # 包装ゴミの日判定(2011/4から設定開始) #my $mn1 = 2; # 1 = second of that day of week #my $mn2 = 4; # 4 = fourth of that day of week #if ($today == Date_to_Days(Nth_Weekday_of_Month_Year($year,$month,$dow,$n))) { # &send_mail( $from, $to, $subject, $m_housou) #} #sleep(2); # 資源ゴミ(古新聞など)の日判定 第2,4金曜日 my $sg1 = 2; # 1 = second of that day of week my $sg2 = 4; # 4 = fourth of that day of week my $sg_dow = 5; # 5 = Friday everyweeks if ($today == Date_to_Days(Nth_Weekday_of_Month_Year($year,$month,$sg_dow,$sg1)) || $today == Date_to_Days(Nth_Weekday_of_Month_Year($year,$month,$sg_dow,$sg2))) { &send_mail( $from, $to, $subject, $m_sigen) } sleep(2); # 資源ゴミ(空き缶など)の日判定 毎週水曜日 my $sk1 = 3; # 3 = Monday everyweeks my $s_dow = Day_of_Week($year,$month,$day); if (($sk1 == $s_dow)) { &send_mail( $from, $to, $subject, $m_sigen_kan); } sleep(2); ##------------------------------------------------ メール送信関数 ## send_mail( $from, $to, $subject, $body); ## ------------------------------------------------------------------------------ ## From, To は、メアドのみを渡す。 "who" <who@mail.aaa> とかは駄目。 ## $subject, $body, $attach_data, $filename のエンコードは関数内でやるので、 ## 普通に EUC を渡せば OK 。 ##------------------------------------------------------------------------------ sub send_mail ($$$$) { my( $from, $to, $subject, $body) = @_; my $boundary = "-*-*-*-*-*-*-*-*-Boundary_" . time . "_" . $$; # デリミタを退避し、デフォルトの \n にする。 my $oldDelim = $/; undef $/; ### サブジェクトを jis にして、MIME エンコード require './jcode.pl'; require './mimew.pl'; $subject = MIME::mimeencode(jcode'jis($subject)); ### 本文を jis に $body = jcode'jis($body); use MIME::Base64 qw(encode_base64); ### メールの送信' my $sendmail_path = "/usr/sbin/sendmail"; open MAIL, "|$sendmail_path -i -t"; ########################## メールの組み上げ' ### 全体のヘッダ print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-Type: text/plain; charset=iso-2022-jp\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "From: $from\n"; print MAIL "To: $to\n"; print MAIL "Subject: $subject\n"; ### メール本文のパート print MAIL "\n"; print MAIL "$body\n"; print MAIL "\n"; close MAIL; # デリミタの復元 $/ = $oldDelim; } exit(0);