C# 使用ASP.net发送电子邮件
所以我一直在寻找通过asp网站使用gmail帐户发送电子邮件的方法 我已经尝试了很多方法,包括由于他获得了大量的选票,哪一种似乎是最好的 不管多么可悲,它对我仍然不起作用!我一直在休息 这是我的密码: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
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;
}