命令行应用程序无法通过计划任务发送电子邮件

时间:2014-07-16 16:48:16

标签: c# email scheduled-tasks

我在C#中编写了一个小命令行实用程序,它通过执行的操作发送电子邮件。从命令行手动运行时,电子邮件会成功发送,但当它作为计划任务运行时不会发送。我将其设置为以最高用户设置作为计划任务运行。没有防火墙设置会阻止测试计算机上的外发电子邮件。

计划任务是否以限制发送电子邮件的用户身份运行?我不确定是否有任何代码可以在C#中发送可以将邮件程序设置为管理员的电子邮件。

感谢。

以下是我用来发送电子邮件的C#代码:

public static void SendNotifications ()
{
  string smtpServer = "mailserver.com";
  string smtpUser = "a@b.com";
  string smtpPassword = "abc123";

  // Set the variables for the mail object.

  using (MailMessage Email = new MailMessage ())
  {
    Email.IsBodyHtml = true;

    Email.From = new MailAddress (smtpUser);

    Email.To.Add ("a1@b.com");
    Email.CC.Add ("a2@b.com");

    Email.Subject = "Subject";

    Email.Body = @"Here is a notification.";

    SmtpClient smtp = new SmtpClient (smtpServer);

    System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential (smtpUser, smtpPassword);

    smtp.UseDefaultCredentials = false;
    smtp.Credentials = SMTPUserInfo;

    try
    {
      // Send the mail.

      smtp.Send (Email);
    } // try

    catch (Exception ex)
    {
      // ignore error message
    } // catch (Exception e)
  } // using (MailMessage Email = new MailMessage ())
}

1 个答案:

答案 0 :(得分:0)

假设您通过任务计划程序运行控制台应用程序,可以将运行计划程序的用户更改为具有发送电子邮件权限的用户。如果您在代码中使用DefaultCredentials = true,那么这一点尤为重要。

通常,这是通过创建一个具有足够权限来执行手头任务的服务帐户来完成的,仅此而已。可以在任务计划程序中配置哪个用户帐户将在相关任务的“常规”选项卡上执行任务。将有一个更改用户按钮。请务必选中“运行用户是否已登录”。