MailMessage c# - How to make it HTML and add images etc? - c#

string to = "email#hotmail.co.uk";
string body = "Test";
SmtpClient SMTPServer = new SmtpClient("127.0.0.1");
MailMessage mailObj = new MailMessage(urEmail, to, subject, body);
SMTPServer.Send(mailObj);
This is how i am currently sending a test email.
How do i make this html and be able to make the email sent out look better by adding images etc?
Thanks

On the MailMessage set the property IsBodyHtml to true.
string to = "email#hotmail.co.uk";
string body = "Test";
SmtpClient SMTPServer = new SmtpClient("127.0.0.1");
MailMessage mailObj = new MailMessage(urEmail, to, subject, body);
mailObj.IsBodyHtml = true; // This line
SMTPServer.Send(mailObj);

You have to set mailObj .IsBodyHtml = true;

you can use the following idea to take an ASPX page and render it to a string:
StringWriter writer = new StringWriter();
Server.Execute("Login.aspx", writer);
string html = writer.ToString();
If you then set the MailMessage.IsBodyHtml to true you can send an HTML message. If you want to use images and other stuff make sure that the receiver of the email can access those images.

There are two ways of doing this:
Embed the images inside your mail. (see this question)
Link to the images through your src attribute of the image tag inside your HTML mail. This needs you to host the image files somewhere on a webserver which the recipients can access.
In both cases you will need to send the mail with a html body.
mailObj.IsBodyHtml = true;

For your question about adding Image to your email, if your asking for embedding then you can use Anchor tags of HTML or else attach the image file to the mail by using mailObj.Attachments.Add() method i guess.
But the best way is to send the images as attachments because some firewalls just blocks the embedded images but allows attachments. So that way your better safer in delivering the content, though its not a perfect way.

Related

Convert from .eml to .msg in C# .NET

I want my users to fill out a simple form with fields like From, To, Subject, Body and Attachments. When they are done they should click on a button which lets them download a .msg file, so that they can edit it furthermore in outlook and send it.
All the converters APIs I've found for .NET are commercial (and quite pricy).
Here's my code:
using System.Net.Mail;
protected void lbOpenOutlook_Click(object sender, EventArgs e)
{
CreateEmail();
}
internal void CreateEmail()
{
// Create message
MailMessage message = new MailMessage();
// subject
message.Subject = "email subject";
// body content
message.Body = "email message.";
// sender
message.From = new MailAddress("sender#gmail.com");
// send this mail to
message.To.Add("test1#gmail.com");
// cc list
message.CC.Add("ccuser1#gmail.com");
// Create the SMTP Client object
SmtpClient smtpClient = new SmtpClient();
// store in directory
smtpClient.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;
// path of the pickup folder
smtpClient.PickupDirectoryLocation = Server.MapPath("~/Emails/");
// deliver email
smtpClient.Send(message);
}
This generates a .eml file..how could I convert it to a .msg whitout using a commercial API?
Also, I don't want to use Microsoft.Office.Interop.Outlook namespace because it works fine on the client but it's not supported on the server and my application is running under IIS.
Note: Summary of comments on the answer.
Whilst Outlook 2007 does not support opening .eml files, Outlook 2010+ can open .eml files correctly.
To convert EML to MSG you can use Aspose.Email for .Net.
This is a third-party library, which can provide you with a bunch of useful functions for working with email.
The Email API can be used for basic email management features such as converting, message content attachment manipulation and editing, and for its advanced features such as management of the message storage files, sending & receiving emails via several protocols including POP3, IMAP & SMTP.
You can do it programmatically. For example, you can use the following code:
//Initialize .EML file
using (MailMessage eml = new MailMessage("test#from.to", "test#to.to", "template subject", "Template body"))
{
string oftEmlFileName = "EmlAsMSG_out.msg";
MsgSaveOptions options = SaveOptions.DefaultMsg;
//Save created .MSG file
options.SaveAsTemplate = true;
eml.Save(oftEmlFileName, options);
}
I think this approach can be useful for you.
I am a Developer Evangelist at Aspose.

Mail an asp.net page from c#

I want to mail an asp.net page from c#. well it is questioned widely and I saw bulk of questions like that on stackoverflow too. But I have few problems that I'm not getting the solutions
What Itried
many example. below are few
using (System.IO.StreamReader reader = System.IO.File.OpenText( Server.MapPath("~/About.aspx"))) // Path to your
{ // HTML file
string fromAddress = "from#yahoo.com";
string toAddress = "to#yahoo.com";
System.Net.Mail.MailMessage myMail = new System.Net.Mail.MailMessage(fromAddress, toAddress);
myMail.Subject = "HTML Message";
myMail.IsBodyHtml = true;
myMail.Body = reader.ReadToEnd(); // Load the content from your file...
//...
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.mail.yahoo.com");
smtp.Credentials = new System.Net.NetworkCredential("from#yahoo.com", "password");
smtp.Send(myMail);
}
But this is giving me this output.
Well you noticed that it is without css. Can I mail an entire asp.net page or do I need to write my code in c# with inline css? Or do I need to create a control with a patern and send it?
You are trying to send unprocessed aspx file. This cannot be successful. You need to process this page (I dont remember what method to use), and dont forget about inline css. So bassicaly you need a new page. And if you need a new page, you can do it with pure html, not in asp.

