Link not showing correctly in email body - c#

I am trying to send an email that contains a link, but it is not working properly.
Here is what I have:
mail.Body = mail.Body + "<div>" + "<p><a href=" +
"http://serverName/projectName/controllerName/AllSummaries?yesterday=" +
DateTime.Today.AddDays(-1).Date.ToString("MM/dd/yyyy") + ">Click here to go to " +
DateTime.Today.AddDays(-1).Date.ToString("MM/dd/yyyy") + " summaries!</a></p>";
mail.IsBodyHtml = true;
The result of this in the email is:
http://serverName/projectName/controllerName/AllSummaries?yesterday=04/04/2017
Shouldn't it be:
Click here to go to 04/04/2017 summaries!?
What am I missing?
UPDATE
String Interpolation:
var date = DateTime.Today.AddDays(-1).Date.ToString("MM/dd/yyyy");
mail.Body += $"<div><p><a href='http://serverName/projectName/controllerName/AllSummaries?yesterday={date}'>Click here to go to {date} summaries</a></p></div>";
Result:
I am still seeing the full link.. not the Click here to go to {date} summaries
Same Result when using String.Format

Ensure that you are wrapping your href attribute within quotes and have proper closing tags for each of your existing ones.
You may want to consider using the String.Format() method to handle this (or a newer approach like String Interpolation)
// Using String.Format()
mail.Body += String.Format("<div><p><a href='http://serverName/projectName/controllerName/AllSummaries?yesterday={0}'>Click here to go to {0} summaries</a></p></div>", DateTime.Today.AddDays(-1).Date.ToString("MM/dd/yyyy"));
// Using String.Interpolation
var date = DateTime.Today.AddDays(-1).Date.ToString("MM/dd/yyyy");
mail.Body += $"<div><p><a href='http://serverName/projectName/controllerName/AllSummaries?yesterday={date}'>Click here to go to {date} summaries</a></p></div>";

Related

Adding Newline in string for HTML email body

