วิธีส่งอีเมลใน ASP.NET C #


91

ฉันใหม่มากสำหรับพื้นที่ASP.NET C # ฉันวางแผนที่จะส่งอีเมลผ่าน ASP.NET C # และนี่คือที่อยู่SMTPจากISPของฉัน:

smtp-proxy.tm.net.my

ด้านล่างนี้คือสิ่งที่ฉันพยายามทำ แต่ล้มเหลว

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

และด้านล่างนี้คือรหัสของฉันที่อยู่เบื้องหลัง :

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: ฉันขอโทษที่ฉันไม่เข้าใจแนวคิด SMTP ของผู้รับ / ผู้ส่งดังนั้นฉันจึงพยายามทำความเข้าใจแนวคิดทั้งหมดจากที่นี่


เมื่อคุณคลิกปุ่มมันจะไปถึงรหัสด้านหลังหรือไม่?
Conrad Lotz

คุณตั้งค่า smtp ใน IIS บน localhost หรือไม่? อะไรคือความล้มเหลว? คุณมีบัญชีอีเมลกับ ISP ของคุณหรือไม่?
mrtig

คำตอบ:


116

เพียงแค่ผ่านรหัสด้านล่าง

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

ถ้ำโมธารันเป็นจุด ๆ การส่งข้อความธรรมดาหรือเนื้อหา HTML สำหรับอีเมลธรรมดาที่รวดเร็วและสกปรก นี่คือตัวอย่างที่ดีของการฝังแท็ก HTML ไว้ในเนื้อหาของข้อความ รหัส Inline HTML StringBuilder มีประโยชน์มากในการสร้างข้อความขนาดใหญ่ นอกจากนี้
Bryan Springborn

13
ฉันพบว่าสิ่งนี้มีประโยชน์ แม้ว่าการตั้งค่า UseDefaultCredentials เป็น true หมายความว่าจะไม่มีการส่งข้อมูลรับรองที่กำหนดตามเอกสาร นั่นเป็นส่วนที่ยุ่งยากในการคิดออก
Garr Godfrey

11
โปรดทราบว่าทั้งสองMailMessageและSmtpClientการดำเนินการIDisposableและควรจะใช้ภายในusingคำสั่ง (หรือจำหน่ายอย่างอื่นของ)
taiji123

อาจจำเป็นต้องกำหนดค่าบัญชี gmail ดังต่อไปนี้ ควรตั้งค่า "แอปที่มีความปลอดภัยน้อย" เป็น "เปิดใช้งาน" ที่ไคลเอนต์ใช้โดเมน "smtp.gmail.com" และพอร์ต 587
H2ONaCl

24

ลองใช้รหัสนี้แทน หมายเหตุ: ใน "จากที่อยู่" ให้ระบุรหัสอีเมลและรหัสผ่านที่ถูกต้อง

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

ดังนั้นฉันจึงตั้งค่าแบบฟอร์มในหน้า ASP.net ของฉันด้วย dropdownlist / textboxes จะทำงานเหมือนเดิมหรือไม่ ขอบคุณ.
SearchForKnowledge

รหัสนี้ทำงานบนบอทเซิร์ฟเวอร์ท้องถิ่นไม่ได้มาจากโฮสติ้งเซิร์ฟเวอร์ goddady .. ทำไม?
Sam Alex

10

คุณสามารถลองใช้ hotmail ได้ดังนี้: -

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

9

ลองทำดังต่อไปนี้:

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

จากนั้นในคุณ web.config ให้เพิ่มสิ่งต่อไปนี้ในระหว่าง

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

3

คุณสามารถลอง MailKit MailKit เป็นไลบรารีเมลไคลเอ็นต์. NET แบบข้ามแพลตฟอร์มที่ใช้ MimeKit และปรับให้เหมาะสมสำหรับอุปกรณ์เคลื่อนที่ คุณสามารถใช้งานได้ง่ายใน application.You คุณสามารถดาวน์โหลดได้จากที่นี่

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

2

ตรวจสอบสิ่งนี้ .... ได้ผล

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

ลิงก์ด้านบนใช้ไม่ได้ที่นี่คุณสามารถตรวจสอบคำแนะนำทีละขั้นตอนในการส่งอีเมลในรูปแบบเว็บของ asp net: qawithexperts.com/article/asp-net/…
user3559462

0

ถ้าคุณต้องการสร้างร่างกายอีเมลของคุณในมีดโกนคุณสามารถใช้Mailzory นอกจากนี้คุณยังสามารถดาวน์โหลดแพคเกจ nuget จากที่นี่

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

0

ตามนี้:

SmtpClient และเครือข่ายประเภทต่างๆได้รับการออกแบบมาไม่ดีเราขอแนะนำให้คุณใช้https://github.com/jstedfast/MailKitและ https://github.com/jstedfast/MimeKitแทน

อ้างอิง: https://docs.microsoft.com/en-us/dotnet/api/system.net.mail.smtpclient?view=netframework-4.8

ใช้MailKitส่งอีเมลได้ดีกว่า:

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

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

ดูวิดีโอ: https://www.youtube.com/watch?v=bUUNv-19QAI


-1

นี่คือสคริปต์ที่ง่ายที่สุดในการทดสอบ

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

1
ทำไมคุณถึงเลือกที่จะวางไว้ในมุมมองและไม่ปล่อยให้คอนโทรลเลอร์จัดการสิ่งนี้
WhatsThePoint

คำถามถูกถามเกี่ยวกับการส่งอีเมลผ่าน ASP.NET C # ไม่ได้กล่าวถึงการตั้งค่าคอนโทรลเลอร์ในสคริปต์
Hiren Parghi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.