What component to use to send mail with any kind of body?

I made a mail sender in C# but I'm having trouble with the body of the mail. It only sends the texts without pictures, links and other elements. Not to mention, I used RichTextBox for that purpose.
So now my question is: what component to use to send mail with pictures, links and else?
I also enabled IsBodyHtml to true.
What I want to do is to copy the pictures, links and texts (with different colors and size) from Microsoft Word and paste it to control, and when user gets mail he gets the exact same body and layout as I send them.
You'll need to send it as html.
Save your word doc as html and use that.
For the images in your document you can either point to them via their absolute urls (publicly available via the internet).
Or you could use the LinkedResource class.
With the LinkedResource class your images have to specify a cid in the source.
var inlineLogo = new LinkedResource("path/myfile.png");
inlineLogo.ContentId = Guid.NewGuid().ToString();
var imageHtmlFragment = string.Format("<img alt='My Logo' src='cid:{0}' style='width: 250px;height: 60px;'/>",inlineLogo.ContentId);
var newMail = new MailMessage();
var view = AlternateView.CreateAlternateViewFromString(imageHtmlFragment, null, "text/html");
view.LinkedResources.Add(inlineLogo);
newMail.AlternateViews.Add(view);

Generate HTML file at runtime and send as email attachment

I have a project requirement that we need to attach an HTML formatted log sheet to an email that gets sent to a user. I don't want the log sheet to be part of the body. I'd rather not use HTMLTextWriter or StringBuilder because the log sheet is quite complex.
Is there another method that I'm not mentioning or a tool that would make this easier?
Note: I've worked with the MailDefinition class and created a template but I haven't found a way to make this an attachment if that's even possible.
Since you're using WebForms, I would recommend rendering your log sheet in a Control as a string, and then attaching that to a MailMessage.
The rendering part would look a bit like this:
public static string GetRenderedHtml(this Control control)
{
StringBuilder sbHtml = new StringBuilder();
using (StringWriter stringWriter = new StringWriter(sbHtml))
using (HtmlTextWriter textWriter = new HtmlTextWriter(stringWriter))
{
control.RenderControl(textWriter);
}
return sbHtml.ToString();
}
If you have editable controls (TextBox, DropDownList, etc), you'll need to replace them with Labels or Literals before calling GetRenderedHtml(). See this blog post for a complete example.
Here's the MSDN example for attachments:
// Specify the file to be attached and sent.
// This example assumes that a file named Data.xls exists in the
// current working directory.
string file = "data.xls";
// Create a message and set up the recipients.
MailMessage message = new MailMessage(
"jane#contoso.com",
"ben#contoso.com",
"Quarterly data report.",
"See the attached spreadsheet.");
// Create the file attachment for this e-mail message.
Attachment data = new Attachment(file, MediaTypeNames.Application.Octet);
// Add time stamp information for the file.
ContentDisposition disposition = data.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(file);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
// Add the file attachment to this e-mail message.
message.Attachments.Add(data);
You can use Razor for email templates. RazorEngine or MvcMailer might do the job for you
Use Razor views as email templates inside a Web Forms app
Razor views as email templates
http://www.codeproject.com/Articles/145629/Announcing-MvcMailer-Send-Emails-Using-ASP-NET-MVC
http://kazimanzurrashid.com/posts/use-razor-for-email-template-outside-asp-dot-net-mvc

Sending Mail with embeded image in ASP.NET

I want to send a mail with embeded image in ASP.NET
How can i do that?
Regards
Soner
There are generally two ways of doing this, whichever is preferred is up to you.
To literally "embed" the image in the email message itself, you'll want to add it as a Linked Resource and reference the attached resource in the email's HTML.
Alternatively, and more simply, if the image is hosted in a public location then you can just reference that location in the HTML of the email.
Based on the question, it sounds like you are preferring the former approach, but the latter is available as well.
MailAddress sendFrom = new MailAddress(txtFrom.Text);
MailAddress sendTo = new MailAddress(txtTo.Text);
MailMessage myMessage = new MailMessage(sendFrom, sendTo);
MyMessage.Subject = txtSubject.Text;
MyMessage.Body = txtBody.Text;
Attachment attachFile = new Attachment(txtAttachmentPath.Text);
MyMessage.Attachments.Add(attachFile);
SmtpClient emailClient = new SmtpClient(txtSMTPServer.Text);
emailClient.Send(myMessage);
I believe you can either attach the files and refer them, or alternatively, like in regular HTML, embed them encoded in Base64.
You can go through this link
http://www.dotnetspider.com/resources/41465-Send-Formatted-outlook-email-from-NET-C.aspx
Sample project is also attached.
It shows how to put the link of the image in the application in the html template and send emails.

Categories

Resources