开发者

generate email address that links to a message thread like Facebook in ruby on rails app

Facebook sends email notifications when a new message has arrived in a facebook message thread. The email allows you to reply on it without going to Facebook. I think it is being done by Facebook by generating a reply to email address that is linked to the message thread.

Example of such a reply-to email adress of a facebook email notification (I modified some characters, so it won't work): m+51r6w8e000000bu1jfpbziio6jmfnvvtkaevxrgojnel8qv@reply.facebook.com

I'm trying to implement a similar feature in my rails app.

I'm still a newbie in rails and wondering how I should approach this issue.

I was trying to encrypt the id of my message thread using the encryptor gem, then using this as an email adress in the form: encryptedId@mydomain.com. Issue is that the encrypted output contains characters that are not al开发者_运维技巧lowed in an email address.

As I know little about encryption I googled and found the possibility to base64 encode the encrypted output. This is common practice for urls. But still, this has characters (for example %) that are not allowed in an email adress.

I found that RC4 should be an encrytpion algorythm that has hexadecimal output. But the encryptor gem gives me 1 non-hexadecimal character when using this algorythm, so it doesn't seem to work. Conclusion: I'm a bit stuck.

Maybe I'm looking to far. Are there other appoaches that I could consider?

EDIT: extra info: I'm trying to make the email address non-guessable.

Thanks!


If you are trying to keep your response email addresses non-predictable, you can create your email address out of a concatenation of:

  • some unique aspect of the message thread such as a row ID
  • a similar unique attribute of the user being sent the email
  • a MD5 encoded hash of both of those items plus a unique string known only by your system
  • a random salt to the MD5

So if user 7812 posts in thread 8299 you could make your base string

u7812t8299

then take that string "u7812t8299" plus the time the email was sent (say 12:31), and a string known to your system like "purpleumbrella"

Your result string is "u7812t82991231purpleumbrella". Using:

Digest::MD5.hexdigest("u7812t82991231purpleumbrella")

we get an MD5 hash of:

5822aceca1f70afdb06f53b5c7e4df99

now send the user an e-mail with a return address of

u7812t8299-1231-5822aceca1f70afdb06f53b5c7e4df99@yoursite

When you get an e-mail back to that address, your system will know that it's for user 7812 posting in thread 8299, and because only your system knows the password required to create the MD5 sum for this combination that would result in an MD5 string starting with 5822aceca1, you can verify to a certain extent that this is not a randomly generated email by someone trying to spam your system.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