c# sending mail pass string to body - c#

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);
}

Related

c#: Xamarin Email Sending returns email as HTML instead of rendering the actual layout

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);
}
}

Email to Text not working

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 ?

C# WPF - How to send an e-mail (to myself)?

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);
}
//...

How can I include multiple recipients in a gmail email message?

I've got this working code to send an email using my gmail account:
public static void SendEmail(string fullName, string toEmail, string HH, string HHEmailAddr)
{
var fromAddress = new MailAddress(FROM_EMAIL, FROM_EMAIL_NAME);
var toAddress = new MailAddress(toEmail, fullName);
var toAddressHH = new MailAddress(HHEmailAddr, HH);
string fromPassword = GMAIL_PASSWORD;
List<String> htmlBody = new List<string>
{
"<html><body>",
. . .
"</body></html>"
};
var body = string.Join("", htmlBody.ToArray());
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 = true
})
{
smtp.Send(message);
}
}
The problem is that I want to send the email to two recipients, not one. I can theoretically add another message to the end of that code like so:
. . .
using (var messageHH = new MailMessage(fromAddress, toAddressHH)
{
Subject = subject,
Body = body,
IsBodyHtml = true
})
{
smtp.Send(messageHH);
}
}
...sending two emails from one code block, but what I really want to do is something like this:
List<MailAddress> recipients = new List<MailAddress>();
recipients.Add(toAddress);
recipients.Add(toAddressHH);
. . .
using (var message = new MailMessage(fromAddress, recipients)
...but there seems to no such overload for MailMessage's constructor. How can I add a second recipient to the sending of an email from gmail? Both as a co-recipient and as a "CC" recipient would be nice to know.
UPDATE
If I do try the suggested:
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body,
To.Add("dplatypus#att.net", "Duckbilled Platypus")
})
...I get:
Invalid initializer member declarator
..and:
The name 'To' does not exist in the current context
I get the same with the following permutation:
To.Add(new MailAddress("dplatypus#att.net", "Duckbilled Platypus"))
Looking at Microsoft's Documentation, you can see that the MailMessage.To property is a MailAddressCollection.
The MailAddressCollection has an Add() method that will append values to the collection.
With that information, you can try something like this:
messageHH.To.Add(new MailAddress("recipient1#domain.com","Recipient1 Name"));
messageHH.To.Add(new MailAddress("recipient2#domain.com","Recipient2 Name"));
messageHH.To.Add(new MailAddress("recipient3#domain.com","Recipient3 Name"));
//etc...
I had to change the "style" of declaration, but this works:
var message = new MailMessage(fromAddress, toAddress);
message.Subject = subject;
message.Body = body;
message.To.Add(new MailAddress("dplatypus#att.net", "Duckbilled Platypus"));
message.To.Add(new MailAddress("duckbill#att.net", "Platypus 2"));
smtp.Send(message);

Formatting Mail body in C# while sending system generated mail

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

Categories