.Net.Mail new line - c#

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.

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>

Link not showing correctly in email body

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>";

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"

Facebook feed story not posting when user input's nothing

The title pretty much says it all. A few days ago the FB.Feed was working normally. The user could hit the share button and simply post the pre made feed story to his timeline. Now there has to be some sort of user input involved in order for the story to get posted. Even if its just a white space. Has facebook changed something or what ?
here is the feed method :
if (FB.IsLoggedIn)
{
int shareScore = m_score.globalScore;
string shareMsg1 = "SAmple msg";
string shareMsg2 = "Sample msg2";
if (gameOverFlag)
{
shareScore = m_score.scoreForPost;
shareMsg1 = "game overmsg1";
shareMsg2 = "gameover msg2 ";
}
FB.Feed(
link: "test.com",
linkName: shareMsg1 + (DataHolder.holder.levelIndex + 1).ToString() + " FuBar",
linkDescription: "Some text",
linkCaption: shareMsg2 + shareScore + " and " + score.ToString() + " Stars",
picture: "test.com/test.jpg",
callback: LogCallback
);
}
else
{
FB.Login("public_profile,user_friends,email,publish_actions", LoginCallback);
}
I replaced the proper links with the fictional test.com in the given example.

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