【问题标题】:Mail send using no credentials C#使用无凭据 C# 发送邮件
【发布时间】:2015-08-05 14:15:46
【问题描述】:

每个人。 我需要使用 C# 发送无回复邮件。网络管理员告诉我,SMTP 服务器被配置为发送这种类型的邮件(使用任何没有密码的帐户)。我正在尝试这个:

System.Net.NetworkCredential credencials = new System.Net.NetworkCredential();
credencials.UserName = "mail@domain.com";
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient();
mail.To.Add(email);
mail.From = new MailAddress("mail@domain.com");
mail.Subject = subject;
mail.IsBodyHtml = true;
mail.Body = message;
SmtpServer.Host = "smtpserver";
SmtpServer.Port = 25;
SmtpServer.Credentials = credencials;
SmtpServer.EnableSsl = true;
SmtpServer.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
SmtpServer.Send(mail);

我尝试过不使用凭据,使用空字符串作为密码,但似乎没有任何效果。

我是否忘记了任何特殊参数或配置?

【问题讨论】:

  • 您遇到异常了吗?如果是这样,您是否也可以添加异常消息?
  • 您可以使用 SmtpClient 发送电子邮件。检查link
  • 简单:无法发送电子邮件 System.Net.Mail.SmtpClient.Send(MailMessage message) ,我也尝试打印堆栈跟踪,但它是相同的例外。注意:我的 VS 是西班牙文,我只是翻译例外,英文文本可能不同。
  • @user2426616 - 检查 InnerException。它应该包含更详细的信息
  • 您确定要在端口 25 上使用 SSL 吗?通常端口 465 与 SSL 一起使用。

标签: c# .net email smtp sendmail


【解决方案1】:

我认为提供用户名和在端口 25 上使用 SSL 的组合意味着尝试了身份验证但失败并且尝试了错误的协议协商。如果您更改以下代码,会发生什么?

MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient();
mail.To.Add(email);
mail.From = new MailAddress("mail@domain.com");
mail.Subject = subject;
mail.IsBodyHtml = true;
mail.Body = message;
SmtpServer.Host = "smtpserver";
SmtpServer.Port = 25;
SmtpServer.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
try {
    SmtpServer.Send(mail);
}
catch (Exception ex) {
    Debug.WriteLine("Exception Message: " + ex.Message);
    if (ex.InnerException != null)
        Debug.WriteLine("Exception Inner:   " + ex.InnerException);
}

我在这里假设您尝试使用的服务器支持无需身份验证的邮件中继,这应该排除互联网上的任何合理配置。

【讨论】:

  • 感谢您的回答,这是例外:无法解析远程名称:'relaysmtp.xxx.xxx' 我不知道这是因为网络问题还是仅仅是我无权访问邮件服务器。
  • @user2426616 - 这意味着它无法将您提供的 FQDN 转换为服务器的 IP 地址。先尝试使用服务器的 IP,然后再返回。
  • 谢谢你,你的解决方案似乎很有用,让我试试,我会回复的。
  • 我使用了 IP 而不是 FQDN,它可以工作。谢谢你,你救了我的命。
【解决方案2】:

尝试删除此行以查看更改后收到的错误:

SmtpServer.Credentials = 凭据;

尽量减少您设置的属性数量。我认为您需要的最低限度是实例化 smtpclient 和 mailmessage。

最低:

 SmtpClient smtp = new SmtpClient("smtpserver");
    MailMessage mail = new MailMessage();

设置: 邮件.To 邮件.来自 邮件.主题 邮件正文

smtp.Send(mail);

【讨论】:

    【解决方案3】:

    如果您将代码放在trycatch 块中,这将对您有很大帮助,这样您就可以查看是否抛出了任何异常。 (试图评论,没有足够的声誉,我很抱歉)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-07
      • 2019-04-17
      • 1970-01-01
      • 2016-11-17
      • 2011-07-18
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      相关资源
      最近更新 更多