使用ASP.net发送电子邮件

时间:2011-12-01 09:20:53

标签: c# asp.net email smtp gmail

所以我一直在搜索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>

根据我访问过的几个网站,这应该工作! ..但它没有。

我还有什么问题吗?

6 个答案:

答案 0 :(得分:2)

你永远不会在你的smtpClient.Send()方法之前设置登录添加它。

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

你的代码对我来说似乎没问题。

尝试故意输入虚假凭据。如果你得到一个不同的错误消息,你连接到Gmail,那里有一个问题。

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

longshot - 更新 也许有一个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);
祝你好运..

答案 3 :(得分:0)

你可以尝试一下吗?

            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>

答案 4 :(得分:0)

将这些设置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;
            }

在我身边工作非常好..

答案 5 :(得分:-1)

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