Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ASP.net发送电子邮件_C#_Asp.net_Email_Smtp_Gmail - Fatal编程技术网

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

C# 使用ASP.net发送电子邮件,c#,asp.net,email,smtp,gmail,C#,Asp.net,Email,Smtp,Gmail,所以我一直在寻找通过asp网站使用gmail帐户发送电子邮件的方法 我已经尝试了很多方法,包括由于他获得了大量的选票,哪一种似乎是最好的 不管多么可悲,它对我仍然不起作用!我一直在休息 这是我的密码: var fromaddress = new MailAddress("from@gmail.com", "from"); var toaddress = new MailAddress("to@address.com", "to"); try { using (var smtpC

所以我一直在寻找通过asp网站使用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>

根据我访问过的几个网站,这应该有效。。但事实并非如此


还有什么我做错了吗?

您从未设置登录名,请在smtpClient.Send()方法之前添加此项

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

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

您可以尝试一下吗

            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>

//SMTP客户端主机名

我觉得你的代码很好

尝试故意输入错误的凭据。如果你收到一条不同的错误信息,你就连接到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);

祝您好运。

将这些设置
启用SSL=true
defaultCredentials=“false”
放在您的web.config设置中。Gmail smtp服务器要求SSL设置为true,如果您提供凭据,则
mailclient.UseDefaultCredentials=false
应为false

更新Web.Config设置:



在我这边工作得非常好。

您甚至没有记录异常,您只返回false,不在任何地方写入异常详细信息、消息、堆栈跟踪。。。任何事情都有可能发生,你根本不知道会发生什么。我建议您正确地捕获异常并将其记录到日志文件中。@Davide:因为这只是测试,我只会得到超时。。除了例外,我做什么其实并不重要。目前只有这样我才能看到带有断点的异常。如果他没有在代码中设置凭据,则将使用配置中设置的凭据。@Grrbrr404使用gmail发送电子邮件有任何限制吗?RoyiNamir你是说邮件大小还是类似的?我不知道,对不起@Edgar如果这是真的,那么问题可能是端口587-他应该检查他的网络配置或发布详细的验证message@Grrbrr404还有,我想说的是,通过Gmail我能收到的电子邮件数量是:“操作超时了。”使用gmail发送电子邮件有什么限制吗?@RoyiNamir,据我所知没有。过去我曾多次使用gmail发送电子邮件,并取得了成功。我可以发送的电子邮件数量有限制吗?我也可以像发送邮件一样发送邮件给xxx吗BillGates@microsoft.com寄来的?(它允许您这样做吗?)-从field@RoyiNamir快速搜索表明有一些限制:你现在能试试吗?我加了一行,但我忘了。smtpClient.DeliveryMethod=SmtpDeliveryMethod.PickupDirectoryFromIis;这对我来说适用于任何网络服务器(我已经用gmail、yahoo和hotmail测试过),包括你在内,使用System.Net.Mail;在顶部?请注意:我没有包含不需要的“NetworkCredential”,我已经再次修改了我的代码。你能试试吗?新增的是:smtp.DeliveryMethod=SmtpDeliveryMethod.NetWork;如果未提供网络凭据,您可能也需要网络凭据。仍将超时。。所以我想我必须修好防火墙。可悲的是,我现在在学校,所以我怀疑我能改变什么,除非它是我的个人防火墙。因此,我现在将在服务器上尝试同样的方法,看看那里发生了什么,假设那里的设置对于发送邮件是正确的。所以很可能是防火墙问题。请看一下我发布的代码,以双重检查您的web.config是否存在问题。
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;
}
           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);
<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>
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;
            }