Tom
Tom

Reputation: 135

Send a hyperlink within email

I have a variable name that holds a hyperlink; I would like to send the hyperlink within an email.

I can send the email ok, but the hyperlink appears as text i.e.[http://www.google.com]Click here

using (MailMessage mailMessage = new MailMessage())
        {
            mailMessage.From = new MailAddress(ConfigurationManager.AppSettings["UserName"], "FileTransfer");
            mailMessage.Subject = "FileTransfer";
            var body = new StringBuilder();
            body.AppendFormat("<html><head></head><body> Hello World" + "<br />" +  "<a href='{0}'>Click here</a></body></html>", link);
            mailMessage.IsBodyHtml = true;
            mailMessage.Body = body.ToString();                   
            mailMessage.To.Add(new MailAddress(toEmail));
            SmtpClient smtp = new SmtpClient();
            smtp.Host = ConfigurationManager.AppSettings["Host"];
            smtp.EnableSsl = Convert.ToBoolean(ConfigurationManager.AppSettings["EnableSsl"]);
            System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
            NetworkCred.UserName = ConfigurationManager.AppSettings["UserName"];
            NetworkCred.Password = ConfigurationManager.AppSettings["Password"];
            smtp.UseDefaultCredentials = true;
            smtp.Credentials = NetworkCred;
            smtp.Port = int.Parse(ConfigurationManager.AppSettings["Port"]);
            smtp.Send(mailMessage);
        }

Upvotes: 0

Views: 4602

Answers (2)

Abstract
Abstract

Reputation: 1005

According to https://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.alternateviews(v=vs.110).aspx

It seems like you have to set the content type and create an alternate view. Or if you don't want to have a plaintext version, set the default view to text/html

// Create a message and set up the recipients.
    MailMessage message = new MailMessage(
        "[email protected]",
        recipients,
        "This e-mail message has multiple views.",
        "This is some plain text.");

    // Construct the alternate body as HTML.
    string body = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";
    body += "<HTML><HEAD><META http-equiv=Content-Type content=\"text/html; charset=iso-8859-1\">";
    body += "</HEAD><BODY><DIV><FONT face=Arial color=#ff0000 size=2>this is some HTML text";
    body += "</FONT></DIV></BODY></HTML>";

    ContentType mimeType = new System.Net.Mime.ContentType("text/html");
    // Add the alternate body to the message.

    AlternateView alternate = AlternateView.CreateAlternateViewFromString(body, mimeType);
    message.AlternateViews.Add(alternate);

Some email provider software won't be capable of displaying text/html. Whether this is a protective measure or just lack of support, I believe this would be the best solution since it compensates for both cases.

Upvotes: 1

Jacob Levinson
Jacob Levinson

Reputation: 169

Try replacing this...

body.AppendFormat("<html><head></head><body> Hello World" + "<br />" +  "<a href='{0}'>Click here</a></body></html>", link);

with this

body.Append("<html><head></head><body> Hello World" + "<br />" + "<a href=" + link + ">Click here</a></body></html>");

Upvotes: 1

Related Questions