【问题标题】:Sending email with ASP.net使用 ASP.net 发送电子邮件
【发布时间】:2012-01-10 10:57:53
【问题描述】:

所以我一直在搜索stackoverflow,寻找一种通过asp网站使用gmail帐户发送电子邮件的方法......

我尝试了很多方法,包括 Sending email in .NET through Gmail,这似乎是最好的,因为他得到了很多支持。

但遗憾的是它仍然对我不起作用!我一直在休息。

这是我的代码:

 var fromaddress = new MailAddress("from@gmail.com", "from");
 var toaddress = new MailAddress("to@address.com", "to");
 try
 {
     using (var smtpClient = new SmtpClient())
     {              
         smtpClient.EnableSsl = true;
         using (var message = new MailMessage(fromaddress, toaddress))
         {
             message.Subject = "Test";
             message.Body = "Testing this shit!";
             smtpClient.Send(message);
             return true;
         }
     }
 }
 catch (Exception ex)
 {
     return false;
 }

在我的 web.config 我有

  <system.net>
    <mailSettings>
      <smtp from="from@gmail.com" deliveryMethod="Network">
        <network userName="from@gmail.com" password="mypassword" host="smtp.gmail.com" port="587"/>
      </smtp>             
    </mailSettings>
  </system.net>

根据我访问过的几个网站,这应该可以! .. 但事实并非如此。

还有什么我做错了吗?

【问题讨论】:

  • 您甚至没有记录异常,您只是返回 false 并且没有在任何地方写入异常详细信息、消息、堆栈跟踪......任何事情都可能发生,而您根本不知道会发生什么。我建议您正确捕获异常并将其记录到日志文件中。
  • @Davide:因为这只是测试,我只是返回超时..我对异常做什么并不重要。目前它只是在那里,所以我可以看到带有断点的异常。

标签: c# asp.net email smtp gmail


【解决方案1】:

将这些设置 EnableSSL = truedefaultCredentials="false" 放入您的 web.config 设置中。 Gmail smtp 服务器要求 SSL 设置为 true,如果您提供凭据,mailclient.UseDefaultCredentials = false 应该为 false。

更新 Web.Config 设置:

<mailSettings>
  <smtp from="from@gmail.com" deliveryMethod="Network">
    <network userName="from@gmail.com" password="mypassword" host="smtp.gmail.com" defaultCredentials="false" port="587" enableSsl="true"/>
  </smtp>             
</mailSettings>

并在 web.config 中提供设置后检查这个较短的代码以发送邮件。即使它发送电子邮件的速度要快得多,而不是在邮件发送功能中创建 smtpclient 设置时指定设置。

