【发布时间】:2017-09-26 05:42:11
【问题描述】:
我的 sendmail 脚本有点问题。我的邮件无法通过我的内部分发列表之一投递。我正在收到返回的消息
RESOLVER.RST.AuthRequired; Authentication required
我的 C# 代码如下所示:
public void SendMail(int supplierValue, List<Location> locationList, string meldingsNr, string date, string fromT, string tillT)
{
var mailFrom = "mail@mail.com";
SmtpClient client = new SmtpClient("server ip",25);
client.UseDefaultCredentials = false;
NetworkCredential basicAuthInfo = new NetworkCredential("username", "password");
client.Credentials = basicAuthInfo;
client.EnableSsl = false;
// Create some empty vars
var toList = "";
var ccList = "";
var mailSubject = "";
var mailBody = "";
List<string> locationListString = new List<string>();
List<string> locationListString2 = new List<string>();
// Populate toList with var llString
** code removed **
// switch on supplier Value to fill toList, ccList and mailSubject
** code removed **
// Create mail message
MailMessage message = new MailMessage();
MailAddress mailAddress = new MailAddress(mailFrom);
message.To.Add(toList);
message.From = mailAddress;
message.CC.Add(ccList);
// set subject and encoding
message.Subject = mailSubject;
message.SubjectEncoding = Encoding.UTF8;
// set body and encoding
message.Body = mailBody;
message.BodyEncoding = Encoding.UTF8;
message.IsBodyHtml = true;
try
{
// Send mail
client.SendCompleted += (s, e) =>
{
client.Dispose();
message.Dispose();
};
client.SendAsync(message, null);
} catch (SmtpException ex)
{
MessageBox.Show(ex.InnerException.Message);
} catch (System.Exception ex)
{
MessageBox.Show(ex.InnerException.Message);
}
}
我应用了这个建议: How can I make SMTP authenticated in C#
确保在调用 SmtpClient.UseDefaultCredentials = false 后设置 SmtpClient.Credentials。顺序很重要,因为设置 SmtpClient.UseDefaultCredentials = false 会将 SmtpClient.Credentials 重置为 null。
但这没有用。我的代码还有什么问题吗?
【问题讨论】:
-
如果你只是把它归结为创建“客户端”,发送一个“你好”的正文并使用 Send,而不是 SendAsync,你仍然得到相同的结果吗?
-
问题是无法在生产中测试这个。发送异步或简单的 html 正文会对 smtp 身份验证产生什么影响。
-
它可以为您提供更好的诊断。您不必在生产中使用虚拟电子邮件测试整个应用程序 - 一个简单的免费 exe 单独发送 1 封邮件应该是一个不错的测试
-
但它必须是一个需要身份验证的分发列表:) 我不能使用它给出错误。我的 to 和 cc 字段中使用的所有其他电子邮件地址都在接收邮件,只有需要身份验证的电子邮件地址不会。
-
那么,正在使用的FROM地址也是TO地址之一?
标签: c# authentication smtp