我通过复制此KB article中的代码编写了一个示例程序,并根据用户的信息进行了一些编辑。它使用弃用的.NET库System.Web.Mail来执行此操作,因为新的System.Net.Mail不支持隐式SSL。我去了端口465上使用谷歌smtp服务器测试它,这是他们隐含的电子邮件端口,一切正常。但是,当我把它交给客户端在他的网络上进行测试时,没有任何内容被发送/接收,这是错误:
2013-03-07 15:33:43 - The transport failed to connect to the server.
2013-03-07 15:33:43 - at System.Web.Mail.SmtpMail.LateBoundAccessHelper.CallMethod(Object obj, String methodName, Object[] args)
2013-03-07 15:33:43 - at System.Web.Mail.SmtpMail.CdoSysHelper.Send(MailMessage message)
2013-03-07 15:33:43 - at System.Web.Mail.SmtpMail.Send(MailMessage message)
对于电子邮件SSL,我不是很精通,所以这是我可能的理论根本原因:
假设他正在使用正确的smtp服务器和正确的端口(SSL端口),我想知道是否有以下任何原因:
他们在邮件服务器上使用SSL,但他没有在运行我的程序的计算机上安装证书,即使他在同一个域并使用相同的电子邮件域作为发件人。
他们正在使用SSL,但他们可能使用NTLM或匿名身份验证,而我的程序使用基本身份验证。
很抱歉,如果我提供的信息很少,因为我自己在这方面很陌生,所以我还在研究更多。
您知道我可以在最后执行的任何步骤,以确保我的小测试程序可以使用隐式SSL电子邮件服务器的smtp服务器发送吗?
编辑:我在代码中添加了以下行,表示我正在使用SSL。
oMsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true");
答案 0 :(得分:1)
也许这是迟到的回答,但看看https://sourceforge.net/p/netimplicitssl/wiki/Home/
您可以将邮件发送到端口465 无需修改代码就可以了。
从项目的维基页面:
var mailMessage = new MimeMailMessage();
mailMessage.Subject = "test mail";
mailMessage.Body = "hi dude!";
mailMessage.Sender = new MimeMailAddress("you@gmail.com", "your name");
mailMessage.IsBodyHtml = true;
mailMessage.To.Add(new MimeMailAddress("yourfriend@gmail.com", "your friendd's name"));
mailMessage.Attachments.Add(new MimeAttachment("your file address"));
var emailer = new SmtpSocketClient();
emailer.Host = "your mail server address";
emailer.Port = 465;
emailer.EnableSsl = true;
emailer.User = "mail sever user name";
emailer.Password = "mail sever password" ;
emailer.AuthenticationMode = AuthenticationType.PlainText;
emailer.MailMessage = mailMessage;
emailer.OnMailSent += new SendCompletedEventHandler(OnMailSent);
//Send email
emailer.SendMessageAsync();
// A simple call back function:
private void OnMailSent(object sender, AsyncCompletedEventArgs asynccompletedeventargs)
{
Console.Out.WriteLine(asynccompletedeventargs.UserState.ToString());
}
答案 1 :(得分:0)
这里我使用gmail smtp使用c#发送邮件。请参阅下面的代码。它会给你一个见解,这些东西是如何工作的。用您的电子邮件服务器设置替换gmail设置。不要担心安全证书,它们将由框架本身来处理。
public static bool SendMail(string to, string subject, string body)
{
bool result;
try
{
var mailMessage = new MailMessage
{
From = new MailAddress("your email address")
};
mailMessage.To.Add(new MailAddress(to));
mailMessage.IsBodyHtml = true;
mailMessage.Subject = subject;
mailMessage.Body = body;
var userName = "your gmail username";
var password = "your gmail password here";
var smtpClient = new SmtpClient
{
Credentials = new NetworkCredential(userName, password),
Host = smtp.gmail.com,
Port = 587,
EnableSsl = true
};
smtpClient.Send(mailMessage);
result = true;
}
catch (Exception)
{
result = false;
}
return result;
}
你引用的那段代码非常古老而且很有用。 CDO在ASP应用程序中用于发送邮件。我想你没有向下滚动看
Article ID: 555287 - Last Review: April 7, 2005 - Revision: 1.0
APPLIES TO
Microsoft .NET Framework 1.1
您正在推荐一款相当陈旧的代码......无论如何都要按照显示的代码,一切都会很精细......
<强>更新强>
我的不好,我没仔细看过。但
我将保留上述代码,因为它可能对您有所帮助 或任何其他需要通过SSL发送邮件功能的人 gmail或以后的任何其他服务器。
。然后在这种情况下你需要一些第三方应用程序。我找到了你的库See here