发送电子邮件 asp.net c#

Posted

技术标签:

【中文标题】发送电子邮件 asp.net c#【英文标题】:send email asp.net c# 【发布时间】:2012-07-27 02:10:22 【问题描述】:

是否可以使用 C# 中的 asp.net 项目从我的计算机(本地主机)发送电子邮件? 最后我要将我的项目上传到网络服务器,但我想在上传之前对其进行测试。

我找到了现成的源代码并尝试在 localhost 中运行它们,但它们都没有成功运行。 例如这段代码:

    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 等发送电子邮件。 我用这个smtp4dev.codeplex.com send html email via C# ASP.NET的可能重复 我已经编辑了我的问题以显示代码 您无法从本地主机发送电子邮件。 【参考方案1】:

Server.mappath 不存在。没有服务器对象。

【讨论】:

【参考方案2】:

如果您不想使用 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);

希望对你有帮助:)

【讨论】:

【参考方案3】:

使用 asp.net C# 发送带附件的电子邮件

  public void Send(string from, string to, string Message, string subject, string host, int port, string password)
    
        MailMessage email = new MailMessage();
        email.From = new MailAddress(from);
        email.Subject = subject;
        email.Body = Message;
        SmtpClient smtp = new SmtpClient(host, port);
        smtp.UseDefaultCredentials = false;
        NetworkCredential nc = new NetworkCredential(txtFrom.Text.Trim(), password);
        smtp.Credentials = nc;
        smtp.EnableSsl = true;
        email.IsBodyHtml = true;

        email.To.Add(to);

        string fileName = "";
        if (FileUpload1.PostedFile != null)
        
            HttpPostedFile attchment = FileUpload1.PostedFile;
            int FileLength = attchment.ContentLength;
            if (FileLength > 0)
            
                fileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
                FileUpload1.PostedFile.SaveAs(Path.Combine(Server.MapPath("~/EmailAttachment"), fileName));
                Attachment attachment = new Attachment(Path.Combine(Server.MapPath("~/EmailAttachment"), fileName));
                email.Attachments.Add(attachment);
                           
        
        smtp.Send(email);

    

完整的教程一步一步(带视频)访问 http://dotnetawesome.blogspot.in/2013/09/send-email-with-attachment-using-cnet.html

【讨论】:

【参考方案4】:
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>acolor:#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 = "";
    

【讨论】:

【参考方案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 已经为您完成此操作时。

【讨论】:

【参考方案6】:

从 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 主机和端口就够了吗? @NurlanKenzhebekov 我从不使用任何服务。发送电子邮件是一个简单的过程。如果您使用公司提供的任何服务,则提供电子邮件域,我认为您只需使用 smtp 发送电子邮件,不需要这样的服务器配置。【参考方案7】:

您可以通过System.Net.Mail 命名空间中的 C# 类库从 ASP.NET 发送电子邮件。看看SmtpClient 类,它是发送电子邮件时涉及的主要类。

您可以在in Scott Gu's Blog 或MSDN page of SmtpClient 上找到代码示例。

此外,您还需要运行 SMTP 服务器。我可以推荐使用SMTP4Dev 邮件服务器,该服务器针对开发并且不需要任何设置。

【讨论】:

谢谢,它有效!但是如果我不想使用 gmail 或 hotmail 怎么办。我想使用一些公司的服务,例如 www.mycompany.com。我需要任何服务器配置吗?知道 smtp 主机和端口就够了吗?【参考方案8】:

如果您有 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 主机和端口就够了吗?

以上是关于发送电子邮件 asp.net c#的主要内容,如果未能解决你的问题,请参考以下文章

使用c#在asp.net中发送邮件失败[重复]

发送包含存储在数据库中的多个附件的电子邮件(ASP.NET C#)

从 C# Asp.net 向 Lync 发送消息

如何在 asp.net C# 中使用启用两因素身份验证的 office365 电子邮件帐户发送电子邮件?

ASP .Net C# 代码向多个用户发送邮件,这些用户的邮件 ID 应隐藏在组名中

C#和ASP.NET通过Gmail账户发送邮件的代码