Forward an email
If you want to share an email with other parties, forwarding is what you need to do.
- Forwarding an email by inserting the original inline in your forward
- Forwarding an email as a attachment
In this article we’ll describe the first option, in which you insert the original inline in your forward and copy all attachments. You can use Mail.dll to forward both HTML and plain-text emails.
ForwardBuilder class allows you to specify custom HTML and plain-text templates for the forward. Mail.dll will parse the HTML code, extract body part, and build-in template engine will do the rest.
The next great thing is that plain-text version of the email is always generated automatically.
In our example we’ll use Mail.dll .NET IMAP component to download first message from an IMAP server. Then we’ll create new message by using ForwardBuilder class. The sample also shows how to add additional attachments to the forwarded email. Finally we’ll use Mail.dll SMTP client to send this message.
// C# IMail original = GetFirstMessage(); ForwardBuilder forwardBuilder = original.Forward(); // You can specify your own, custom, body and subject templates: forwardBuilder.HtmlReplyTemplate = @"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd""> <html> <head> <meta http-equiv=""Content-Type"" content=""text/html; charset=UTF-8"" /> <title>[Subject]</title> </head> <body> [Html] <br /><br /> On [Original.Date] [Original.Sender.Name] wrote: <blockquote style=""margin-left: 1em; padding-left: 1em; border-left: 1px #ccc solid;""> [QuoteHtml] </blockquote> </body> </html>"; forwardBuilder.SubjectReplyTemplate = "Fw: [Original.Subject]"; forwardBuilder.Html = "Tom, <br/><br/>please resolve this."; MailBuilder builder = forwardBuilder.Forward(new MailBox("bob@example.org", "Bob")); builder.To.Add(new MailBox("tom@example.org", "Tom")); // You can add attachments to forwarded email //builder.AddAttachment("report.csv"); IMail forward = builder.Create(); using (Smtp smtp = new Smtp()) { smtp.Connect("smtp.example.org"); // or ConnectSSL smtp.UseBestLogin("user", "password"); smtp.SendMessage(forward); smtp.Close(); } static IMail GetFirstMessage() { IMail email; using (Imap imap = new Imap()) { imap.Connect("imap.example.com"); // or ConnectSSL if you want to use SSL imap.UseBestLogin("user", "password"); List<long> uids = imap.GetAll(); if (uids.Count == 0) throw new Exception("There are no messages"); var eml = imap.GetMessageByUID(uids[0]); email = new MailBuilder().CreateFromEml(eml); imap.Close(); } return email; }
' VB.NET Dim original As IMail = GetFirstMessage() Dim forwardBuilder As ForwardBuilder = original.Forward() ' You can specify your own, custom, body and subject templates: forwardBuilder.HtmlReplyTemplate = _ "<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"">" + _ " <html>" + _ " <head>" + _ " <meta http-equiv=""Content-Type"" content=""text/html; charset=UTF-8"" />" + _ " <title>[Subject]</title>" + _ " </head>" + _ " <body>" + _ " [Html]" + _ " <br /><br />" + _ " On [Original.Date] [Original.Sender.Name] wrote:" + _ " <blockquote style=""margin-left: 1em; padding-left: 1em; border-left: 1px #ccc solid;"">" + _ " [QuoteHtml]" + _ " </blockquote>" + _ " </body>" + _ " </html>" forwardBuilder.SubjectReplyTemplate = "Fw: [Original.Subject]" forwardBuilder.Html = "Tom, <br/><br/>please resolve this." Dim builder As MailBuilder = forwardBuilder.Forward( _ New MailBox("bob@example.org", "Bob")) builder.[To].Add(New MailBox("tom@example.org", "Tom")) ' You can add attachments to forwarded email 'builder.AddAttachment("report.csv") Dim forward As IMail = builder.Create() Using smtp As New Smtp() smtp.Connect("smtp.example.org") smtp.UseBestLogin("user", "password") ' or ConnectSSL smtp.SendMessage(forward) smtp.Close() End Using Private Shared Function GetFirstMessage() As IMail Dim email As IMail Using imap As New Imap() imap.Connect("imap.example.com") ' or ConnectSSL if you want to use SSL imap.UseBestLogin("user", "password") Dim uids As List(Of Long) = imap.GetAll() If uids.Count = 0 Then Throw New Exception("There are no messages") End If Dim eml = imap.GetMessageByUID(uids(0)) email = New MailBuilder().CreateFromEml(eml) imap.Close() End Using Return email End Function
In the forward templates (HtmlForwardTemplate, TextForwardTemplate, SubjectForwardTemplate) you have access to following fields:
- string Subject – subject of the forward (e.g. [Subject])
- string Text – plain text of the forward (e.g. [Test])
- string Html – html of the forward (e.g. [Html])
- string QuoteText – original text quoted using ‘>’ chars (e.g. [QuoteText])
- string QuoteHtml – body contents of original html or original text converted to html (e.g. [QuoteHtml])
- IMail Original – original email you are forwarding and all its properties (e.g. [Original.Subject], [Original.Sender.Address])
Please note that you can use any template and data to generate actual forward email (ForwardBuilder.Html and ForwardBuilder.Text).
If you want as little change as possible made to the original email you can use following code:
// C# IMail original = GetFirstMessage(); original.To.Clear(); original.To.Add(new MailBox("forward@example.org")); using (Smtp smtp = new Smtp()) { smtp.Connect("smtp.example.org"); // or ConnectSSL smtp.UseBestLogin("user", "password"); smtp.SendMessage(original); smtp.Close(); }
' VB.NET version Dim original As IMail = GetFirstMessage() original.[To].Clear() original.[To].Add(New MailBox("forward@example.org")) Using smtp As New Smtp() smtp.Connect("smtp.example.org") smtp.UseBestLogin("user", "password") ' or ConnectSSL smtp.SendMessage(original) smtp.Close() End Using
You can also forward an email as a attachment.
March 27th, 2016 at 07:21
Can change the subject when Forward a email?
Best regards,
Waldemar Sdzuj
March 28th, 2016 at 11:32
@Waldemar,
Yes you can.
You can set a different template being used to generate the subject:
-or- you can directly change the subject of the new email:
May 23rd, 2016 at 13:20
[…] Forwarding an email by inserting the original inline in your forward […]