I'm trying to generate an email with some basic formatting based on labels in a FormView. I'm going the route of Process.Start("mailto:... instead of System.Net.Mail so the email opens up in the default email client to give the user a chance to edit To: CC: etc without making a new form just to handle that. I've got the following code-behind to handle an "Email Form" button for emailing the URL of the webform.
protected void fvBF_ItemCommand(object sender, FormViewCommandEventArgs e)
{
if (e.CommandName == "Email")
{
Label lblBFID = (Label)fvBookingForm.FindControl("lblBFID");
Label lblProjectID = (Label)fvBookingForm.FindControl("lblProjectNum");
Label lblProjectName = (Label)fvBookingForm.FindControl("lblProjectName");
Label lblReleaseName = (Label)fvBookingForm.FindControl("lblReleaseName");
Label lblPMName = (Label)fvBookingForm.FindControl("lblPM");
String strReleaseName = String.IsNullOrEmpty(lblReleaseName.Text) ? "[Description]" : lblReleaseName.Text;
String pmFirst = lblPMName.Text.ToString().Split()[0];
String pmLast = lblPMName.Text.ToString().Split()[1];
String strSubject = "BF " + lblBFID.Text + " - " + lblProjectName.Text + " - Release " + strReleaseName;
String strBody = "A Booking Form for Project #"+ lblProjectID.Text + " - " + lblProjectName.Text +
" - Release " + strReleaseName + " has been created or modified. \n\n" + Request.Url.ToString();
Process.Start("mailto:" + pmFirst + "." + pmLast + "#company.com?subject=" +
HttpUtility.HtmlAttributeEncode(strSubject) + "&body=" +
HttpUtility.HtmlAttributeEncode(strBody).Replace("\n", Environment.NewLine));
}
}
However, when the email is generated, there are no line breaks in the body between the "A Booking Form...." sentence and the URL. I've tried putting Environment.NewLine directly in the string.
...created or modified. " + Environment.Newline + Environment.NewLine + Request.Url.ToString();
Which basically gives me the same results. I've tried replacing the \n with <br /> which doesn't add the line break and for some reason, doesn't display the URL either. I can only guess that the problem has to do with the HtmlAttributeEncode() and getting it to parse the NewLine properly. Is there something I'm missing here?
You might want to try .Replace("\r\n", "<br />") on the body after you have done your encoding of the body.
You should probably use StringBuilder here instead of String.
You can then do the following:
StringBuilder builder = new StringBuilder();
builder.AppendLine(string.Format("A Booking Form for Project #{0} - {1}",lblProjectID.Text, lblProjectName.Text));
builder.AppendLine(string.Format(" - Release {0} has been created or modified.", strReleaseName));
builder.AppendLine();
builder.AppendLine(Request.Url.ToString());
String strBody = builder.ToString();
You can also include (char)10 and (char)13 in your string creation. e.g.:
string.Format("First Line{0}{1}Second Line", (char)10, (char)13);
Model.Message = "my message \n second message";
then add this style to string tag style="white-space: pre-line;"
example <h3 style="white-space: pre-line;">#Model.Message</h3>

Converting a string into a link in an email

I am trying to send an email to a supervisor when a work order is created
if(TextBox9.Text=="Quality"&&affectedrows==true)
{
boolisLocal=HttpContext.Current.Request.IsLocal;
if(isLocal==true)
{
System.Net.Mail.MailMessagenn=newSystem.Net.Mail.MailMessage();
nn.From=newSystem.Net.Mail.MailAddress("no_reply_workorder#mover.com");//whosend
nn.To.Add(newSystem.Net.Mail.MailAddress("someone.something#mover.com"));
nn.Subject="WorkOrdersTypeQuality";
HttpFileCollectionuploadFiles=Request.Files;
for(inti=0;i<uploadFiles.Count;i++)
{
HttpPostedFileuserpostedfils=uploadFiles[i];
try
{
if(userpostedfils.ContentLength>0)
{
nn.Attachments.Add(newAttachment(userpostedfils.InputStream,Path.GetFileName(userpostedfils.FileName)));
}
}
catch
{
Labelstatusmessage=(Label)DetailsView1.FindControl("lblmessage");
statusmessage.Text="UploadFailedPleaseContactDeveloper";
}
}
nn.Body="DONOTREPLYTOTHISEMAIL"+"<br><br/>"+"WorkOrderNumber"+": "+
""+TextBox13.Text+""+"<-ClickontheWorkOrderNumberForReport"+"<br><br/>"+"WorkOrderNumber"+
": "+""+TextBox13.Text+""+"<-ClickontheWorkOrderNumberToEnterData"+"<br><br/>"+"Requestor"+
": "+TextBoxRequestor.Text+"<br><br/>"+"Date"+": "+
TextBoxDate.Text+"<br><br/>"+"Department"+": "+
TextBox14.Text+"<br><br/>"+"CompletionDate"+": "+
TextBoxCompletionDate.Text+"<br><br/>"+"MachineDescription"+
": "+TextBoxMachineDescription.Text+"<br><br/>"+
"MachineLocation"+": "+TextBoxMachineLocation.Text+
"<br><br/>"+"WorkRequired"+": "+TextBoxWorkRequired.Text+
"<br><br/>"+"Status"+": "+TextBoxStatus.Text;
nn.IsBodyHtml=true;
System.Net.Mail.SmtpClientclient=newSystem.Net.Mail.SmtpClient();
client.Host=ConfigurationManager.AppSettings["smtpServer"];
captureuseremail();
}
}
in the body of the mail I am sending an link to the workorder that just got created, "http://server01/WorkOrder/QualityReport.aspx?WorkOrderNum="TextBox13.Text+"\">" I am working on four different plants so I need to deploy each project to 4 servers and change the link above to server02, server03, and server04 and there are 3 types of workorders so I was thinking of storing each link into a key in web.config:
<add key ="safetylink" value="http://server01/WorkOrderTool/SafetyReport.aspx?WorkOrderNum="/>
Get the value from web.config and store as string and use it in the email I am not sure how to do that:
string safetylink = ConfigurationManager.AppSettings["safetylink"];
mm.Body = "DO NOT REPLY TO THIS EMAIL" + "<br><br/>" + "WorkOrderNumber" + ": " + "<a href=\"safetylink" + TextBox13.Text + "\">"
but that does not work, by doing the above I hope to simple deploy one web application to 4 servers and go into each ones web.config and change the name of the server instead of find and replace.
Thank You in advance coders
thanks to SamIam anytime you want to sent a string as a hyperlink in the body of an email:
use "<a href=\"" + yourstringname"

.Net.Mail new line

I am using .Net.Mail to send text messages but I am having trouble inserting a new line. I have searched the internet, including StackOverflow, for a method to do this. I have found several but non of them work. I am using StringBuilder to build the body of the message but appending a new line or empty line does cause a new line to be inserted into the message. I have also tried "\n" and several other methods but nothing seems to work. I have added my code below. Does anybody know how I can do this.
Thank you in advance for any help that may be offered.
string cellPhone = reader.GetString(reader.GetOrdinal("CellPhone"));
string suffix = reader.GetString(reader.GetOrdinal("Suffix"));
StringBuilder body = new StringBuilder();
cellPhone = cellPhone.Trim().Replace(" ", "").Replace("-", "").Replace("(", "").Replace(")", "");
if (!suffix.StartsWith("#"))
{
suffix = "#" + suffix;
}
string address = cellPhone + suffix;
reader.Close();
EMail email = new EMail("mail.yyy.com");
email.IsHTML = true;
email.Subject = "Sales Lead from yyy.com";
email.Add_ToAddress(address, false);
body.AppendLine(" ");
body.AppendLine("Name: " + this.tbSalesLeadName2.Text + "EMail: mailto: " + this.tbSalesLeadEmail2.Text);
if (!this.chkSalesLeadEmail2.Checked) //&& (!this.hidCellPhoneProvider.Value.Equals("0", StringComparison.InvariantCultureIgnoreCase)))
{
body.AppendLine("Phone: " + this.tbSalesLeadPhone2.Text);
body.AppendLine("Cell Phone: " + this.tbSalesLeadCellPhone.Text);
}
body.AppendLine(" ");
body.AppendLine(" ");
body.AppendLine("Comments: " + this.tbSalesLeadComments2.Text);
body.AppendLine(" ");
body.AppendLine(" ");
body.AppendLine("***To respond start a new text thread with the cell phone number listed above");
email.Body = body.ToString();
email.From = "xxx#yyy.com";
email.Send_Mail();
email.IsHTML = true;
You say that your body is in HTML format, but it isn't.
You have two options to fix that:
Set IsHTML to false, and your line breaks should work.
Format your body as real HTML, i.e., use HtmlEncode for your data and <br> for your line breaks.
As you are using email.IsHTML = true;, You should be able to put tag in your string builder object.. The code would look like,
body.AppendLine(" <br/>");
body.AppendLine(" <br/>");
body.AppendLine("Comments: " + this.tbSalesLeadComments2.Text + "<br/>");
body.AppendLine(" <br/>");
body.AppendLine(" <br/>");
body.AppendLine("***To respond start a new text thread with the cell phone number listed above<br/>");
email.Body = body.ToString();
You've specified that the email is HTML. New lines are ignored in HTML.
To actually render a line break you need to use <br /> or some other equivalent.
If you don't actually have any HTML to render, then simply specify that the email is not an HTML email and new lines will be rendered as new lines.
Thank you for your advice. Please ignore my earlier comment. Your suggestion did work I just needed to add "\n" where I wanted a new line.
I really appreciate your help.

Sending email from Windows Phone 7 application

In my Windows Phone 7 application I want to send an e-mail where the message body should contain the data from my previous page in my application. Previously I just integrated the e-mail facility like this:
private void Image_Email(object sender, RoutedEventArgs e)
{
EmailComposeTask emailComposeTask = new EmailComposeTask();
emailComposeTask.Subject = "message subject";
emailComposeTask.Body = "message body";
emailComposeTask.To = "recipient#example.com";
emailComposeTask.Cc = "cc#example.com";
emailComposeTask.Bcc = "bcc#example.com";
emailComposeTask.Show();
}
But I was not able to test this in my emulator. Now in the body part I want my data from the previous page. So how to do this?
Updated code:
if (this.NavigationContext.QueryString.ContainsKey("Date_Start"))
{
//if it is available, get parameter value
date = NavigationContext.QueryString["Date_Start"];
datee.Text = date;
}
if (this.NavigationContext.QueryString.ContainsKey("News_Title"))
{
//if it is available, get parameter value
ntitle = NavigationContext.QueryString["News_Title"];
title.Text = ntitle;
}
if (this.NavigationContext.QueryString.ContainsKey("News_Description"))
{
ndes = NavigationContext.QueryString["News_Description"];
description.Text = ndes;
}
Now what do I write in the message body? I am not able to test it as I do not have a device.
Can i pass in the values like this:
emailComposeTask.Body = "title, ndes, date";
I think the code is correct. if you want to pass body from previous page, you need to pass it when page navigation. and set emailComposeTask.Body = yourPassedValue.
like this:
var date;
var title;
var ndes;
emailComposeTask.Body = title + "," + ndes + "," + date;
You need to edit your message body line like this:
emailComposeTask.Body = title+" "+ ndes+" "+ date;
You cannot test sending mail in the emulator since you don't have a proper email account set up. Nor you could set it up in the emulator.
The Body property is a string so you can put inside pretty much anything you want.
Using the following code will only generate a string containing exactly that:
emailComposeTask.Body = "title, ndes, date";
So the result mail will have a body containing "title, ndes, date" as a text. If you want to replace the title with the value from the local variable named title, you need to use the following syntax:
emailComposeTask.Body = string.Format("{0}, {1}, {2}", title, nodes, date);

Emailing in C# why isn't the information sending correctly?

I have a form that the users for my website will fill out. Once they click submit the information they filled out is supposed to be sent to my email. For some reason the information they fill out is not being sent. I am posting the code below. For a while it was working, but I must have changed something simple when I was trying to get other parts of the code to work and now I can't figure it out.
protected void Submit_Click1(object sender, EventArgs e)
{
try
{
string strMessage = "Bug Name: " + txtBugName.Text.Trim()
+ "<br/>" + "Module Name: " + ddlModule.SelectedValue
+ "<br/>" + "Page Name: " + ddlPage.SelectedValue
+ "<br/>" + "Description: " + txtComments.Text.Trim()
+ "<br/>" + "Email is" + " " + txtemail.Text.Trim()
+ "<br/>" + "The request was sent at" +
SendMessage(ConfigurationManager.AppSettings["EmailAddrTo"],
ConfigurationManager.AppSettings["EmailAddrFrom"],
txtBugName.Text.Trim(),
strMessage, "", "");
}
catch
{
}
}
As you can see I have this code pulling the information they fill out and then also I am formatting it for the email that will be sent to myself. But now I just get a blank email or actually the subject line will have something, but the email will be blank.
Also at the bottom of the code you can see i put this email was sent at + dandt I am trying to have the date and time sent in that part is there any code I can just put there to send the date and time the email was sent at? Like is there any syntax specifically just for date and time?
Thank you all
You're swallowing the exception. Remove the try/catch to see any errors that may occur as you change your code; only apply exception handling after testing.
Verify your method signature (params) here because that's where the mistake lies:
UPDATE:
You need to pass the parameters in the following order (read the link below):
public void Send(
string from,
string to,
string subject,
string body
)
SmtpClient.Send Method (String, String, String, String)
Your wrote the following, with extra strings snipped:
string strMessage = "..." + ... + SendMessage(..., strMessage, ...);
You're calling SendMessage() before assigning strMessage.

Categories

Resources