javaxでGmailを扱う

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

javaxでGmailを扱う

投稿記事 by Dixq (管理人) » 8年前

プログラミングしてて困ったことがここ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なんかできればいいのにそういうメソッドが無い。
新着メールの表示にめちゃめちゃ時間がかかることがある。


まだまだこれからトラブルあるでしょうけど、今後の人のために情報おいておきます。
最後に編集したユーザー Dixq (管理人) on 2016年9月19日(月) 11:58 [ 編集 1 回目 ]

YuO
記事: 947
登録日時: 14年前

Re: javaxでGmailを扱う

投稿記事 by YuO » 8年前

①に関しては,Gmail API使うことがGoogleの推奨でしょうね。
Oauth認証なのでパスワードをクライアントが知る必要がない,という1点だけでもOauth認証の方が安全かと。
オフトピック
他のシステムのパスワードなんて,知らなくて済むなら知らない方が作る側としても安心です。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

Re: javaxでGmailを扱う

投稿記事 by Dixq (管理人) » 8年前

> YuOさん

なんと!
これは有益な情報をありがとうございます。
Gmailに特化したAPIあるだろうなとは思ってたんですがjavaxで作ってしまいました。
しかしちょろっとググっただけじゃポーリングで受信トレイのメール取得する方法が良く分からないですね・・。
うむむ、サンプルが少ないのは難しそうだ。
今後の改善ネタにしていきたいと思います。