我有一个任务来解决C#应用程序未能发送自动电子邮件的原因。我仔细检查了源代码,发现绝对没有错。
因此,我尝试从Thunderbird(我通常使用的电子邮件客户端)发送电子邮件。我指定了相同的SMTP中继,相同的UID和密码,并且一切正常。
为找出问题,我尝试编写一个非常简短的C#控制台应用程序,以查看可能出了什么问题。我写了以下内容:
using System.Net;
using System.Net.Mail;
namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
var client = new SmtpClient("my.server.with.ssl", 465);
client.EnableSsl = true;
client.Credentials = new NetworkCredential("uid", "pwd");
var message = new MailMessage("me@example.com", "myemail@mydomain", "Test Message Subject", "Test Message Body");
client.Send(message);
}
}
}
我输入了与Thunderbird中相同的凭据。运行以上命令时,出现以下错误:
未处理的异常:System.Net.Mail.SmtpException:发送邮件失败。 ---> System.IO.IOException:无法从传输连接net_io_connectionclosed读取数据。
如何从Thunderbird发送电子邮件很好,但是当我尝试从基本的C#应用程序发送电子邮件时,上面的简单编程却无法正常工作?
编辑,我尝试按照@stuartd所链接的问题中的建议将端口号更改为587,在这种情况下,我得到一个错误,提示The operation timed out.
编辑我曾尝试使用其他电子邮件服务器并调整设置,但到目前为止没有任何效果。我尝试连接到用于个人电子邮件的同一SMTP服务器,但显示连接超时错误。
编辑我不能说为什么,但是尽管我没有更改任何代码,但现在一切似乎都可以正常工作。似乎我的联系发生了奇怪的事情。
答案 0 :(得分:0)
尝试使用默认构造函数并仅指定主机。
另外,某些服务器要求在客户端代表其发送电子邮件之前,对客户端进行身份验证。尝试更改UseDefaultCredentials
var mail = new MailMessage();
mail.From = new MailAddress("xxx@gmx.net");
mail.To.Add("yyy@gmail.com");
mail.IsBodyHtml = true;
mail.Subject = "subject";
mail.Body = "content";
var client = new SmtpClient();
client.UseDefaultCredentials = false;
client.Host = "mail.gmx.net";
client.EnableSsl = true;
client.Credentials = new NetworkCredential("user", "pass");
client.Send(mail);
如果这无助于告诉我们服务器名称是否为公共名称
答案 1 :(得分:0)
尝试使用:
SmtpClient smtpClient =新的SmtpClient(“ mail.mymailhost.com”);
smtpClient.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;