プログラミングしてて困ったことがここ2日あったのでメモしておく。
javaxでGmailを扱うアプリを作っているのだが、色々障害がある・・。
①
Gmailにconnectできない・・何故だ・・。と思っていたら、
Gmailの設定で「安全性の低いアプリがアカウントにアクセスするのを許可する」にしておかないとjavaxでconnectできないようだ。
https://support.google.com/accounts/answer/6010255
②
メールボックスには1万件くらいあるのに
_emailFolder = _store.getFolder(FOLDER_NAME);
_emailFolder.open(Folder.READ_WRITE);
int length = _emailFolder.getMessageCount();
で、lengthが必ず250になる。
メールを消せば250以下も取れるが、250以上になると途端に250としか取得できなくなる。
何故だか分からないが、1回読んだら消すようにしてメールが250以上たまらないようにすることで解決した。
でもサードパーティのメーラーアプリはどうしてるんだろう・・・。
③
送受信のエージング検査をするため、30秒に1度送受信するプログラムを一晩中実行しっぱなしで寝てみたら、途中でエラーまみれになっていた。
エラーメッセージに「Daily sending quota exceeded.」とか書いてあって、え、送り過ぎちゃダメなの?と思ってググってみたら
http://haisai.info/archives/post_116.html
Gmailは1日500件以上送るとスパム扱いされてアカウントロックされるもよう・・・。
仕方ないので別のアカウント作りました。
④
新着メールがあったことを知らせる方法としてレシーバーを登録してみた。
http://d.hatena.ne.jp/speg03/20110612/1307882138
しかしこれがいい加減な奴で、その時の気分でしか動作しやがらない・・。
新着メールがあるのにレシーバー動かなかったり新着メールが無いのに動作したり・・。
気休め程度に受信メールを確認するトリガーに使う位にしか使えない。
⑤
前述のレシーバーから新着があることを検出してメールの件数を
_emailFolder.getMessageCount();
で取得すると新着分の件数が取得されない。
これはGmailそのものにまだ受信されていないようで、たまに全然新着メールを受信しないことがある。
こんな時はブラウザのメールボックスで更新ボタンを押さないといけない。
プログラムからreloadなんかできればいいのにそういうメソッドが無い。
新着メールの表示にめちゃめちゃ時間がかかることがある。
まだまだこれからトラブルあるでしょうけど、今後の人のために情報おいておきます。
javaxでGmailを扱う
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 14年前
- 住所: 北海道札幌市
- 連絡を取る:
javaxでGmailを扱う
最後に編集したユーザー Dixq (管理人) on 2016年9月19日(月) 11:58 [ 編集 1 回目 ]
Re: javaxでGmailを扱う
①に関しては,Gmail API使うことがGoogleの推奨でしょうね。
Oauth認証なのでパスワードをクライアントが知る必要がない,という1点だけでもOauth認証の方が安全かと。
Oauth認証なのでパスワードをクライアントが知る必要がない,という1点だけでもOauth認証の方が安全かと。
オフトピック
他のシステムのパスワードなんて,知らなくて済むなら知らない方が作る側としても安心です。
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 14年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: javaxでGmailを扱う
> YuOさん
なんと!
これは有益な情報をありがとうございます。
Gmailに特化したAPIあるだろうなとは思ってたんですがjavaxで作ってしまいました。
しかしちょろっとググっただけじゃポーリングで受信トレイのメール取得する方法が良く分からないですね・・。
うむむ、サンプルが少ないのは難しそうだ。
今後の改善ネタにしていきたいと思います。
なんと!
これは有益な情報をありがとうございます。
Gmailに特化したAPIあるだろうなとは思ってたんですがjavaxで作ってしまいました。
しかしちょろっとググっただけじゃポーリングで受信トレイのメール取得する方法が良く分からないですね・・。
うむむ、サンプルが少ないのは難しそうだ。
今後の改善ネタにしていきたいと思います。