C#通过smtp发送经过身份验证的邮件

标签 c# authentication smtp

我的 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。

但这没有用。我的代码还有什么问题吗?

最佳答案

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

    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

希望这对您有所帮助。

关于C#通过smtp发送经过身份验证的邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43674534/

相关文章:

c# - 通过 C# 中的循环发送电子邮件失败(使用 .net smtp)

C# WPF MVVM ItemSource 未附加列表

c# - XDocument如何通过xpath搜索

android - 我想如何在 Firebase 身份验证中实现多用户帐户登录和切换?

node.js - 使用 Nodejs 无法通过 Gmail smtp 发送电子邮件

ruby-on-rails - 使用外部 SMTP 在 Heroku 上发送电子邮件

c# - 打开数据集、计算记录并将数字返回给变量的最快方法

c# - 为什么我会收到 403?

java - GAE 中的 userservicefactory 是否仅适用于拥有 g-mail 帐户的用户?

security - 如果我不控制身份验证服务,如何使用不记名 token 保护 API 服务