【问题标题】:C# sending authenticated mail through smtpC# 通过 smtp 发送经过身份验证的邮件
【发布时间】: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


【解决方案1】:

您可以将其用作电子邮件发送应用程序的更好替代方案:

    Let us suppose you are using OutLook to send the emails:
    SmtpClient smtpClient = new SmtpClient("smtp-mail.outlook.com", 587); // 587 is 
    the port number for outlook

    smtpClient.Credentials = new 
    System.Net.NetworkCredential("yourActualEmailIDhere", "yourActualPassword");
    smtpClient.UseDefaultCredentials = true;
    smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
    smtpClient.EnableSsl = true;
    MailMessage mail = new MailMessage();

    //Setting From , To and CC
    mail.From = new MailAddress("yourActualEmailIDhere");
    mail.To.Add(new MailAddress("destinationEmailAddress"));       // for 'To' you 
    don't need any password credentials. So relax.

   smtpClient.Send(mail);  // finally send the email

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2016-11-17
    • 2011-05-03
    • 2011-12-22
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 2011-01-17
    相关资源
    最近更新 更多