質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Q&A

解決済

2回答

4394閲覧

自動メール送信システム

naonao11

総合スコア97

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

0グッド

0クリップ

投稿2018/07/24 23:07

編集2018/07/24 23:49

したいこと

①thunderbirdにイベント参加お問い合わせメールが届く
②thunderbirdのメールアドレス,氏名,イベント登録日をcsvファイルに書き出す
③csvからイベント日から逆算して4日前に確認メールを送る
④csvからイベント前日に確認メールを送る

疑問

これを行うためにシェルを使って自動で行えるかも,と思ったのですが正直実現する道筋からわかりません...

行っている方がいましたら,ご助力のほどお願い致します。
シェルスクリプト以外でもぜひ大歓迎です。
shellはubuntu18.0.4です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Thundebirdをいじってどうのするのは得策でないと思います。

メールサーバーの環境をいじれるなら、普通は、
1.「このアドレスにメールが来たら、このプログラムを起動する」ように設定する
2.そのプログラムで、来たメールを読んでしかるべき処理をしてファイル(またはDB)に保存
3.毎日一度、プログラムを起動して、ファイルを読み、該当者がいればメールする
というような処理にするかと思います。

メールサーバーの環境をいじれない場合は、1のところを、
1.定期的にメールサーバーにメールを取りに行き、あればプログラムを起動して渡す
という処理に変えます。

シェルスクリプトだけで出来ないかというと、出来なくはないですが、何らかのプログラミング言語を使うのと変わらない手間が掛かりますね。
#追記
Linux前提で言うと、
1.は、fetchmailという「メールを取りに行って、フォルダに格納したり、プログラムを起動したり」という機能のコマンドがあります。
これをcronからN分ごとに起動するか、あるいはデーモンモードでN分を指定して常駐させます。

2.はテキスト処理なので、grepなりsedawkなりで。PerlやRubyを使う手もあるでしょう。

3.はcronから起動して、テキスト処理して、sendmailコマンドで送信ですね。メールが送れる設定が必要です。

また、設計に於いては、2と3の機能分担の検討も必要です。

#追記2
fetchmailを使って、受信したメールをプログラムに送る設定ファイル~/.fetchmailrcのサンプル。

plain

1defaults 2 uidl 3 no mimedecode 4 no rewrite 5 mda /fullpath/to/program # メールを渡すプログラムのフルパス 6 keep 7 8poll mail.example.com protocol pop3 # メールサーバー名とpopの方式 9 username xxxxxxxxx # ユーザー名 10 password xxxxxxxxx # pop 認証のパスワード

認証部分は、これだとパスワードが平文で送られるので、このまま使わない方が良いです。
詳しくは、man fetchmail参照。

投稿2018/07/25 00:33

編集2018/07/25 02:12
otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naonao11

2018/07/25 00:39

回答ありがとうございます!メールサーバーはいじれないので後者の方になります… メールを取りに行き、プログラムを起動して渡す という点なのですがその処理はシェルスクリプトで行うということでしょうか。 また、2,3についてもシェルスクリプトで行うということでしょうか。 度たびなる質問申し訳ございません!
otn

2018/07/25 01:32

回答に追記します。
naonao11

2018/07/25 01:59

ありがとうございます! 申し訳ございませんが、2について PerlやRubyで設定した場合についてはどう自動でテキスト処理を行うのでしょうか。。。 本当に申し訳ございません...
naonao11

2018/07/25 02:01

また2,3の機能分担についてはここからまた細分化するということでしょうか。
naonao11

2018/07/25 02:33

なるほど! fetchmailというソフトウェアを取り入れて,その設定ファイルにプログラムのfullパス(処理2のプログラムの場所),上記を記載(passwordのところは変更)ということでしょうか!
otn

2018/07/25 02:40

そうですね。そのプログラムの標準入力にメールが渡ります。 あと、認証は、平文でパスワードをネットに流さないためには、「fetchmail 認証 POP SSL」でググルとか。
naonao11

2018/07/25 02:56

ありがとうございます! というと ・1で設定ファイルをデーモンモードで起動⇒2のプログラム実行 ・クローンからシェルにて実行 という二つを行うということでしょうか。 何から何まで申し訳ございません・・・
otn

2018/07/25 03:24

2つというか3つというか4つというか。 あと、デーモンモードで動かすと、「ちゃんと動いているか」が心配になってしまったりします。
naonao11

2018/07/25 06:13

物覚え悪く申し訳ございません! それは自分のところにメールをまずテスト送信させて、ということでしょうか。
naonao11

2018/07/31 07:20

申し訳ございません、、、もう一つ質問させていただいてよろしいでしょうか… ③のsendmailなのですが、ruby送信テキスト処理を行いsendmailする処理で書いてcronで回すということでしょうか…
otn

2018/07/31 07:26

