How do I download the email I just sent using Graph API? - c#

I am using GraphAPI for sending email. I have a situation where I need to Save a copy of the email sent. I can retrieve the Messages using graph api. How do I identify the email I just sent? When I use the SendEmail endpoint of the Graph api, I get a 200 OK response. How do I identify the email I just sent so I can download that email?
I have tried a number of solutions, adding custom Identifiers and filtering it but none of them worked.

I haven't tried this, but this approach seems it would work: https://learn.microsoft.com/en-us/graph/outlook-immutable-id#immutable-id-with-sending-mail.
Create the message as a draft with Prefer: IdType="ImmutableId" header
Save the returned id
Send the draft
Note that email sending is asynchronous so you might not be able to download the sent email right away. It could take some time to be available.

Related

how to generate "reply to" link from "mail to" string in c#

I want reply to link similar to mail to.
I generate email string from c# code and want to put reply to link which replies to current email. Can anyone help to put reply to link in c# code?
for example: to generate mailto link we use mailto:testemail#gmail.com?subject=testsubject.
By clicking on this link, we are able to mail to particular emailid.
Similarly, I want reply to link by clicking on it, user is able to generate email as reply to current email.
Assuming you are showing your user an existing email which they are trying to reply to ? There is no HTML tag that does this.
You haven't said where this email is coming from, but I assume you are showing your user an email or other communication that is generated in your system. If this is the case they you will need to code this up just like any other POST link and pass in the "id" of the email you want to reply to - the result of the POST should be a redirect to an email-like page where you have programmatically filled out much of the email content by quoting it from the original email.
Once the user has filled out this Reply mail page, another HTTP POST back to your server and you can use the .net SMTP capability to construct an actual email and send it from your server. Note that there is no capability of sending such and email from your users mail account, or using their mail client.

how to check whether a user opened the mail we sent

Using Amazon AWS we can know how many mails are delivered,how many bounced and how many were rejected.But how to check whether user has opened our mail and clicked on the link we have given in our mail.And using getsendstatistics() method of AWS we can only get the number of bounces,rejects and delivered mails.Is there any method which gives us the details whether a user opened his mail or not.
There is no reliable way to do this.
You could make a webserver that serves an image (just a white pixel would do) and have it report if the image is loaded or not, perhaps even include a querystring to identify the user loading the image. The problem with this is that any modern mailclient will not load images in the email by default.
The mail protocol allows for two different methods (mail header entries) to request a "receipt" when the receiver opened the mail. If activated you will get a mail back which contains the receipt along with time and mail client infomation.
It is completely optional if the receiving client will honor the request however, so these methods may help but are not reliable at all.
From wikipedia article about Email tracking
The technical term for these is "MDN - Message Disposition
Notifications", and they are requested by inserting one or more of the
following lines into the email headers: "X-Confirm-Reading-To:";
"Disposition-Notification-To:"; or "Return-Receipt-To:".

SendGrid get email contents. C#

I am using send grid from my MVC application but I would like to get the HTML of the email sent via the system so that I can store a record of it (as its sent) in a database for record. Does anyone know how this could be done. Thanks.
You can use the BCC (SMTPAPI or WebAPI) functionality to copy an email to SendGrid's Inbound Parse. Then, you can grab the content, headers, etc and save to your database.
Just a heads up, this will use one credit for the send and one credit for the BCC.

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
Just a followup to the previous answer, Postmark Inbound is now live and public http://postmarkapp.com/inbound For each email sent to your specially formatted inbound email address, you'll receive a JSON formatted web hook API call with all the email components, headers, attachments sorted for you.

How to send an email with this IMAP library

I am using this library IMAPX to get emails.
I also need to send emails but cannot figure out how.
I tried using the example code:
client.Folders["INBOX"].AppendMessage(msg)
but receive an error that AppendMessage requires two arguments and I cannot figure out what the second argument should be.
Is it possible to send an email with this library and if so how?
According to Reflector, it looks like the second parameter should be a string giving the flags for the new message; it looks like the ImapFlags class gives a list of available flags.
If you want more background in IMAP, then you should read its RFC.
However, the IMAP protocol is NOT used to send mail, it's used to read or retrieve mail that's in a mailbox on a server. You can use it to add messages to your own mailbox (as you're trying to do here), but that isn't what most people mean when they talk about sending email... SMTP is the standard way to send email.

Categories

Resources