I am trying to email from c# the problem is when iam formatting in my body doesnt seem to be working there any solution where i can use this break line also i need to create table in mail body. Below is my code where the body1 is my body of email content.
var fromAddress = new MailAddress("something#gmail.com", "Name");
const string fromPassword = "pwd123";
const string subject = "System generated test mail ";
string email = bind_email(analyst);
string body1 = "Hi " + analyst.ToString();
body1 = body1 + "<br/>";
body1 = body1 + " This is system generated test mail for " + Session["TaskAssigned"].ToString();
body1 = body1 + " To be competed before" + Session["Enddate"].ToString() + "<br/><br/> ";
var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage()
{
From = fromAddress,
Subject = subject,
Body = body1,
})
{
message.To.Add(email);
smtp.Send(message);
}
ust put IsBodyHtml =true in MailMessage Settings
mailMessage = new MailMessage()
{
From = new MailAddress(senderAddress),
Subject = subject,
Body = message,
IsBodyHtml = true
};
Use html tags instead of plain text inside message.
Hope this helps.
Your problem is you didn't assign MailMessage.IsBodyHtml to true. You can format your body using a true html.
I used to format my generated email coming from html. First create a test.html:
<html>
<body>
<p>
Hi #analyst#
<br/>
This is a system generated test mail for #task_assigned# to be completed before #enddate#
<br/>
<br/>
</p>
</body>
</html>
Then just replace the needed data.
Here's your code I edited:
var fromAddress = new MailAddress("something#gmail.com", "Name");
const string fromPassword = "pwd123";
const string subject = "System generated test mail ";
string email = bind_email(analyst);
System.IO.StreamReader sr = new System.IO.StreamReader(Server.MapPath("~/App_Data/test.html"));
string body1 = sr.ReadToEnd();
body1 = body1.Replace("#analyst#", analyst.ToString());
body1 = body1.Replace("#task_assigned#", Session["TaskAssigned"].ToString());
body1 = body1.Replace("#enddate#", Session["Enddate"].ToString());
var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage()
{
From = fromAddress,
Subject = subject,
Body = body1,
IsBodyHtml = true
})
{
message.To.Add(email);
smtp.Send(message);
}
Hope this helps
Related
So I am sending an Email in .net like so. I am receiving the email that I am reading from the file with the stream reader but it is returned as HTML code instead of the actual layout. Is there an attribute I am forgetting to set?
public static async Task WelcomeEmail(string emailAdresse)
{
var fromAddress = new MailAddress(Constants.EMAILUSER, "Test");
const string fromPassword = Constants.EMAILPW;
var toAddress = new MailAddress(emailAdresse);
string subject = "Wilkommen";
string body;
var assembly = typeof(Email).GetTypeInfo().Assembly;
string[] resources = assembly.GetManifestResourceNames();
Stream stream = assembly.GetManifestResourceStream("InteriorCircle.Resources.welcome_mail.html");
using (var streamReader = new StreamReader(stream, Encoding.UTF8))
{
body = streamReader.ReadToEnd();
}
var smtp = new SmtpClient
{
Host = Constants.EMAILSERVER,
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var txt = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body
})
{
smtp.Send(txt);
}
}
This question has been asked so many times but I am still struggling to find a working solution.
Please consider the below code:
SmtpClient mailClient = new SmtpClient("outlook.office365.com");
MailMessage msgMail = new MailMessage();
msgMail.From = new MailAddress("validUser#domain.com", "displayName#aliasDomain.com");
mailClient.UseDefaultCredentials = false;
mailClient.Credentials = new NetworkCredential("validUser#domain.com", "password");
mailClient.EnableSsl = true;
MailAddress sendMailTo = new MailAddress("someValidUser#someValidDomain.com", "Mark Twain")
msgMail.To.Add(sendMailTo);
msgMail.Subject = "Test Subject";
msgMail.Body = "Email content";
msgMail.IsBodyHtml = true;
mailClient.Send(msgMail);
msgMail.Dispose();
When someValidUser - the recipient - receives the email, I want it to show the display name : displayName#aliasDomain.com as opposed to the username registered to the validUser#domain.com account.
How can I achieve this?
Try adding the display name to the headers of the message:
msgMail.Headers.Add("Sender", "displayName#aliasDomain.com");
I hope this helps.
If you reset the from address in the MailMessage object you should be able to send from the alias email address. See below for the full code.
var fromAddress = new MailAddress("root#bobloblaw.com", "Root");
var toAddress = new MailAddress("plaintiff#gmail.com", "Plaintiff");
string fromPassword = "password";
string subject = "Your Lawsuit";
string body = "I regret to inform you...";
var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword),
Timeout = 20000
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body,
From = new MailAddress("bob#bobloblaw.com", "Bob Lob")
})
{
smtp.Send(message);
}
This can work if you simply add an Alias to the Office 365 mailbox. Then use the Alias in the From field and the original username+password for the Credentials.
The recipients will see the name+alias you specify in the From field and not the username for the account. Just tried this with PowerShell Send-MailMessage as well as C#.
I am trying to send an email as text to end users mobile, the code is running fine but I can't seems to get the SMS.
Here is my code
public Task SendAsync()
{
var fromAddress = new MailAddress("test#gmail.com", "Authenticator");
var toAddress = new MailAddress("mynumber#sms.sancharnet.in", "User");
const string fromPassword = "mypassword";
const string subject = "subject";
string body = Session["PIN"].ToString();
var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body,
IsBodyHtml = false
})
{
smtp.Send(message);
}
return Task.FromResult(0);
}
Is there something I am missing here ? or is this not how we try to do an Email to text ?
for debugging purposes, I have globally handled all exceptions. Whenever an exception occurs, I silently handle it, and want to send myself an e-mail with the error details, so I can address this issue.
I have two emails, email1#gmail.com, and email2#gmail.com...
I have attempted using this code to send myself an e-mail, but it is not working.
string to = "email1#gmail.com";
string from = "email2#gmail.com";
string subject = "an error ocurred";
string body = e.ToString();
MailMessage message = new MailMessage(from, to, subject, body);
SmtpClient client = new SmtpClient("smtp.google.com");
client.Timeout = 100;
client.Credentials = CredentialCache.DefaultNetworkCredentials;
client.Send(message);
I have tried countless other pieces of code but I have no idea how to do it. Does anyone have a solid solution for this? Thanks a bunch.
This has to work. See more info here: Sending email in .NET through Gmail
using System.Net;
using System.Net.Mail;
//...
var fromAddress = new MailAddress("alextodorov01#abv.bg", "From Name");
var toAddress = new MailAddress("kozichka01#abv.bg", "To Name");
const string fromPassword = "fromPassword";
const string subject = "an error ocurred";
const string body = e.ToString();
var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body
})
{
smtp.Send(message);
}
//...
I was following this: post
And after a few seconds realized that the body is a constant and I can't pass a string to it. Is there any fast way to change this code a bit and get what I need?
public void PostMessage(string body,string subject)
{
var fromAddress = new MailAddress("from#gmail.com", "From Name");
var toAddress = new MailAddress("to#example.com", "To Name");
const string fromPassword = "fromPassword";
var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body,
})
{
smtp.Send(message);
}
}
you can call it like this:
PostMessage("MAH BODY", "SUBJECT");
You remove the const bit...
const string body = "Body";
turns into:
string body = bodyPassedIn; //where bodyPassedIn = is being passed into the method
You don't even need the variable at all:
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = bodyPassedIn // here!
})
{
smtp.Send(message);
}