使用ASP.NET C#发送电子邮件

12

使用C#编写的ASP.NET项目,是否可以从我的计算机(本地主机)发送电子邮件?最终我将上传我的项目到Web服务器,但在上传之前我想进行测试。

我已经找到了现成的源代码,并尝试在本地主机上运行它们,但是它们都没有成功运行。例如,这段代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Net.Mail;

    namespace sendEmail
    {
        public partial class _default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {

            }
            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("localhost");
                try
                {
                    SMTPServer.Send(mailObj);
                }
                catch (Exception ex)
                {
                    Label1.Text = ex.ToString();
                }
            }
        }
    }

如何使用asp.net C#发送电子邮件?我需要设置一些服务器配置吗?


你可以使用 Gmail、Hotmail 等电子邮件服务发送电子邮件。 - Waqar Janjua
我使用这个 http://smtp4dev.codeplex.com/ - Dmitry Harnitski
我已经编辑了我的问题以显示代码。 - Nurlan
你无法从本地主机发送电子邮件。 - Waqar Janjua
7个回答

12

从Asp.Net发送电子邮件:

    MailMessage objMail = new MailMessage("Sending From", "Sending To","Email Subject", "Email Body");
    NetworkCredential objNC = new NetworkCredential("Sender Email","Sender Password");
    SmtpClient objsmtp = new SmtpClient("smtp.live.com", 587); // for hotmail
    objsmtp.EnableSsl = true;
    objsmtp.Credentials = objNC;
    objsmtp.Send(objMail);

谢谢,它有效!但是如果我不想使用gmail或hotmail怎么办。我想使用某些公司的服务,例如www.mycompany.com。我需要进行任何服务器配置吗?如果我知道smtp主机和端口是否足够? - Nurlan
2
@NurlanKenzhebekov 我从未使用过任何服务。发送电子邮件是一个简单的过程。如果您使用任何服务,则公司提供电子邮件域,我认为您只需要使用smtp发送电子邮件,不需要进行服务器配置。 - Waqar Janjua

7
如果您拥有Gmail帐户,您可以使用Google SMTP发送电子邮件。
smtpClient.UseDefaultCredentials = false;
smtpClient.Host = "smtp.gmail.com";
smtpClient.Port = 587;
smtpClient.Credentials = new NetworkCredential(username,passwordd);
smtpClient.EnableSsl = true;
smtpClient.Send(mailMessage);

谢谢,它有效!但是如果我不想使用gmail或hotmail怎么办。我想使用某些公司的服务,例如www.mycompany.com。我需要进行任何服务器配置吗?如果我知道smtp主机和端口是否足够? - Nurlan

5
您的上述代码应该可以正常工作,但是您需要将以下内容添加到web.config中(作为任何基于代码的SMTP配置的替代方案):
  <system.net>
    <mailSettings>
      <smtp deliveryMethod="Network">
        <network host="your.smtpserver.com" port="25" userName="smtpusername" password="smtppassword" />
      </smtp>
    </mailSettings>
  </system.net>

如果您没有访问远程SMTP服务器的权限(我使用自己的POP3/SMTP电子邮件详细信息),则可以在本地IIS实例中设置一个SMTP服务器,但是您可能会遇到中继问题(因为大多数ISP消费者IP地址都被列入黑名单)。
如果您没有访问SMTP服务器的权限,则可以使用以下设置代替上面的设置,这是一个很好的替代方案:
  <system.net>
    <mailSettings>
      <smtp deliveryMethod="SpecifiedPickupDirectory">
          <specifiedPickupDirectory pickupDirectoryLocation="C:\mail"/>
      </smtp>
    </mailSettings>
  </system.net>

这将创建电子邮件的硬盘副本,非常方便。您需要创建上面指定的目录,否则在尝试发送电子邮件时会收到错误提示。
您可以像其他答案中配置SmtpClient对象的属性一样,在代码中配置这些详细信息,但除非您从数据源获取信息或信息是动态的,否则这是多余的编码,因为.Net已经为您完成了这项工作。

