"noname" attachment shown when email sent has image - c#

HELP! So i have this issue wherein theres a "noname" attachment when sending emails with pictures as seen below
Now, i want this to remove since it is not part of my emailer.
heres is my code below
public static bool SendEmailNotification(List<string> toList, List<string> ccList, string subject, string body)
{
bool isSent = true;
try
{
var mail = new MailMessage();
var smtpClient = new SmtpClient(Constants.SMTP.SMTPClient);
var alternateView = AlternateView.CreateAlternateViewFromString(body, null, Constants.SMTP.Format);
mail.From = new MailAddress(Constants.SMTP.EmailAddress);
if (toList != null && toList.Any())
{
foreach (var email in toList)
{
mail.To.Add(email);
}
if (ccList != null && ccList.Any())
{
foreach (var email in ccList)
{
mail.CC.Add(email);
}
}
mail.Subject = subject;
mail.IsBodyHtml = true;
mail.AlternateViews.Add(alternateView);
smtpClient.Credentials = new NetworkCredential(Constants.SMTP.EmailAddress,
Constants.SMTP.EmailPassword, Constants.SMTP.Email);
smtpClient.Send(mail);
}
else
{
isSent = false;
}
}
catch
{
isSent = false;
}
return isSent;
}

The attachment is actually your image payload in binary. It's set to "noname". Reason being is certain parameters aren't set properly. In this case, to do it properly refer to https://brutaldev.com/post/sending-html-e-mail-with-embedded-images-(the-correct-way)

if( attachementFile!=null)
{
Attachment attachment = new Attachment(attachementFile, MediaTypeNames.Application.Octet);
ContentDisposition disposition = attachment.ContentDisposition;
disposition.CreationDate = File.GetCreationTime(attachementFile);
disposition.ModificationDate = File.GetLastWriteTime(attachementFile);
disposition.ReadDate = File.GetLastAccessTime(attachementFile);
disposition.FileName = Path.GetFileName(attachementFile);
disposition.Size = new FileInfo(attachementFile).Length;
disposition.DispositionType = DispositionTypeNames.Attachment;
return attachment;
}

