How to send email in ASP.NET C#

2019-01-01 04:00发布

问题:

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.

回答1:

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


回答2:

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


回答3:

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


回答4:

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 followings 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\"/>


回答5:

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


回答6:

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()


回答7:

This just works perfectly for me.

    public  void sendEmail(string body)
    {
        if (String.IsNullOrEmpty(email))
            return;
        try
        {
            MailMessage mail = new MailMessage();
            mail.To.Add(email);
            mail.To.Add(\"test@gmail.com\");
            mail.From = new MailAddress(\"abc@gmail.com\");
            mail.Subject = \"sub\";

            mail.Body = body;

            mail.IsBodyHtml = true;
            SmtpClient smtp = new SmtpClient();
            smtp.Host = \"smtp.gmail.com\"; //Or Your SMTP Server Address
            smtp.Credentials = new System.Net.NetworkCredential
                 (\"yourgmail@gmail.com\", \"Yourpassword\"); // ***use valid credentials***
            smtp.Port = 587;

            //Or your Smtp Email ID and Password
            smtp.EnableSsl = true;
            smtp.Send(mail);
        }
        catch (Exception ex)
        {
            print(\"Exception in sendEmail:\" + ex.Message);
        }
    }


回答8:

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



回答9:

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>


回答10:

You can try MailKit

                MimeMessage mailMessage = new MimeMessage();
                mailMessage.From.Add(new MailboxAddress(senderName, sender@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());                
                }
For more information you can [download package][1]


  [1]: https://www.nuget.org/packages/MailKit