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

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

ただいまの
回答率

90.52%

自動メール送信システム

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 192

naonao11

score 58

したいこと

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

疑問

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

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のサンプル。

defaults
        uidl
        no mimedecode
        no rewrite
        mda /fullpath/to/program        # メールを渡すプログラムのフルパス
        keep

poll mail.example.com protocol pop3     # メールサーバー名とpopの方式
        username xxxxxxxxx              # ユーザー名
        password xxxxxxxxx              # pop 認証のパスワード


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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/25 09:39

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

    キャンセル

  • 2018/07/25 10:32

    回答に追記します。

    キャンセル

  • 2018/07/25 10:59

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

    キャンセル

  • 2018/07/25 11:01

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

    キャンセル

  • 2018/07/25 11:33

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

    キャンセル

  • 2018/07/25 11:40

    そうですね。そのプログラムの標準入力にメールが渡ります。

    あと、認証は、平文でパスワードをネットに流さないためには、「fetchmail 認証 POP SSL」でググルとか。

    キャンセル

  • 2018/07/25 11:56

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

    キャンセル

  • 2018/07/25 12:24

    2つというか3つというか4つというか。

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

    キャンセル

  • 2018/07/25 15:13

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

    キャンセル

  • 2018/07/31 16:20

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

    キャンセル

  • 2018/07/31 16:26

    「ファイルを読んで、送付すべきメールがあれば、メールを送る」という処理をcronに登録すればいいでしょう。

    Rubyで書くなら、sendmailコマンドを起動せずに、直接SMTPでメールサーバーにつないで送るのでも良いです。

    キャンセル

  • 2018/07/31 16:32

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

    キャンセル

  • 2018/07/31 16:41

    混乱してますね。
    >①thunderbirdにイベント参加お問い合わせメールが届く
    >②thunderbirdのメールアドレス,氏名,イベント登録日をcsvファイルに書き出す
    は、メールが届いたときにやる処理。今回は、fetchmailから起動ですね。

    >③csvからイベント日から逆算して4日前に確認メールを送る
    >④csvからイベント前日に確認メールを送る
    は、メールの受信と関係無く、毎日一回行う処理。

    キャンセル

  • 2018/07/31 16:52

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

    キャンセル

  • 2018/07/31 16:53

    そりゃそうでしょ。

    キャンセル

  • 2018/07/31 16:55

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

    キャンセル

  • 2018/07/31 17:27

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

    キャンセル

0

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

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

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

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

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


気になった文章

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

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

shellはubuntu18.0.4です。

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/25 10:40

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

    キャンセル

  • 2018/07/30 15:50

    回答が遅くなってしまいまして…すみません。
    質問は解決済みのようですね、よかったです!

    一応回答しますと、

    > 順序でスクリプト作成ということは、それぞれでファイルを作り、コマンドをたたいて後は自動ということでしょうか

    その解釈でも間違っていないと思います。
    今回の件に限りませんが、1から作る場合、まずは断片的に分けてスクリプトを作っていく方がやりやすいです。
    つまり、まずはそれぞれ別のスクリプトとして作成してみて、一通り完成できたらあとはそれらを一つのスクリプトにする、というのがいいかと思います。
    ただ、このまとめる作業は、それまでスクリプトごとに別であった入出力をひとつなぎにするわけなので、
    面倒であればスクリプト1が出力ファイルをスクリプト2に読み込ませて…というようにして、全てのスクリプトを順番に実行している親スクリプトを作成するという方法もあります(これがコマンドを叩いて後は自動、ということでしょうか)。

    > メールについてはthunderbirdとなっています。

    メールとメールクライアントの区別がついていないように見えます。。。
    ここで説明してもいいですが、きりがなさそうですので省略します。

    ---

    悪気があって言うわけじゃないですが、もう少しだけ用語を覚えたりと基礎を勉強してからのほうが、
    飲み込みも早くなりますし回答者も回答しやすく、効率的ですよ!!
    用語についてはこちらのサイトが非常にわかりやすく的確なのでおすすめです。
    - https://wa3.i-3-i.info/

    キャンセル

  • 2018/07/30 16:33

    丁寧にありがとうございます!おっしゃるとおりです…ありがとうございます、そのサイトを参考に用語を覚えていきます!

    ・スクリプト1:メール内容の取得
    ・スクリプト2:テキスト処理
    ・スクリプト3:メール送信
    といった感じなんですね!

    キャンセル

  • 2018/07/30 16:44

    僕も知識がまだ浅いときに高度なことをしようとしたら、出てくる情報全て意味がわからず苦戦した記憶があります。

    スクリプトについてはそんな感じです!
    今後の参考になれば。。。

    キャンセル

  • 2018/07/30 16:47

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

    ありがとうございます!かしこまりました!!

    キャンセル

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る