2
您可以通过位于System.Net.Mail命名空间中的C#类库从ASP.NET发送电子邮件。请查看SmtpClient类,这是发送电子邮件时涉及的主要类。
您可以在Scott Gu的博客SmtpClient的MSDN页面上找到代码示例。
此外,您需要运行SMTP服务器。我建议使用面向开发的SMTP4Dev邮件服务器,它不需要任何设置。

谢谢,它有效!但是如果我不想使用gmail或hotmail怎么办。我想使用某些公司的服务,例如www.mycompany.com。我需要进行任何服务器配置吗?如果我知道smtp主机和端口是否足够? - Nurlan

1
Create class name SMTP.cs then

using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net.Mail;
using System.Net.Mime;
using System.Net;



/// <summary>
/// Summary description for SMTP
/// </summary>
public class SMTP
{
    private SmtpClient smtp;

    private static string _smtpIp;
    public static string smtpIp
    {
        get
        {
            if (string.IsNullOrEmpty(_smtpIp))
                _smtpIp = System.Configuration.ConfigurationManager.AppSettings["smtpIp"];

            return _smtpIp;

        }
    }


    public SMTP()
    {
        smtp = new SmtpClient(smtpIp);
     }

    public string Send(string From, string Alias, string To, string Subject, string Body, string Image)
    {
        try
        {
            MailMessage m = new MailMessage("\"" + Alias + "\" <" + From + ">", To);
            m.Subject = Subject;
            m.Priority = MailPriority.Normal;

            AlternateView av1 = AlternateView.CreateAlternateViewFromString(Body, System.Text.Encoding.UTF8, MediaTypeNames.Text.Html);

            if (!string.IsNullOrEmpty(Image))
            {
                string path = HttpContext.Current.Server.MapPath(Image);
                LinkedResource logo = new LinkedResource(path, MediaTypeNames.Image.Gif);
                logo.ContentId = "Logo";
                av1.LinkedResources.Add(logo);
            }

            m.AlternateViews.Add(av1);
            m.IsBodyHtml = true;

            smtp.Send(m);
        }
        catch (Exception e)
        {
            return e.Message;
        }

        return "sucsess";
    }
}

then 

on aspx page

protected void lblSubmit_Click(object sender, EventArgs e)
    {
        //HttpContext.Current.Response.ContentType = "text/plain";
        //Guid guid = Guid.NewGuid();
        string EmailMessage = "<html>" +
                                      "<head>" +
                                          "<meta http-equiv=Content-Type content=\"text/html; charset=utf-8\">" +
                                      "</head>" +
                                       "<body style=\"text-align:left;direction:ltr;font-family:Arial;\" >" +
                                       "<style>a{color:#0375b7;} a:hover, a:active {color: #FF7B0C;}</style>" +
                                              "<img src=\"" width=\"190px\"  height= \"103px\"/><br/><br/>" +
                                              "<p>Name:  " + nameID.Value + ",<br/><br/>" +
                                                "<p>Email:  " + EmailID.Value + ",<br/><br/>" +
                                                  "<p>Comments:  " + commentsID.Text + "<br/><br/>" +
                                             // "Welcome to the Test local updates service!<br/>Before we can begin sending you updates, we need you to verify your address by clicking on the link below.<br/>" +
                                              //"<a href=\""></a><br/><br/>" +

                                              //"We look forward to keeping you informed of the latest and greatest events happening in your area.<br/>" +
                                              //"If you have any questions, bug reports, ideas, or just want to talk, please contact us at <br/><br/>" +
                                              //"Enjoy! <br/>" + commentsID.Text + "<br/>" +

                                               //"Test<br/><a href=\"">www.Test.com</a></p>" +
                                      "</body>" +
                                  "</html>";

        lblThank.Text = "Thank you for contact us.";
       // string Body = commentsID.Text;
        SMTP smtp = new SMTP();
        string FromEmail = System.Configuration.ConfigurationManager.AppSettings["FromEmail"];
        string mailReturn = smtp.Send(EmailID.Value, "", FromEmail, "Contact Us Email", EmailMessage, string.Empty);
        //HttpContext.Current.Response.Write("true");
        nameID.Value = "";
        EmailID.Value = "";
        commentsID.Text = "";
    }

0

如果您不想使用Gmail或Hotmail,以下是适合您的解决方案:

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

希望它有所帮助 :)

0

Server.MapPath不存在。没有Server对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接