Public void SendEmail(string toEmailAddress, string mailBody)
        {
            try
            {
                MailMessage mailMessage = new System.Net.Mail.MailMessage();
                mailMessage.To.Add(toEmailAddress);
                mailMessage.Subject = "Mail Subjectxxxx";
                mailMessage.Body = mailBody;
                var smtpClient = new SmtpClient();
                smtpClient.Send(mailMessage);
                return "Mail send successfully";
            }
            catch (SmtpException ex)
            {
                return "Mail send failed:" + ex.Message;
            }

在我身边工作得很好..

【讨论】:

    【解决方案2】:

    您的代码对我来说似乎很好。

    尝试故意输入虚假凭据。如果您收到不同的错误消息,则您已连接到 gmail 并且那里存在问题。

    如果遇到同样的超时问题,可能不是软件问题,而是防火墙问题。

    远景 - 更新 也许有一个 web.config 问题?尝试在这样的代码中指定所有内容。我在现实生活中使用 Gmail,所以如果这不起作用,那肯定是防火墙/连接问题。

               SmtpClient mailClient = new SmtpClient();
                //This object stores the authentication values     
                System.Net.NetworkCredential basicCredential =
                    new System.Net.NetworkCredential("username@mydomain.com", "****");
                mailClient.Host = "smtp.gmail.com";
                mailClient.Port = 587;
                mailClient.EnableSsl = true;
                mailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
                mailClient.UseDefaultCredentials = false;
                mailClient.Credentials = basicCredential;
    
    
                MailMessage message = new MailMessage();
    
                MailAddress fromAddress = new MailAddress("info@mydomain.com", "Me myself and I ");
                message.From = fromAddress;
                //here you can set address   
                message.To.Add("to@you.com");
                //here you can put your message details
    
                mailClient.Send(message);
    

    祝你好运..

    【讨论】:

    • 仍然超时.. 所以我想我必须修复防火墙。可悲的是,我现在在学校,所以我怀疑我可以改变它,除非它是我的个人防火墙。所以我现在在服务器上尝试同样的方法,看看那里会发生什么,假设那里的设置对于发送邮件是正确的。
    • 所以很可能是防火墙问题。查看我发布的代码,以仔细检查您的 web.config 是否不是问题。
    【解决方案3】:

    你可以试试这个吗?

                SmtpClient smtpClient = new SmtpClient();
                MailMessage message = new MailMessage();
                    try
                    {
                        MailAddress fromAddress = new MailAddress(ConfigurationManager.AppSettings["fromAddress"], ConfigurationManager.AppSettings["displayName"]); //Default from Address from config file
                        MailAddress toAddress = new MailAddress("abc@gmail.com", "from sender");
    
                        // You can specify the host name or ipaddress of your server
                        // Default in IIS will be localhost 
                        smtpClient.Host = ConfigurationManager.AppSettings["smtpClientHost"];
    
    
                        //Default port will be 25
                        smtpClient.Port = int.Parse(ConfigurationManager.AppSettings["portNumber"]); //From config file
    
                        //From address will be given as a MailAddress Object
                        message.From = fromAddress;
    
                        // To address collection of MailAddress
                        message.To.Add(toAddress);
                        message.Subject = ConfigurationManager.AppSettings["Subject"]; //Subject from config file
    
                        message.IsBodyHtml = false;
    
                        message.Body = "Hello World";
                        smtp.DeliveryMethod = SmtpDeliveryMethod.NetWork                    
                        smtpClient.Send(message);
                    }
                    catch (Exception ex)
                    {
                       throw ex.ToString();
                    }
    

    配置设置是,

    <configuration>
        <appSettings>
            <add key="smtpClientHost" value="mail.localhost.com"/> //SMTP Client host name
            <add key="portNumber" value="25"/>
            <add key="fromAddress" value="defaultSender@gmail.com"/>
            <add key="displayName" value="Auto mail"/>
            <add key="Subject" value="Auto mail Test"/>
        </appSettings>
    
    </configuration>
    

    【讨论】:

    • 现在可以试试吗?我添加了一条我忘记的行。 smtpClient.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;这适用于任何网络服务器(我已经用 gmail、yahoo 和 hotmail 进行了测试)
    • 您是否包含在内,使用 System.Net.Mail;在顶部?
    • 请注意:我没有包含不需要的“NetworkCredential”
    • 我再次修改了我的代码。你能试试吗?新增的是:smtp.DeliveryMethod = SmtpDeliveryMethod.NetWork;如果未提供,您可能还需要网络凭据。
    【解决方案4】:
    var smtpClient = new SmtpClient(gmailSmtpServer, gmailSmtpPort)
    {
       Credentials = new NetworkCredential(FromGEmailAddress, FromGEmailAddressPassword),
       EnableSsl = true
    };
    
    try
    {
        using (var message = new MailMessage(fromaddress, toaddress))
        {
          message.Subject = "Test";
          message.Body = "Testing this shit!";
          smtpClient.Send(message);
         return true;
        }
    }
    catch (Exception exc)
    {
      // error
      return false;
    }
    

    【讨论】:

      【解决方案5】:

      按照this page 的建议,尝试安装 telnet 以查看是否可以连接到邮件服务器。这可能是您服务器上的防火墙问题。您也可以尝试使用链接中建议的其他端口。

      【讨论】:

      • 使用gmail发送邮件有什么限制吗?
      • @RoyiNamir 据我所知。我过去曾多次使用gmail发送电子邮件,都成功了。
      • 我可以发送的邮件数量有限制吗?
      • 我也可以像 BillGates@microsoft.com 一样向 xxx 发送邮件吗? (它允许你这样做吗?) - 在 from 字段中
      • @RoyiNamir 快速搜索表明存在一些限制:mail.google.com/support/bin/answer.py?answer=22839
      【解决方案6】:

      你从来没有设置登录在你的 smtpClient.Send() 方法之前添加这个。

      NetworkCredential NetCrd = new NetworkCredential(youracc, yourpass);
      smtpClient.UseDefaultCredentials = false;
      smtpClient.Credentials = NetCrd;
      

      如果 web.config 不能自动运行,请通过 ConfigurationManager 加载它。

      【讨论】:

      • 如果他没有在代码中设置凭据,将使用配置中设置的凭据。
      • @Grrbrr404 使用gmail发送邮件有什么限制吗?
      • RoyiNamir 你的意思是邮件大小或类似的东西?我不知道我很抱歉。 @Edgar 如果那是真的那么问题可能是端口 587 - 他应该检查他的网络配置或发布详细的异常消息
      • @Grrbrr404 另外,但我的意思是我可以通过 gmail 生成的电子邮件数量
      • 我得到的只是:“操作已超时。”
      猜你喜欢
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 2017-08-13
      • 1970-01-01
      • 2012-12-11
      • 2016-09-15
      • 1970-01-01
      相关资源
      最近更新 更多