How do I build a notification email/reply system like Facebook? - facebook

When users receive a notification email about a new private message on Facebook, they can reply to the email and have their response automatically added to the conversation on the site.
How can I build a cross platform system like that? I'm building a group chat system.

This is obviously way over-simplified, but here we go:
The way Facebook's emails work is by using a string that's unique to the receiver in the reply-to address:
<m+50edqb50000003jtdj389k6xib6hofj6t41q1c45sdt92qc#reply.facebook.com>
So when Facebook receive an email into reply.facebook.com, they (presumably) parse the string after the plus sign, decide which user/conversation it's relevant to, and add the text of the email into that conversation.

One option:
Send every notification email with a unique reply-to address, then receive replies with a customized SMTP server that will pair responses with the originating message object in your DB.
Since you are using django (according to your tags) I would recommend looking at the Lamson python SMTP server. It can be programmed to correctly attribute each message. Using Lamson with Django is documented.

Related

Can I post a new topic on a google group using Go?

I'm writing a program that should send emails to multiple users with content extracted from an excel spreadsheet. I know how to do this using the net/smtp package in Go, but I would like to know if it's possible to send an email with the sender being a google group (i.e googlegroup#gmail.com) instead of my email without resorting to using the gmail API? Currently I have a working program that can log in through an email and password, which is then used for auth credentials, but seeing as that google groups don't have the same kind of interface I'm not quite sure how to change it so emails are sent from a group instead of an individual user.
Each google group should have an email address associated with it. golang-nuts is golang-nuts#googlegroups.com for example. Any mail sent to that should be posted to the group, assuming it is from a member of the group.
In order to send from your own gmail account, you can use gmail's outgoing smtp feature with the net/smtp package. Configuration is explained better on this digital ocean post

Email Intermediary Between Sender and Receiver

I am using SES for emailing (currently only sending but I'm open to using it for receiving as well), EC2 server for web app and RDS.
Web application written in Java.
I would like to act as intermediary for users that email each other through my website by having all emails sent between users go through me.
The purpose is to conceal the emails of the two users who are emailing each other.
I thought of doing something like this:
1) The initial email is sent on the website, there it receives a unique ID which is stored in the database (containing the email addresses of the sender and receiver).
2) All subsequent emails between the two users are sent to the website's email address with the unique ID appended as a label (eg:bob+[uniqueId]#domain.com).
3) The email is accordingly routed back and forth between receiver and sender (I perform minor modifications to the email).
(Airbnb does something similar when users of its site message each other).
An extra caveat is that I would like attachments to be able to be included in the emails as well (and thus, they would need to be forwarded).
Is this the correct way to implement this functionality?
Should I do it differently?
If this is the correct approach, any references for how to get started? Specifically, I'm not sure how to use a lambda function (if that is what I would be using) to send an email, or to query my RDS.
Thank you
This sounds similar to private email systems I've seen on other sites. I think you have the correct idea. I would recommend using SES for both sending and receiving, and use a Lambda function to process the incoming emails.
You can have SES fire a Lambda function when you receive an email: http://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-action-lambda-example-functions.html
The other option for triggering processing of incoming emails would be SES->SNS->Java application webhook. Or you could queue them up via SES->SNS->SQS and have your Java application subscribe to the SQS queue.

Verify E-Mail Delivery and Readership

When sending an email, is there a way to find out:
User has received the email (displayed in user's inbox).
User has read (and at what time) the email.
If it's not possible, what prevents it from finding out? What is the route an email message follows from sender to receiver.
When you send an email, the email is transferred through a series of servers using SMTP (Simple Mail Transfer Protocol). Once the email reaches it's destination it is stored into the recipients directory. To retrieve and read the email, the recipient uses and email client like Outlook to that connects to the server via IMAP/POP3 which tells them how many new emails they have and delivers each message to the client. In order to get this information, the user must provide their credentials.
So, in order to get this information you would need to know the imap/pop3 server(s) for the recipient's domain, as well as the recipient's login credentials (which would give you full access to the recipients email account). Basically, this is not possible.
This article gives a nice simple overview of how email gets sent over the internet.
You can, and you do not need the credentials as mentioned in the selected answer.
Lets imagine you are using apache and php + mysql.
You send person x an email,
In the email you have an embedded image (your logo) which resides on your server.
the url of the logo in the email, points to a file on your server:
example.com/logo.png?userRelatedId which is a php file.
with an htaccess (apache) you can state that logo.png gets executed with php and in fact forwards a real image and correct mimetype but before that identifies userRelatedId, and saves in your database with the time the file was accessed,
Meaning the email was read by person x and the time which the logo was accessed (email was looked at).

Automatic email from iphone application

I have seen some similar questions here on stack-overflow, but in my application i want when user click on confirm button automatic email go to the email id specified in the form with other details.
How can i implement this.
You could just make a post request to a server and have the server then send the email.
You cannot send emails automatically without sending the user to the mail application. You could however, take advantage of a third party service like Amazon Simple Email Service http://aws.amazon.com/ses/ to send the message.

How to "Reply to this email to comment" like Facebook?

A forum-like app I'm working on will send an email notification to the thread starter when a new replied is received. It would be nice if the owner can just reply the email to add a new reply to the thread.
How can I implement the feature, i.e. "reply to this email to comment" like Facebook?
Option A: scan the subject line/body? I don't like it 'cause what if the user modified the subject line by mistake?
Option B: use a unique reply-to e-mail address that links to the thread ID. Is this a common function for mail server? like set up a *#addComment.domain.com ? Or does the app server needs to setup a new email account before sending the email with reply-to?
Any other options?
Thanks!
Using strings in the subject and body can be easily erased by a user of the system.
Use plus addressing (reply+UNIQUEIDENTIFIER#yourapplication.com) as the REPLY-TO address in the mail message. With CFIMAP you can retrieve the messages and parse the TO.
Wildcard domain (replyto#UNIQUEIDENTIFIER.yourapplication.com) is also an option, but if your email server supports plus addressing I would go that route.
You could stuff the thread ID or the parent message ID (the message that is being replied to) in the Msgessage-ID: header of the email, or a custom email header, and put the processing after accepting the message.
However, using custom Reply-To: addresses is quite common.
an option is to embed an identifier in both the subject and the body of the original email. something small, like bit.ly's 6-8 character code. that way, they're less likely to mess it up, and you have the safety of the email body, which most people leave in anyway.
Using a custom email header is not advised as there is no guarantee that any server along the route would not strip it off (or simply fail to pass it on). A friend who worked at a huge email data center for AT&T said the techs there warned him off that idea.
This may also be true of the Message-ID: -- don't know.