简体   繁体   中英

user replying to email messages. How can you get data from users email?

I have difficulties implementing the following scenario.

Let's say you have a web site with ability to send and recieve messages between users. User recieves an email with notification he has a new message on the software system (doesn't matter in what it is implemented). He can respond to this message by sending a reply via email or by logging into the site and replying to the 'message' using the site.

In case of the first approach if user simply replies to the email notification, how can you (as a developer) know what 'message' (ID) is the reply for? I'm thinking the info would be stored in the MIME extensions. Are the MIME extensions transfered to the reply of the message? If yes than the solution could be to see the data of the original message notification for wich the user replyes to. Any ideas? Thank you

The only “reliable” way would be to encode that information in the sender's address to which the user replies; you could also put it into subject or body of the message, and “hope” that the user doesn't tamper with it. There is an “in reply to (message-id)” header, but a lot of existing eMail clients don't set the header properly.

The usual mechanism is something like this: create an eMail alias prefix, and the append a message-id-code fragment to the end; for example, if this was for a purchase order confirmation, you could create an eMail alias handling addresses of the form po-*@example.com , where * is the unique message ID. Then, when you send your message out, you'd put the appropriate address in both the From: and Reply To: headers. EG:

From: "Purchase Order Confirmation (#1234)" <po-1234@example.com>
To: "John Doe" <jdoe@example.com>
Reply-To: "Purchase Order Confirmation (#1234)" <po-1234@example.com>
Subject: Confirm your order (#1234)

Depending upon your mail server, you should be able to define a “separator” character (typically - or + ) that is used to split up the parts of the “local part” (left of @ ) of the eMail address; there is typically then another mechanism to map a prefix to a script to handle all addresses of a certain form. The script interface is often very much like CGI on the web, sending in some environment variables and piping the message itself in on the standard input. If your app is primarily web-based, you might find it more “comfortable” to gather the incoming eMail body, and POST it to a private (perhaps http://[::1]/getMailReply ) handler. This may help you reuse existing code more readily.

We have set up a catch-all email address on our server - for example catch-all@myserver.com . When we send emails to users, we encode the message id and any other meta information we may need in the from address. You can obfuscate this or not, depending on what your needs are. So, for example, if the user has a new message in the system whose ID is 100 , the from address of the email we send to the user would be something like reply-to-message-100@myserver.com . Make sure that whatever format you use for the from address would never generate a real email address on your mail server.

So, when the user responds to this message, it will get sent to the catch-all inbox you have set up. From here, you have a number of choices to make on how you process this email. In times past, we wrote a little scheduled service that would run every few minutes and check this inbox for new emails, process them as you like (insert into db, send more emails, whatever), and delete the message since you're done processing it. This is fragile since email clients all have slightly different ways of sending emails and it becomes difficult to parse the variety of client messages out there.

The second way we've done it is by integrating with http://postmarkapp.com/ - which has an incoming email api that should go public soon (we got in on the beta). You'd set everything up the same way only make your server's catch-all address forward to the postmark incoming address you'll set up with Postmark, and then Postmark does the message processing and calls a webhook you also set up to do what you like with the object received.

I highly recommend Postmark, but even the homespun method worked effectively, for the most part.

-M

只是对上一个答案的后续操作,邮戳入站现已上线并公开发布http://postmarkapp.com/inbound对于发送到您的特殊格式入站电子邮件地址的每封电子邮件,您将收到一个JSON格式的Web hook API调用,其中包含所有为您排序的电子邮件组件,标题,附件。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM