如何解决使用c#SmtpClient
我们的应用程序可以通过SmtpClient发送电子邮件。我们的一位客户正在尝试使用他的gmail帐户执行此操作,但失败导致超时。但是,在我们的测试实验室中,它可以正常工作(使用另一个gmail帐户)。
在跟踪中,我可以看到服务器未使用证书,服务器密钥交换和服务器Hello完成来应答。我想知道这可能是什么原因?
我还在跟踪中注意到,该客户正在使用TLSv1,因此我尝试在Windows7系统上复制该错误,但仍然对我有用。
oSmtp = new SmtpClient(this.host,this.port);
oSmtp.DeliveryMethod = SmtpDeliveryMethod.Network;
oSmtp.EnableSsl = ssl;
NetworkCredential oCredential = new NetworkCredential(this.userName,this.password);
oSmtp.Credentials = oCredential;
oSmtp.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
string userState = null;
oSmtp.SendAsync(oMsg,userState);
就代码而言,enableSsl为true,端口为587,我们还指示客户检查其gmail帐户并允许安全性较低的应用程序。
我们将要求客户提供更多具体细节,并尝试在我们的应用程序中放置更多的痕迹,但我想知道是否有任何事情可以阻止服务器使用证书进行回答,...
检查痕迹显示,客户Client Hello和我们的测试Client Hello之间没有显着差异。
谢谢!
解决方法
这是我几天前使用的工作示例:
string fromAddress = "fromaddress@gmail.com";
var toAddress = new MailAddress("fake@email.com","To person");
const string fromPassword = "pass";
const string subject = "test";
const string body = "Hey now!!";
using (MailMessage mail = new MailMessage())
{
mail.From = new MailAddress(fromAddress);
mail.To.Add(toAddress);
mail.Subject = subject;
mail.Body = body;
mail.IsBodyHtml = true;
//mail.Attachments.Add(new Attachment("C:\\file.zip"));
using (SmtpClient smtp = new SmtpClient("smtp.gmail.com",587))
{
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential(fromAddress,fromPassword);
smtp.EnableSsl = true;
smtp.Send(mail);
}
}
还要确保为您用于发送数据的gmail启用Less secure app access :
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。