Best way to maintain consistency while implementing a mail client - jakarta-mail

Sorry if it's not a question conforming to SO standards but I don't really know where else to ask for advice.
I'm implementing a mail client which downloads all mails and stores them locally. Any mail deleted locally should be reflected in the online inbox and vice versa. Also if the download of mail stops before all mails are downloaded, it should resume from the stopped mail next time.
Currently I'm using a combination of message id and message uid for this but I heard it's not a reliable method for this. Can you guys suggest me any other approach ?

You should use IMAP UIDs. RFC 4549 should help.

Related

Reading mails using JavaMail

This question is more about the behavior. I have been using both POP3 and IMAP to access mails in Gmail using JavaMail API. I noticed something and I wanted to clarify my doubts regarding the same.
I am currently retrieving unseen mails from my Inbox. There were a couple of unread mails and I retrieved them using POP3. I switched over to IMAP and read the same inbox and I was able to retrieve the same 2 mails.
I've been recently using JavaMail and I encountered this kind of behavior and I wanted to know if this is the expected behavior?
You read your mail, did not delete or change anything, so when you read it again it was still there and unchanged. That's all.

How to request read receipt with Google App Engine

I have a GAE application which sends out email to my domain users in a Google Apps for Business environment. I am using JavaMail as described in this article. Unfortunately I can't seem to find a way to ask for a read receipt. I looked at Message methods but nothing seems to suggest that it is possible. Thanks a lot.
If you're interested in knowing if a mail bounced, then use bounce notification https://developers.google.com/appengine/docs/java/mail/bounce
For read receipts:
As far as I'm aware, you need to roll your own read receipt functionality. For example: Include an image(with a unique url) in the mail you send out. When the recipient opens the mail, the image is retrieved and you can determine whether the mail has been read. This has it's downsides; if they don't have images enabled, then you won't receive the notification.
You need to set the appropriate headers on your message, as described in Message Disposition Notification - RFC 3798. Not all mailers will honor MDNs, so you might find the tracking pixel useful as well. But then some mailers won't display remote images, so in the end there's no guaranteed way of getting notified when a message is read.

Tracking email client opens

I am slowly making some progress on figuring out how Litmus (litmus.com/analytics) and some other companies actually track email opens by which Email Client the user is using.
I found this really cool article written a long time ago that basically helped me get a start to actually understanding what goes into just simply tracking opens.
http://webanalyticsinsight.wordpress.com/2010/03/04/how-to-track-email-open-rates/
I'm no developer but I'm assuming there must be some sort of get_browser() that would allow me to do this.
any push in the right direction would help, thanks.
It's done by inserting a small hosted image into each message that is sent. The URL to the location where the image is hosted is unique for each message, so this way the system can determine which messages have been opened (provided that the recipient's mail client is set to open hosted images).
See: http://ultrasmtp.com/resources/openedmessagealerts.php for more info.

How can a server communiate with two clients at once (JavaScript, HTML, PHP)?

I got an assignment to do and for that I could use any www technology like HTML, JavaScript, PHP etc. I'm really sorry to say that I haven't studied any of these technologies. Therefore I took few tutorials and skimmed through them searching for answers.
I found solutions for many problems but one problem yet unsolved. It is this:
I want two clients to communicate through a server for this assignment. One send a message, server processes it and forwards it to the next.
None of PHP tutorials showed me anyway of doing this. All of them talked of communication between one client with a server.
Please help. Show me a way to do this. Thanks.
Currently, without reverting to cutting-edge (and possibly hacky/unreliable) techniques, your PHP server cannot initiate communications with a page you've already loaded into a web browser. This is a result of the way the HTTP protocol works.
One way to solve this would be polling on the "receiving" end for data. Something like a publish-subscribe pattern.
One way to do this would be:
One client sends data to the server using an HTTP request (XHR aka AJAX) specifying the target for this data (the other client).
The server stores this data in a persistent storage (local file, database, etc).
The second client periodically sends a request to the server asking if there's any new data for it to consume. This can be done using setInterval and XHR in JavaScript.
I would suggest you take a look at:
http://en.wikipedia.org/wiki/Publish/subscribe
And also, for a cutting edge way to do this, check out Socket.IO:
http://socket.io
You might want to Google on "php chat server." Building a chat server is a simple way to get started.
http://net.tutsplus.com/tutorials/javascript-ajax/how-to-create-a-simple-web-based-chat-application/
http://code.jenseng.com/jenChat/

How can I send messages to clients without polling?

Every example for GAE Chats uses some kind of polling. However, if my GAE app holds a list of clients (in the datastore if necessary), perhaps I could avoid polling by sending a message to all these clients. How can I achieve this?
If you are talking about HTTP, the short answer is that GAE does not currently support it. What I think you are asking about is sometimes called BOSH. Once WebSockets become more widespread, they will be an excellent solution for this problem.
In the mean time you might want to look at XMPP. Using XMPP you can avoid polling. Google has announced a Channel API (yet to be released) which will basically give you the same features as websockets.
You've probably seen some chat room examples...
Since you just want to send a message to users on your datastore (Tip: the IMProperty is great to store such data), it's just a matter of directly sending the message:
from google.appengine.api import xmpp
# `destination` is a list of JIDS
# `message` is a normal unicode string
xmpp.send_message(destination, message)
You can find a great tutorial on using XMPP by Nick Johnson here
Note that you can now use the App Engine Channel API for this: http://code.google.com/appengine/docs/python/channel/
You can create a channel for a given client using:
channel.create_channel(client_id)
Then when you want to update that client, send a message:
channel.send_message(client_id, message)
Basically each client will get a persistent connection that you can push messages over.

Resources