- ベストアンサー
送信日時を指定してメールを送信したい
質問させてください。 先日以下の通り、メールを数日後に自動送信する方法を質問したものです。 http://okwave.jp/qa/q7051411.html この時はDBの作成を提案していただいたのですが、残念ながらこちらの環境ではDBを使用できないようです。 代替案としては何かありませんでしょうか。 メールの送信ごとにスレッドを作成する方法も考えたのですが、大量をメモリを必要としますし、再起動すると送信する予定のものが全てなくなってしまうので・・・。 何度も申し訳ありません。 以上よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
DBでなくても、 ファイルに時刻やメール内容を記録しておいて そのディレクトリのファイルにそって、メール発行して 終われば、それを削除する処理を書いたプログラムをcronで実行って感じでも可能ですよね。 ただ、atコマンドが使えるサーバーなら、メール発行処理をシェルファイルにしておいて at 日時 < シェルファイル で その日時で 実行予約できるので、このほうが簡単な場合もあります。 -----uniq_file.sh ---- /usr/lib/sendmaiil -t -ffrom@address.com << @@@ From: from@address.com To: to@address.com Subject : base64でエンコードしたタイトル メール本文 @@@ ----------- Process process = Runtime.getRuntime().exec( "at 19:57 07112011 < uniq_file.sh"); process.waitFor(); という感じで。 確認は、 atqコマンドで待機リストを取り出せますし、 atrm ジョブ番号 で予約を取り消しすこことも可能です。 ただ、レンタルサーバーで、 Webサービスのアカウントが別のWebサービスと共通だと よそのbatchコマンドやatコマンドの内容が見えてしまうので(見せてしまうので) そういう場合はsudo を組み合わせて、独立したアカウントでatでの予約をする必要があります。 (ないしは、はやりcronで)
その他の回答 (3)
- tomaju
- ベストアンサー率76% (84/110)
DBが使えないとすればテキストファイルに記録しておくのはどうですか? イメージはsendmailとかのメールキューです。 1受付1ファイルで記録し、返信が終わったら消す。 ファイル名が重複しないように命名に工夫が必要ですかね。。。 ファイル名に受付日時を含めておくと、一定時間が経過したものを 拾い出すのに使えるかもしれません。 中身の形式例えば、1行めは日時、2行目はメールアドレスだとかでもいいだろうし メールのヘッダみたいな形式でもいいだろうし、 XMLでも、JSONでもなんでも扱いやすいもので。 cronやタスクスケジューラで定期的に起動してもいいし 自作のプログラムを常駐させておいて、その中で定期的に 対象データのピックアップを行ってもいいかと思います。
お礼
ありがとうございます。 DBが使えないとなると、やはりファイルが一番シンプルでしょうか・・・。 検討してみます。
h2database とか sqlite3 とか Java上でうごくDBもNG? クローンで定期的にメールボックスをみて○日経過したものがあったら送信処理とかでもいいかもね。
お礼
ありがとうございます。 どうにもDB自体の使用がNGみたいです。 メールボックスを実装すればできるということでしょうか・・・。
- DIooggooID
- ベストアンサー率27% (1730/6405)
先のご質問の回答にも提案されていますが、 メール受信の都度、 UNIX系だったら cron 、 Windows だったタスク・スケジューラに、メール送信処理の起動日時を 登録すれる方法で良いと思います。 ちなにみ、一日あたりの受信メールの件数は、どの程度と見積もっていますか?
お礼
あろがとうございます。 結局、DBを使用できる環境をなんとか用意して対応しました。 お知恵を貸していただいたのに申し訳ありません。
補足
ありがとうございます。 一日あたりの受信メールは、10件程度と見積もっています。
お礼
ありがとうございます。 全く知らない実現方法でした。 検討してみます。