「ファイルを読んで、送付すべきメールがあれば、メールを送る」という処理をcronに登録すればいいでしょう。 Rubyで書くなら、sendmailコマンドを起動せずに、直接SMTPでメールサーバーにつないで送るのでも良いです。
naonao11

2018/07/31 07:32

例えばですが cronに ①メールを読み込ます(fetchmail) ②メール内容をcsv化にテキスト処理(ruby) ③csvから送付すべき日付のものを送付用テキスト処理(ruby) ④送付すべきメールがある場合送信(ruby) で行うということでしょうか…?
otn

2018/07/31 07:41

混乱してますね。 >①thunderbirdにイベント参加お問い合わせメールが届く >②thunderbirdのメールアドレス,氏名,イベント登録日をcsvファイルに書き出す は、メールが届いたときにやる処理。今回は、fetchmailから起動ですね。 >③csvからイベント日から逆算して4日前に確認メールを送る >④csvからイベント前日に確認メールを送る は、メールの受信と関係無く、毎日一回行う処理。
naonao11

2018/07/31 07:52

なるほど… 上と下については別々のcronということでしょうか…?
otn

2018/07/31 07:53

そりゃそうでしょ。
otn

2018/07/31 07:55

まあ、前半も1日1回で良いなら、続けてやっても良いけど。
naonao11

2018/07/31 08:27

申し訳ありません!ありがとうございます!
guest

0

otn さんも書かれていますが、Thunderbird を介すのはかえって難しいです。

ちょっとすぐに詳細な回答ができないのでヒントのみ回答させてもらいますが、

  1. メールサーバから直接メール受信し、ファイルに出力してみる
  2. 出力されたファイルから各パラメータを抜き出してみる
  3. 抜き出したパラメータを条件としてなにか(イベント日と今日の日付を比較とか)してみる
  4. メールサーバを介してメールを送信してみる

という順番でスクリプトを作成し、cron とかで毎日自動実行するイメージかと思います!

ちなみにメールはどのようなメールを利用されてますか?
Gmail とか、自社運用とか…その情報がないと、実際のコマンドについてはサポートしづらいです。。


気になった文章

thunderbirdのメールアドレス,氏名,イベント登録日をcsvファイルに書き出す

Thunderbird の氏名とかではなく、メールの送信元メールアドレス、本文に記載されている氏名、イベント登録日…ですよね。

shellはubuntu18.0.4です。

Ubuntu は OS ですので、シェルといったら Bash とかそんなんだと思います。

投稿2018/07/25 01:26

GrassfieldK

総合スコア50

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naonao11

2018/07/25 01:40

ご回答ありがとうございます! 順序でスクリプト作成ということは、それぞれでファイルを作り、コマンドをたたいて後は自動ということでしょうか。。。? メールについてはthunderbirdとなっています。
GrassfieldK

2018/07/30 06:50

回答が遅くなってしまいまして…すみません。 質問は解決済みのようですね、よかったです! 一応回答しますと、 > 順序でスクリプト作成ということは、それぞれでファイルを作り、コマンドをたたいて後は自動ということでしょうか その解釈でも間違っていないと思います。 今回の件に限りませんが、1から作る場合、まずは断片的に分けてスクリプトを作っていく方がやりやすいです。 つまり、まずはそれぞれ別のスクリプトとして作成してみて、一通り完成できたらあとはそれらを一つのスクリプトにする、というのがいいかと思います。 ただ、このまとめる作業は、それまでスクリプトごとに別であった入出力をひとつなぎにするわけなので、 面倒であればスクリプト1が出力ファイルをスクリプト2に読み込ませて…というようにして、全てのスクリプトを順番に実行している親スクリプトを作成するという方法もあります(これがコマンドを叩いて後は自動、ということでしょうか)。 > メールについてはthunderbirdとなっています。 メールとメールクライアントの区別がついていないように見えます。。。 ここで説明してもいいですが、きりがなさそうですので省略します。 --- 悪気があって言うわけじゃないですが、もう少しだけ用語を覚えたりと基礎を勉強してからのほうが、 飲み込みも早くなりますし回答者も回答しやすく、効率的ですよ!! 用語についてはこちらのサイトが非常にわかりやすく的確なのでおすすめです。 - https://wa3.i-3-i.info/
naonao11

2018/07/30 07:33

丁寧にありがとうございます!おっしゃるとおりです…ありがとうございます、そのサイトを参考に用語を覚えていきます! ・スクリプト1:メール内容の取得 ・スクリプト2:テキスト処理 ・スクリプト3:メール送信 といった感じなんですね!
GrassfieldK

2018/07/30 07:44

僕も知識がまだ浅いときに高度なことをしようとしたら、出てくる情報全て意味がわからず苦戦した記憶があります。 スクリプトについてはそんな感じです! 今後の参考になれば。。。
naonao11

2018/07/30 07:47

ありがとうございます!今を苦労して知識を増やしていきます! ありがとうございます!かしこまりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問