Here's the code from the link in #kendolew's answer with an example on how to properly include an attachment:
public static void SendMessageWithEmbeddedImages()
{
string htmlMessage = #"<html>
<body>
<img src='cid:EmbeddedContent_1' />
</body>
</html>";
SmtpClient client = new SmtpClient("mail.server.com");
MailMessage msg = new MailMessage("noreply#deventerprise.net",
"someone#deventerprise.net");
// Create the HTML view
AlternateView htmlView = AlternateView.CreateAlternateViewFromString(
htmlMessage,
Encoding.UTF8,
MediaTypeNames.Text.Html);
// Create a plain text message for client that don't support HTML
AlternateView plainView = AlternateView.CreateAlternateViewFromString(
Regex.Replace(htmlMessage,
"<[^>]+?>",
string.Empty),
Encoding.UTF8,
MediaTypeNames.Text.Plain);
string mediaType = MediaTypeNames.Image.Jpeg;
LinkedResource img = new LinkedResource(#"C:\Images\MyImage.jpg", mediaType);
// Make sure you set all these values!!!
img.ContentId = "EmbeddedContent_1";
img.ContentType.MediaType = mediaType;
img.TransferEncoding = TransferEncoding.Base64;
img.ContentType.Name = img.ContentId;
img.ContentLink = new Uri("cid:" + img.ContentId);
htmlView.LinkedResources.Add(img);
//////////////////////////////////////////////////////////////
msg.AlternateViews.Add(plainView);
msg.AlternateViews.Add(htmlView);
msg.IsBodyHtml = true;
msg.Subject = "Some subject";
client.Send(msg);
}

Related

Break apart email attachment if zip is too big to email

So I can send up to 25MB in an email attachment. I am looking for away to check how big the file size is and if its too big break it apart and send in two emails. (Or if there is a better way to do it)?
Here is where I am sending the email with the attachment:
public static void SendEmail(List<string> recipients, MemoryStream output, string from, string subject, string htmlMessage, bool isHtml = true)
{
var host = ConfigurationManager.AppSettings["emailHost"];
var emailFrom = ConfigurationManager.AppSettings["FromEmail"];
try
{
MailMessage mail = new MailMessage();
mail.From = new MailAddress(from);
foreach (var r in recipients)
{
mail.To.Add(r);
}
mail.Subject = subject;
mail.IsBodyHtml = isHtml;
mail.Body = htmlMessage;
//string result = System.Text.Encoding.UTF8.GetString(output.ToArray());
SmtpClient SmtpServer = new SmtpClient(host);
SmtpServer.Port = 25;
Attachment myZip = new Attachment(output, "ClientStatements.zip");
mail.Attachments.Add(myZip);
SmtpServer.Send(mail);
}
catch (Exception ex)
{
FMBUtilities.Logger.LogErrorToSql2012PrdAndEmailTeam("DBQueries", "SendEmail", ex);
}
}
Here is where i am creating the zip file to send:
if (emails.ToString() != "")
{
var allEmails = emails[0].Split(',');
foreach (var email in allEmails)
{
if (emailValid.IsMatch(email))
{
everyEmail.Add(email);
}
else
{
return Json(new { success = false, message = $"* Not valid email address: {email}.\n\n * Please double check and try again." });
}
}
MemoryStream output = new MemoryStream();
List<string> distinctFiles = allPaths
.GroupBy(x => x.Split(new char[] { '\\' }).Last())
.Select(x => x.First())
.ToList();
using (ZipFile zip = new ZipFile())
{
zip.AddFiles(distinctFiles, #"\");
zip.Save(output);
output.Position = 0;
DBQueries.SendEmail(everyEmail, output, fromAddress, "Client Statement Reports", "Here are your requested Client Statements", true);
}
I have found some things about setting the file size in the web.config file and things of that sort but just dont know the best way to go about this.

How to hide inline images from mail attachment in c#

I am using LinkedResource for send inline images. İf i send one image, its work fine but if send two or more inline images SMTP sending as an inline images also as an Attachment.
İf I remove adding attachment part, images will be unreachable in the inbox.
How to hide inline image from Attachment any idea?
Here my code
public void SendEmailWithImageTo(string subject, string toMail, string decrypt, List<string> imageNames, Template template, List<UploadFile> UploadFiles = null)
{
this.FromMail = new MailAddress(this.MailUser, this.DisplayName);
List<MailImageModel> mailImageModels = new List<MailImageModel>();
AlternateView avHtml;
LinkedResource inline;
Attachment att;
string mailBodyForInfoFormat = "";
string tempTemplate = template.HtmlContent;
tempTemplate = string.Format(tempTemplate, decrypt);
foreach (var item in imageNames)
{
string path = $#"{HttpRuntime.AppDomainAppPath}\Image\MailingImage\{item}";
avHtml = AlternateView.CreateAlternateViewFromString(tempTemplate, null, MediaTypeNames.Text.Html);
if (item.Contains("png"))
{
inline = new LinkedResource(path);
inline.ContentType =new ContentType("image/png");
}
else if (item.Contains("gif"))
{
inline = new LinkedResource(path, MediaTypeNames.Image.Gif);
}
else
{
inline = new LinkedResource(path, MediaTypeNames.Image.Jpeg);
}
inline.ContentId = "MyPic";
avHtml.LinkedResources.Add(inline);
att = new Attachment(path);
att.ContentDisposition.Inline = true;
tempTemplate = tempTemplate.Replace("{", "{{").Replace("}", "}}");
mailBodyForInfoFormat = string.Format(tempTemplate, att.ContentId);
MailImageModel mailImageModel = new MailImageModel
{
AttachPath = path,
AlternateView = avHtml
};
mailImageModels.Add(mailImageModel);
}
mailBodyForInfoFormat = mailImageModels.Count > 0 ? mailBodyForInfoFormat : tempTemplate;
using (MailMessage mm = new MailMessage())
{
mm.From = this.FromMail;
mm.Subject = subject;
mm.Body = mailBodyForInfoFormat;
mm.IsBodyHtml = true;
mm.To.Clear();
mm.Bcc.Clear();
mm.CC.Clear();
mm.To.Add(toMail);
SmtpClient smtp = new SmtpClient();
smtp.EnableSsl = UseSSL == "1" ? true : false;
if (RelayActive == "0")
{
smtp.Host = MailServer;
NetworkCredential NetworkCred = new NetworkCredential(this.MailUser, this.MailPassword);
smtp.UseDefaultCredentials = true;
smtp.Credentials = NetworkCred;
smtp.Port = Convert.ToInt32(this.MailPort);
}
else
{
smtp.Host = RelayMailServer;
smtp.Port = Convert.ToInt32(this.RelayPort);
}
if (mailImageModels.Count > 0)
{
if (mailImageModels.Count != mm.Attachments.Count)
{
foreach (var item in mailImageModels)
{
mm.Attachments.Add(new Attachment(item.AttachPath));
mm.AlternateViews.Add(item.AlternateView);
}
}
}
if (UploadFiles.Count > 0)
{
foreach (var item in UploadFiles)
{
System.Net.Mail.Attachment attachment = new System.Net.Mail.Attachment(item.Path);
attachment.Name = item.FileName;
mm.Attachments.Add(attachment);
//mm.Attachments.Add(new Attachment(item.Path));
}
}
smtp.Send(mm);
smtp.Dispose();
}
}

Send email using asp.net, C#

in my web application I have a form to send an email to the group of people , i want to send a carbon copy but i have an exception that said :
The specified string is not in the form required for an e-mail address.
That is my code:
protected void SendButton_Click(object sender, EventArgs e)
{
string smtpAddress = "smtp.office365.com";
int portNumber = 587;
bool enableSSL = true;
string emailFrom = from.Text;
string password = PassTextBox.Text;
string emailTo = toddl.SelectedValue.ToString();
string subject = subject_txt.Text;
string body = txtBody.Text;
using (MailMessage mail = new MailMessage())
{
mail.From = new MailAddress(emailFrom);
mail.To.Add(emailTo);
mail.Subject = subject;
mail.Body = body;
MailAddress copy1 = new MailAddress(ccddl1.SelectedValue.ToString());
if(copy1!=null)
{
mail.CC.Add(copy1);
}
MailAddress copy2 = new MailAddress(ccddl2.SelectedValue.ToString());
if (copy2 != null)
{
mail.CC.Add(copy2);
}
mail.IsBodyHtml = true;
// Can set to false, if you are sending pure text.
if (syllabus_attach.HasFile)
{
string FileName = Path.GetFileName(syllabus_attach.PostedFile.FileName);
mail.Attachments.Add(new Attachment(syllabus_attach.PostedFile.InputStream, FileName));
}
if (course_exam_attach.HasFile)
{
string FileName = Path.GetFileName(course_exam_attach.PostedFile.FileName);
mail.Attachments.Add(new Attachment(course_exam_attach.PostedFile.InputStream, FileName));
}
if (answer_key_attach.HasFile)
{
string FileName = Path.GetFileName(answer_key_attach.PostedFile.FileName);
mail.Attachments.Add(new Attachment(answer_key_attach.PostedFile.InputStream, FileName));
}
using (SmtpClient smtp = new SmtpClient(smtpAddress, portNumber))
{
smtp.UseDefaultCredentials = true;
smtp.Credentials = new NetworkCredential(emailFrom, password);
smtp.EnableSsl = enableSSL;
smtp.Send(mail);
}
string script = "alert(\"Request Sent Successfully!\");";
ScriptManager.RegisterStartupScript(this, GetType(), "ServerControlScript", script, true);
}
}
You should change the CC code to
if(!String.IsNullOrWhitespace(ccddl1.SelectedValue.ToString())
{
mail.CC.Add(new MailAddress(ccddl1.SelectedValue.ToString());
}
if (!String.IsNullOrWhitespace(ccddl2.SelectedValue.ToString())
{
mail.CC.Add(new MailAddress(ccddl2.SelectedValue.ToString()));
}

Sending email ASP.NET [duplicate]

I'm very new to the ASP.NET C# area. I'm planning to send a mail through ASP.NET C# and this is the SMTP address from my ISP:
smtp-proxy.tm.net.my
Below is what I tried to do, but failed.
<%# Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="SendMail" %>
<html>
<head id="Head1" runat="server"><title>Email Test Page</title></head>
<body>
<form id="form1" runat="server">
Message to: <asp:TextBox ID="txtTo" runat="server" /><br>
Message from: <asp:TextBox ID="txtFrom" runat="server" /><br>
Subject: <asp:TextBox ID="txtSubject" runat="server" /><br>
Message Body:<br>
<asp:TextBox ID="txtBody" runat="server" Height="171px" TextMode="MultiLine" Width="270px" /><br>
<asp:Button ID="Btn_SendMail" runat="server" onclick="Btn_SendMail_Click" Text="Send Email" /><br>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</form>
</body>
</html>
And below is my code-behind:
using System;
using System.Web.UI.WebControls;
using System.Net.Mail;
public partial class SendMail : System.Web.UI.Page
{
protected void Btn_SendMail_Click(object sender, EventArgs e)
{
MailMessage mailObj = new MailMessage(
txtFrom.Text, txtTo.Text, txtSubject.Text, txtBody.Text);
SmtpClient SMTPServer = new SmtpClient("127.0.0.1");
try
{
SMTPServer.Send(mailObj);
}
catch (Exception ex)
{
Label1.Text = ex.ToString();
}
}
}
PS: I'm sorry that I couldn't understand the receiver/sender SMTP concept, and so I am trying to understand the whole concept from here.
Just go through the below code.
SmtpClient smtpClient = new SmtpClient("mail.MyWebsiteDomainName.com", 25);
smtpClient.Credentials = new System.Net.NetworkCredential("info#MyWebsiteDomainName.com", "myIDPassword");
// smtpClient.UseDefaultCredentials = true; // uncomment if you don't want to use the network credentials
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.EnableSsl = true;
MailMessage mail = new MailMessage();
//Setting From , To and CC
mail.From = new MailAddress("info#MyWebsiteDomainName", "MyWeb Site");
mail.To.Add(new MailAddress("info#MyWebsiteDomainName"));
mail.CC.Add(new MailAddress("MyEmailID#gmail.com"));
smtpClient.Send(mail);
Try using this code instead. Note: In the "from address" give your correct email id and password.
protected void btn_send_Click(object sender, EventArgs e)
{
System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
mail.To.Add("to gmail address");
mail.From = new MailAddress("from gmail address", "Email head", System.Text.Encoding.UTF8);
mail.Subject = "This mail is send from asp.net application";
mail.SubjectEncoding = System.Text.Encoding.UTF8;
mail.Body = "This is Email Body Text";
mail.BodyEncoding = System.Text.Encoding.UTF8;
mail.IsBodyHtml = true;
mail.Priority = MailPriority.High;
SmtpClient client = new SmtpClient();
client.Credentials = new System.Net.NetworkCredential("from gmail address", "your gmail account password");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
try
{
client.Send(mail);
Page.RegisterStartupScript("UserMsg", "<script>alert('Successfully Send...');if(alert){ window.location='SendMail.aspx';}</script>");
}
catch (Exception ex)
{
Exception ex2 = ex;
string errorMessage = string.Empty;
while (ex2 != null)
{
errorMessage += ex2.ToString();
ex2 = ex2.InnerException;
}
Page.RegisterStartupScript("UserMsg", "<script>alert('Sending Failed...');if(alert){ window.location='SendMail.aspx';}</script>");
}
}
You can try this using hotmail like this:-
MailMessage o = new MailMessage("From", "To","Subject", "Body");
NetworkCredential netCred= new NetworkCredential("Sender Email","Sender Password");
SmtpClient smtpobj= new SmtpClient("smtp.live.com", 587);
smtpobj.EnableSsl = true;
smtpobj.Credentials = netCred;
smtpobj.Send(o);
Try the following :
try
{
var fromEmailAddress = ConfigurationManager.AppSettings["FromEmailAddress"].ToString();
var fromEmailDisplayName = ConfigurationManager.AppSettings["FromEmailDisplayName"].ToString();
var fromEmailPassword = ConfigurationManager.AppSettings["FromEmailPassword"].ToString();
var smtpHost = ConfigurationManager.AppSettings["SMTPHost"].ToString();
var smtpPort = ConfigurationManager.AppSettings["SMTPPort"].ToString();
string body = "Your registration has been done successfully. Thank you.";
MailMessage message = new MailMessage(new MailAddress(fromEmailAddress, fromEmailDisplayName), new MailAddress(ud.LoginId, ud.FullName));
message.Subject = "Thank You For Your Registration";
message.IsBodyHtml = true;
message.Body = body;
var client = new SmtpClient();
client.Credentials = new NetworkCredential(fromEmailAddress, fromEmailPassword);
client.Host = smtpHost;
client.EnableSsl = true;
client.Port = !string.IsNullOrEmpty(smtpPort) ? Convert.ToInt32(smtpPort) : 0;
client.Send(message);
}
catch (Exception ex)
{
throw (new Exception("Mail send failed to loginId " + ud.LoginId + ", though registration done."));
}
And then in you web.config add the following in between
<!--Email Config-->
<add key="FromEmailAddress" value="sender emailaddress"/>
<add key="FromEmailDisplayName" value="Display Name"/>
<add key="FromEmailPassword" value="sender Password"/>
<add key="SMTPHost" value="smtp-proxy.tm.net.my"/>
<add key="SMTPPort" value="smptp Port"/>
You can try MailKit
MailKit is an Open Source cross-platform .NET mail-client library that is based on MimeKit and optimized for mobile devices. You can use easily in your application.You can download from here.
MimeMessage mailMessage = new MimeMessage();
mailMessage.From.Add(new MailboxAddress(fromName, from#address.com));
mailMessage.Sender = new MailboxAddress(senderName, sender#address.com);
mailMessage.To.Add(new MailboxAddress(emailid, emailid));
mailMessage.Subject = subject;
mailMessage.ReplyTo.Add(new MailboxAddress(replyToAddress));
mailMessage.Subject = subject;
var builder = new BodyBuilder();
builder.TextBody = "Hello There";
try
{
using (var smtpClient = new SmtpClient())
{
smtpClient.Connect("HostName", "Port", MailKit.Security.SecureSocketOptions.None);
smtpClient.Authenticate("user#name.com", "password");
smtpClient.Send(mailMessage);
Console.WriteLine("Success");
}
}
catch (SmtpCommandException ex)
{
Console.WriteLine(ex.ToString());
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Check this out .... it works
http://www.aspnettutorials.com/tutorials/email/email-aspnet2-csharp/
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net.Mail;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
try
{
MailMessage message = new MailMessage(txtFrom.Text, txtTo.Text, txtSubject.Text, txtBody.Text);
SmtpClient emailClient = new SmtpClient(txtSMTPServer.Text);
emailClient.Send(message);
litStatus.Text = "Message Sent";
}
catch (Exception ex)
{
litStatus.Text=ex.ToString();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Globalization;
using System.Text.RegularExpressions;
/// <summary>
/// Summary description for RegexUtilities
/// </summary>
public class RegexUtilities
{
bool InValid = false;
public bool IsValidEmail(string strIn)
{
InValid = false;
if (String.IsNullOrEmpty(strIn))
return false;
// Use IdnMapping class to convert Unicode domain names.
strIn = Regex.Replace(strIn, #"(#)(.+)$", this.DomainMapper);
if (InValid)
return false;
// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn, #"^(?("")(""[^""]+?""#)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])#))" + #"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$",
RegexOptions.IgnoreCase);
}
private string DomainMapper(Match match)
{
// IdnMapping class with default property values.
IdnMapping idn = new IdnMapping();
string domainName = match.Groups[2].Value;
try
{
domainName = idn.GetAscii(domainName);
}
catch (ArgumentException)
{
InValid = true;
}
return match.Groups[1].Value + domainName;
}
}
private void GetSendEmInfo()
{
#region For Get All Type Email Informations..!!
IPL.DoId = ddlName.SelectedValue;
DataTable dt = IdBL.GetEmailS(IPL);
if (dt.Rows.Count > 0)
{
hid_MailId.Value = dt.Rows[0]["MailId"].ToString();
hid_UsedPName.Value = dt.Rows[0]["UName"].ToString();
hid_EmailSubject.Value = dt.Rows[0]["EmailSubject"].ToString();
hid_EmailBody.Value = dt.Rows[0]["EmailBody"].ToString();
hid_EmailIdName.Value = dt.Rows[0]["EmailIdName"].ToString();
hid_EmPass.Value = dt.Rows[0]["EPass"].ToString();
hid_SeName.Value = dt.Rows[0]["SenName"].ToString();
hid_TNo.Value = dt.Rows[0]["TeNo"].ToString();
hid_EmaLimit.Value = dt.Rows[0]["EmailLimit"].ToString();
hidlink.Value = dt.Rows[0][link"].ToString();
}
#endregion
#region For Set Some Local Variables..!!
int StartLmt, FinalLmt, SendCurrentMail;
StartLmt = FinalLmt = SendCurrentMail = 0;
bool Valid_LimitMail;
Valid_LimitMail = true;
/**For Get Finalize Limit For Send Mail**/
FinalLmt = Convert.ToInt32(hid_EmailmaxLimit.Value);
#region For Check Email Valid Limits..!!
if (FinalLmt > 0)
{
Valid_LimitMail = true;
}
else
{
Valid_LimitMail = false;
}
#endregion
/**For Get Finalize Limit For Send Mail**/
#endregion
if (Valid_LimitMail == true)
{
#region For Send Current Email Status..!!
bool EmaiValid;
string CreateFileName;
string retmailflg = null;
EmaiValid = false;
#endregion
#region For Set Start Limit And FinalLimit Send No Of Email..!!
mPL.SendDate = DateTime.Now.ToString("dd-MMM-yyyy");
DataTable dtsendEmail = m1BL.GetEmailSendLog(mPL);
if (dtsendEmail.Rows.Count > 0)
{
StartLmt = Convert.ToInt32(dtsendEmail.Rows[0]["SendNo_Of_Email"].ToString());
}
else
{
StartLmt = 0;
}
#endregion
#region For Find Grid View Controls..!!
for (int i = 0; i < GrdEm.Rows.Count; i++)
{
#region For Find Grid view Controls..!!
CheckBox Chk_SelectOne = (CheckBox)GrdEmp.Rows[i].FindControl("chkSingle");
Label lbl_No = (Label)GrdEmAtt.Rows[i].FindControl("lblGrdCode");
lblCode.Value = lbl_InNo.Text;
Label lbl_EmailId = (Label)GrdEomAtt.Rows[i].FindControl("lblGrdEmpEmail");
#endregion
/**Region For If Check Box Checked Then**/
if (Chk_SelectOne.Checked == true)
{
if (!string.IsNullOrEmpty(lbl_EmailId.Text))
{
#region For When Check Box Checked..!!
/**If Start Limit Less Or Equal To Then Condition Performs**/
if (StartLmt < FinalLmt)
{
StartLmt = StartLmt + 1;
}
else
{
Valid_LimitMail = false;
EmaiValid = false;
}
/**End Region**/
string[] SplitClients_Email = lbl_EmailId.Text.Split(',');
string Send_Email, Hold_Email;
Send_Email = Hold_Email = "";
int CountEmail;/**Region For Count Total Email**/
CountEmail = 0;/**First Time Email Counts Zero**/
Hold_Email = SplitClients_Email[0].ToString().Trim().TrimEnd().TrimStart().ToString();
/**Region For If Clients Have One Email**/
#region For First Emails Send On Client..!!
if (SplitClients_Email[0].ToString() != "")
{
if (EmailRegex.IsValidEmail(Hold_Email))
{
Send_Email = Hold_Email;
CountEmail = 1;
EmaiValid = true;
}
else
{
EmaiValid = false;
}
}
#endregion
/**Region For If Clients Have One Email**/
/**Region For If Clients Have Two Email**/
/**Region For If Clients Have Two Email**/
if (EmaiValid == true)
{
#region For Create Email Body And Create File Name..!!
//fofile = Server.MapPath("PDFs");
fofile = Server.MapPath("~/vvv/vvvv/") + "/";
CreateFileName = lbl_INo.Text.ToString() + "_1" + ".Pdf";/**Create File Name**/
string[] orimail = Send_Email.Split(',');
string Billbody, TempInvoiceId;
// DateTime dtLstdate = new DateTime(Convert.ToInt32(txtYear.Text), Convert.ToInt32(ddlMonth.SelectedValue), 16);
// DateTime IndtLmt = dtLstdate.AddMonths(1);
TempInvoiceId = "";
//byte[] Buffer = Encrypt.Encryptiondata(lbl_InvoiceNo.Text.ToString());
//TempInvoiceId = Convert.ToBase64String(Buffer);
#region Create Encrypted Path
byte[] EncCode = Encrypt.Encryptiondata(lbl_INo.Text);
hidEncrypteCode.Value = Convert.ToBase64String(EncECode);
#endregion
//#region Create Email Body !!
//body = hid_EmailBody.Value.Replace("#greeting", lbl_CoName.Text).Replace("#free", hid_ToNo.Value).Replace("#llnk", "<a style='font-family: Tahoma; font-size: 10pt; color: #800000; font-weight: bold' href='http://1ccccc/ccc/ccc/ccc.aspx?EC=" + hidEncryptedCode.Value+ "' > C cccccccc </a>");
body = hid_EmailBody.Value.Replace("#greeting", "Hii").Replace("#No", hid_No.Value);/*For Mail*/
//#endregion
#region For Email Sender Informations..!!
for (int j = 0; j < CountEmail; j++)
{
//if (File.Exists(fofile + "\\" + CreateFileName))
//{
#region
lbl_EmailId.Text = orimail[j];
retmailflg = "";
/**Region For Send Email For Clients**/
//retmailflg = SendPreMail("Wp From " + lbl_CName.Text + "", body, lbl_EmailId.Text, lbl_IeNo.Text, hid_EmailIdName.Value, hid_EmailPassword.Value);
retmailflg = SendPreMail(hid_EmailSubject.Value, Body, lbl_EmailId.Text, lbl_No.Text, hid_EmailIdName.Value, hid_EmailPassword.Value);
/**End Region**/
/**Region For Create Send Email Log When Email Send Successfully**/
if (retmailflg == "True")
{
SendCurrentMail = Convert.ToInt32(SendCurrentMail) + 1;
StartLmt = Convert.ToInt32(StartLmt) + 1;
if (SendCurrentMail > 0)
{
CreateEmailLog(lbl_InNo.Text, StartLmt, hid_EmailIdName.Value, lbl_EmailId.Text);
}
}
/**End Region**/
#endregion
//}
}
#endregion
}
#endregion
}
}
/**End Region**/
}
#endregion
}
}
private void CreateEmailLog(string UniqueId, int StartLmt, string FromEmailId, string TotxtEmailId)
{
FPL.EmailId_From = FromEmailId;
FPL.To_EmailId = TotxtEmailId;
FPL.SendDate = DateTime.Now.ToString("dd-MMM-yyyy");
FPL.EmailUniqueId = UniqueId;
FPL.SendNo_Of_Email = StartLmt.ToString();
FPL.LoginUserId = Session["LoginUserId"].ToString();
int i = FBL.InsertEmaDoc(FPL);
}
public string SendPreMail(string emsub, string embody, string EmailId, string FileId, string EmailFromId, string Password)
{
string retval = "False";
try
{
string emailBody, emailSubject, emailToList, emailFrom,
accountPassword, smtpServer;
bool enableSSL;
int port;
emailBody = embody;
emailSubject = emsub;
emailToList = EmailId;
emailFrom = EmailFromId;
accountPassword = Password;
smtpServer = "smtp.gmail.com";
enableSSL = true;
port = 587;
string crefilename;
string fofile;
fofile = Server.MapPath("PDF");
crefilename = FileId + ".Pdf";
string[] att = { crefilename };
string retemail, insertqry;
retemail = "";
retemail = SendEmail(emailBody, emailSubject, emailFrom, emailToList, att, smtpServer, enableSSL, accountPassword, port);
if (retemail == "True")
{
retval = retemail;
}
}
catch
{
retval = "False";
}
finally
{
}
return retval;
}
public string SendEmail(string emailBody, string emailSubject, string emailFrom, string emailToList, string[] attachedFiles, string smtpIPAddress, bool enableSSL, string accountPassword, int port)
{
MailMessage mail = new MailMessage();
string retflg;
retflg = "False";
try
{
mail.From = new MailAddress(emailFrom);
if (emailToList.Contains(";"))
{
emailToList = emailToList.Replace(";", ",");
}
mail.To.Add(emailToList);
mail.Subject = emailSubject;
mail.IsBodyHtml = true;
mail.Body = emailBody;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
NetworkCredential NetworkCred = new NetworkCredential(emailFrom, accountPassword);
smtp.UseDefaultCredentials = true;
smtp.Credentials = NetworkCred;
smtp.Port = 587;
smtp.Send(mail);
retflg = "True";
}
catch
{
retflg = "False";
}
finally
{
mail.Dispose();
}
return retflg;
}
Just pass parameter
like
body - The content(query) from the customer
subject - subject that defined in mail subject
username - nothing name anything
mail - mail (required)
public static bool SendMail(String body, String subject, string username, String mail)
{
bool isSendSuccess = false;
try
{
var fromEmailAddress = ConfigurationManager.AppSettings["FromEmailAddress"].ToString();
var fromEmailDisplayName = ConfigurationManager.AppSettings["FromEmailDisplayName"].ToString();
var fromEmailPassword = ConfigurationManager.AppSettings["FromEmailPassword"].ToString();
var smtpHost = ConfigurationManager.AppSettings["SMTPHost"].ToString();
var smtpPort = ConfigurationManager.AppSettings["SMTPPort"].ToString();
MailMessage message = new MailMessage(new MailAddress(fromEmailAddress, fromEmailDisplayName),
new MailAddress(mail, username));
message.Subject = subject;
message.IsBodyHtml = true;
message.Body = body;
var client = new SmtpClient();
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential(fromEmailAddress, fromEmailPassword);
client.Host = smtpHost;
client.EnableSsl = false;
client.Port = !string.IsNullOrEmpty(smtpPort) ? Convert.ToInt32(smtpPort) : 0;
client.Send(message);
isSendSuccess = true;
}
catch (Exception ex)
{
throw (new Exception("Mail send failed to loginId " + mail + ", though registration done."+ex.ToString()+"\n"+ex.StackTrace));
}
return isSendSuccess;
}
if your using go daddy server this work . add this in web.config
<appSettings>
---other ---setting
<add key="FromEmailAddress" value="myemail#gmail.com" />
<add key="FromEmailDisplayName" value="anyname" />
<add key="FromEmailPassword" value="mypassword#" />
<add key="SMTPHost" value="relay-hosting.secureserver.net" />
<add key="SMTPPort" value="25" />
</appSettings>
if you are using localhost or vps server change this configuration to this
<appSettings>
---other ---setting
<add key="FromEmailAddress" value="myemail#gmail.com" />
<add key="FromEmailDisplayName" value="anyname" />
<add key="FromEmailPassword" value="mypassword#" />
<add key="SMTPHost" value="smtp.gmail.com" />
<add key="SMTPPort" value="587" />
</appSettings>
change the code
client.EnableSsl = true;
if your are using gmail please enable secure app. using this link
https://myaccount.google.com/lesssecureapps?pli=1&rapt=AEjHL4Pd6h3XxE663Flvd-FfeRXxW_eNrIsGTBlZklgkAHZEeuHvheCQuZ1-djB9uIWaB-2EV7hyLCU0dWKA7D0JzYKe4ZRkuA
If you want to generate your email bodies in razor, you can use Mailzory. Also, you can download the nuget package from here.
// template path
var viewPath = Path.Combine("Views/Emails", "hello.cshtml");
// read the content of template and pass it to the Email constructor
var template = File.ReadAllText(viewPath);
var email = new Email(template);
// set ViewBag properties
email.ViewBag.Name = "Johnny";
email.ViewBag.Content = "Mailzory Is Funny";
// send email
var task = email.SendAsync("mailzory#outlook.com", "subject");
task.Wait()
According to this :
SmtpClient and its network of types are poorly designed, we strongly
recommend you use https://github.com/jstedfast/MailKit and
https://github.com/jstedfast/MimeKit instead.
Reference : https://learn.microsoft.com/en-us/dotnet/api/system.net.mail.smtpclient?view=netframework-4.8
It's better to use MailKit to send emails :
var message = new MimeMessage ();
message.From.Add (new MailboxAddress ("Joey Tribbiani", "joey#friends.com"));
message.To.Add (new MailboxAddress ("Mrs. Chanandler Bong", "chandler#friends.com"));
message.Subject = "How you doin'?";
message.Body = new TextPart ("plain") {
Text = #"Hey Chandler,
I just wanted to let you know that Monica and I were going to go play some paintball, you in?
-- Joey"
};
using (var client = new SmtpClient ()) {
// For demo-purposes, accept all SSL certificates (in case the server supports STARTTLS)
client.ServerCertificateValidationCallback = (s,c,h,e) => true;
client.Connect ("smtp.friends.com", 587, false);
// Note: only needed if the SMTP server requires authentication
client.Authenticate ("joey", "password");
client.Send (message);
client.Disconnect (true);
}
Google may block sign-in attempts from some apps or devices that do not use modern security standards. Since these apps and devices are easier to break into, blocking them helps keep your account safer.
Some examples of apps that do not support the latest security standards include:
The Mail app on your iPhone or iPad with iOS 6 or below
The Mail app on your Windows phone preceding the 8.1 release
Some Desktop mail clients like Microsoft Outlook and Mozilla Thunderbird
Therefore, you have to enable Less Secure Sign-In (or Less secure app access) in your google account.
After sign into a google account, go to:
https://www.google.com/settings/security/lesssecureapps
or
https://myaccount.google.com/lesssecureapps
In C#, you can use the following code:
MimeMessage message = new MimeMessage();
BodyBuilder Attachmint = new BodyBuilder();
message.From.Add(new MailboxAddress("name sender", "Mail From"));
message.To.Add(MailboxAddress.Parse("Mail To"));
message.Subject = Subject;
message.Body = new TextPart("plain")
{
Text = tex_body.Text + Massage
};
Attachmint.Attachments.Add("Attatchment Path");
message.Body = Attachmint.ToMessageBody();
SmtpClient client = new SmtpClient();
client.Connect("smtp.gmail.com", 465, true);
client.Authenticate("Mail from", "Password mail");
client.Send(message);
you can send mail from Gmail to Private Mail As X#PrivetCompany.com
Answer Update 2023
C# code for Email (GMAIL) Service
using System;
using System.Net;
using System.Net.Mail;
namespace EmailApp
{
internal class Program
{
public static void Main(string[] args)
{
String SendMailFrom = "Sender Email";
String SendMailTo = "Reciever Email";
String SendMailSubject = "Email Subject";
String SendMailBody = "Email Body";
try
{
SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com",587);
SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;
MailMessage email = new MailMessage();
// START
email.From = new MailAddress(SendMailFrom);
email.To.Add(SendMailTo);
email.CC.Add(SendMailFrom);
email.Subject = SendMailSubject;
email.Body = SendMailBody;
//END
SmtpServer.Timeout = 5000;
SmtpServer.EnableSsl = true;
SmtpServer.UseDefaultCredentials = false;
SmtpServer.Credentials = new NetworkCredential(SendMailFrom, "Google App Password");
SmtpServer.Send(email);
Console.WriteLine("Email Successfully Sent");
Console.ReadKey();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
Console.ReadKey();
}
}
}
}
For further help, you can refer to: https://www.techaeblogs.live/2022/06/how-to-send-email-using-gmail.html
MailMessage mm = new MailMessage(txtEmail.Text, txtTo.Text);
mm.Subject = txtSubject.Text;
mm.Body = txtBody.Text;
if (fuAttachment.HasFile)//file upload select or not
{
string FileName = Path.GetFileName(fuAttachment.PostedFile.FileName);
mm.Attachments.Add(new Attachment(fuAttachment.PostedFile.InputStream, FileName));
}
mm.IsBodyHtml = false;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
NetworkCredential NetworkCred = new NetworkCredential(txtEmail.Text, txtPassword.Text);
smtp.UseDefaultCredentials = true;
smtp.Credentials = NetworkCred;
smtp.Port = 587;
smtp.Send(mm);
Response.write("Send Mail");
View Video: https://www.youtube.com/watch?v=bUUNv-19QAI
This is the easiest script to test.
<%# Import Namespace="System.Net" %>
<%# Import Namespace="System.Net.Mail" %>
<script language="C#" runat="server">
protected void Page_Load(object sender, EventArgs e)
{
//create the mail message
MailMessage mail = new MailMessage();
//set the addresses
mail.From = new MailAddress("From email account");
mail.To.Add("To email account");
//set the content
mail.Subject = "This is a test email from C# script";
mail.Body = "This is a test email from C# script";
//send the message
SmtpClient smtp = new SmtpClient("mail.domainname.com");
NetworkCredential Credentials = new NetworkCredential("to email account", "Password");
smtp.Credentials = Credentials;
smtp.Send(mail);
lblMessage.Text = "Mail Sent";
}
</script>
<html>
<body>
<form runat="server">
<asp:Label id="lblMessage" runat="server"></asp:Label>
</form>
</body>

Edit HTML Email template at run time in .net code

I below code is to send email by reading the template html, and it works fine. But now my question is how to pass Salutation customerName from my .net code to the template at run time.
StringBuilder strBlr = new StringBuilder();
string strHTML = string.Empty;
string strTempalteHtmlpath = string.Empty;
//create the mail message
MailMessage mail;
string strFrom = ConfigurationSettings.AppSettings["fromAddressForBT"];
string strSubject = "Thanks for choosing Email contact preference";
mail = new MailMessage(strFrom, customerDetails.EmailId);
mail.Subject = strSubject;
//Read Html Template File Path
strTempalteHtmlpath = Convert.ToString(ConfigurationSettings.AppSettings["TemplatePath"]);
strHTML = File.ReadAllText(strTempalteHtmlpath);
strBlr = strBlr.Append(strHTML);
mail.Body = strBlr.ToString();
mail.IsBodyHtml = true;
//first we create the Plain Text part
AlternateView plainView = AlternateView.CreateAlternateViewFromString(strBlr.ToString(), null, "text/plain");
AlternateView htmlView = AlternateView.CreateAlternateViewFromString(strBlr.ToString(), null, "text/html");
mail.AlternateViews.Add(plainView);
mail.AlternateViews.Add(htmlView);
//send the message
SmtpClient smtpMail = new SmtpClient(ConfigurationSettings.AppSettings["smtpClient"]);
smtpMail.Send(mail);
mail.Dispose();
Thanks.
This is code for sendemail button
StreamReader sr = new StreamReader(Server.MapPath("Sendpage.htm"));
string body = sr.ReadToEnd();
sr.Close();
body = body.Replace("#NameFamily#", txtNameFamily.Text);
body = body.Replace("#Email#", txtEmail.Text);
body = body.Replace("#Tellphone#", txtTellphone.Text);
body = body.Replace("#Text#", txtText.Text);
body = body.Replace("#Date#", DateTime.Now);
string Time = Convert.ToString(DateTime.Now.ToShortTimeString());
body = body.Replace("#Time#", Time);
SendMail("email that you want to send to it", body);
this is sendmail function code:
private void SendMail(string To, string Body)
{
SmtpClient Mailing = new SmtpClient("mail.domain.com");
MailMessage Message = new MailMessage();
Message.From = new MailAddress("mail#domain.com", "Your name or company name");
Message.Subject = "Subject";
Message.SubjectEncoding = Encoding.UTF8;
Message.IsBodyHtml = true;
Message.BodyEncoding = Encoding.UTF8;
Message.Body = Body;
Message.To.Add(new MailAddress(To));
Mailing.UseDefaultCredentials = false;
NetworkCredential MyCredential = new NetworkCredential("mail#domain.com", "password");
Mailing.Credentials = MyCredential; Mailing.Send(Message);
}

Categories

Resources