2013-08-20 7 views
60

Sono molto nuovo nell'area ASP.NET C#. Sto pensando di inviare una mail tramite ASP.NET C# e questo è l'indirizzo SMTP dal mio ISP:Come inviare e-mail in ASP.NET C#

smtp-proxy.tm.net.my 

Qui di seguito è quello che ho cercato di fare, ma non è riuscito.

<%@ 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> 

E sotto è il mio 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: Mi dispiace che non riuscivo a capire il concetto ricevitore/trasmettitore SMTP, e quindi sto cercando di capire l'intero concetto da Qui.

+0

Quando si fa clic sul pulsante raggiunge il codice sottostante? –

+0

Hai impostato smtp in IIS su localhost? Qual è il fallimento? Hai un account di posta con il tuo ISP? – mrtig

risposta

82

Basta passare attraverso il codice qui sotto.

SmtpClient smtpClient = new SmtpClient("mail.MyWebsiteDomainName.com", 25); 

smtpClient.Credentials = new System.Net.NetworkCredential("[email protected]", "myIDPassword"); 
smtpClient.UseDefaultCredentials = true; 
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; 
smtpClient.EnableSsl = true; 
MailMessage mail = new MailMessage(); 

//Setting From , To and CC 
mail.From = new MailAddress("[email protected]", "MyWeb Site"); 
mail.To.Add(new MailAddress("[email protected]")); 
mail.CC.Add(new MailAddress("[email protected]")); 

smtpClient.Send(mail); 
+9

ho trovato utile questo. sebbene impostare UseDefaultCredentials su true significa che le credenziali indicate non verranno inviate, secondo la documentazione. Questa è la parte difficile da capire. –

+0

Thamotharan's è perfetto.Invio di testo normale o corpo HTML. Per le e-mail semplici e sporche. Ecco un buon esempio di incorporamento di tag HTML all'interno del corpo del messaggio. [Codice HTML incorporato] (http://stackoverflow.com/questions/8628683/how-to-send-html-formated-email). StringBuilder è molto utile per creare messaggi più grandi. Anche –

+7

Si noti che sia 'MailMessage' che' SmtpClient' implementano 'IDisposable' e dovrebbero essere usati all'interno di un'istruzione' using' (o altrimenti eliminati) – taiji123

10

si può provare questo utilizzando hotmail in questo modo: -

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

Ho trascorso più di 1 ora a far funzionare la versione di Gmail, ma non ho potuto. Questo mi ha funzionato per la prima volta. Grazie – Bertie92

+1

Grazie! Funziona alla grande! –

20

Prova utilizzando questo codice invece:

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

Nota: In "dall'indirizzo" dare il vostro id e-mail e la password corretti. In caso di dubbi contattami.

+0

Quindi ho un modulo configurato nella mia pagina ASP.net con dropdownlist/textboxes . Funzionerà allo stesso modo? Grazie. – SearchForKnowledge

+0

non "dubbi"; usa la parola "domande": se hai domande, contattami. – Engineer

+0

Questo codice funziona sul bot del server locale non dall'hosting del server goddady. Perché? –

8

provare quanto segue:

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

E poi in voi web.config aggiungere le seguenti tra

<!--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"/> 
2

check this out .... funziona

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

Il link è rotto. –

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

Guarda video: https://www.youtube.com/watch?v=bUUNv-19QAI

0

Se si desidera generare i vostri corpi e-mail a rasoio, è possibile utilizzare Mailzory. Inoltre, è possibile scaricare il pacchetto nuget da 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("[email protected]", "subject"); 
task.Wait() 
1

Questo funziona perfettamente per me.

public void sendEmail(string body) 
    { 
     if (String.IsNullOrEmpty(email)) 
      return; 
     try 
     { 
      MailMessage mail = new MailMessage(); 
      mail.To.Add(email); 
      mail.To.Add("[email protected]"); 
      mail.From = new MailAddress("[email protected]"); 
      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 
       ("[email protected]", "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); 
     } 
    } 
0

Questo è lo script più semplice da testare.

<%@ 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> 
+0

perché dovresti scegliere di metterlo nella vista e non lasciare che il controller gestisca questo? – WhatsThePoint