Member 12658724 Ответов: 4

Мне нужно создать приложение для отправки электронной почты


Я хочу создать консольное приложение для отправки электронной почты. Я буду использовать почтовый сервер компании. Ему нужен сетевой идентификатор пользователя. Я не знаю, готов ли у меня пароль для входа в систему Windows.

Самое сложное-как я могу получить свой пароль?
using System.Net;
using System.Net.Mail;
using System.Net.Mime;

...
try
{

   SmtpClient mySmtpClient = new SmtpClient("my.smtp.exampleserver.net");

    // set smtp-client with basicAuthentication
    mySmtpClient.UseDefaultCredentials = false;
   System.Net.NetworkCredential basicAuthenticationInfo = new
      System.Net.NetworkCredential("username", "password");
   mySmtpClient.Credentials = basicAuthenticationInfo;

   // add from,to mailaddresses
   MailAddress from = new MailAddress("test@example.com", "TestFromName");
   MailAddress to = new MailAddress("test2@example.com", "TestToName");
   MailMessage myMail = new System.Net.Mail.MailMessage(from, to);

   // add ReplyTo
   MailAddress replyto = new MailAddress("reply@example.com");
   myMail.ReplyToList.Add(replyTo);

   // set subject and encoding
   myMail.Subject = "Test message";
   myMail.SubjectEncoding = System.Text.Encoding.UTF8;


Что я уже пробовал:

В своем коде я жестко закодировал имя пользователя и пароль. Но приложение предназначено для любого пользователя. Он не должен помещать его в жесткий код.
System.Net.NetworkCredential basicAuthenticationInfo = new
      System.Net.NetworkCredential("username", "password");

4 Ответов

Рейтинг:
2

F-ES Sitecore

Вы не можете получить свой пароль, потому что Windows его не хранит. Если smtp-сервер использует фактическую учетную запись windows, то для получения более подробной информации используйте аутентификацию Windows, google smtp with windows authentication.

Кроме того, smtp - серверы будут иметь одно имя пользователя и пароль, которые вы используете в своем коде, а smtp-сервер имеет включенную ретрансляцию почты, так что вы можете отправлять "от" любой учетной записи через этот единственный набор учетных данных.

Решение все зависит от того, как настроены ваш сервер и сеть.


Рейтинг:
12

Pedro Hernández

///----------------------------------------------------------------------------------------
///


/// Отправить электронное письмо в список получателей
///

///
частный недействительными доставку(список<доставить&ГТ; доставить)
{

пробовать
{
//Получить конфигурацию из App.config
строка email = ConfigurationManager.AppSettings["электронная почта"].Метод toString();
строка emailpass = ConfigurationManager.AppSettings["emailpass"].Метод toString();
строка host = ConfigurationManager.AppSettings["хост"].Метод toString();
строка port = ConfigurationManager.AppSettings["порт"].Метод toString();
строка SSL = ConfigurationManager.AppSettings["SSL"].Метод toString();
строковые учетные данные = ConfigurationManager.AppSettings["Учетные Данные"].Метод toString();
строка nick = ConfigurationManager.AppSettings["Ник"].Метод toString();

foreach (var item in deliver)
{
// Почта Obejct
Получить помощь почта = Новый получить помощь();
почта.From = новый почтовый адрес(email, ник);


почте.Для.Добавить(элемент.Электронной почты);
mail.Subject = item.Subject;

// Тело.
строка text = Body;
AlternateView plainView = AlternateView.CreateAlternateViewFromString(текст, кодировка.Как utf8, MediaTypeNames.Текст.Равнина);


// HTML Body ...
строка html = item.Тело + текст + " Image 1";
AlternateView htmlView = AlternateView.CreateAlternateViewFromString(html, кодировка.UTF-8, то MediaTypeNames.Text.Html);

// Изображение, которое нужно поместить внутрь.
LinkedResource img = новый LinkedResource(Pic, MediaTypeNames.Изображение.В формате JPEG);
НВФ.ContentId = "imagen";

// В HTML ...
htmlView.LinkedResources.Добавить(img);

// Поставьте Вместе ...
почта.AlternateViews.Добавить(Бухта Провидения);
почта.Альтернативные виды.Добавить(htmlView);
почта.IsBodyHtml = true;

// Отправить через SMTP-сервер ...
SmtpClient client = новый SmtpClient();
клиент.Port = int.Parse(порт);
клиент.Узел = Узел;
клиент.EnableSsl = Логическое Значение.Parse(SSL);
клиент.Тайм-аут = 10000;
клиент.DeliveryMethod = SmtpDeliveryMethod.Сеть;
клиент.UseDefaultCredentials = Логическое Значение.Синтаксический Анализ(Полномочия);
клиент.Учетные данные = new System.Net.NetworkCredential(email, emailpass);
клиент.Отправлять почту);
текстовая строка.Пустой;
строка HTML.Пустой;
НВФ.Располагать();
}
}
catch (SmtpException ex)
{

вернуть;
}


}


Рейтинг:
1

MadMyche

У вас есть несколько вариантов....

Ваше приложение может запросить имя пользователя и пароль и заполнить эти части сценария соответствующим образом.

Вы также можете использовать текущие учетные данные вошедших пользователей
Класс credentialcache.Свойство DefaultCredentials (System.Net) | Microsoft Docs[^]

Если вам нужно знать, кто использует приложение (для целей ведения журнала), то вы можете получить его с помощью System.Security.Principal.WindowsIdentity.GetCurrent()
Класс WindowsIdentity (System.Безопасность.Принципал) | Microsoft Docs[^]


Рейтинг:
1

Pedro Hernández

///----------------------------------------------------------------------------------------
/// <summary>
/// Send Email to a List of Recipients
/// </summary>
/// 
private void Deliver(List<Deliver> deliver)
{

	try
	{
		//Get Configuration from App.config
		string email = ConfigurationManager.AppSettings["email"].ToString();
		string emailpass = ConfigurationManager.AppSettings["emailpass"].ToString();
		string host = ConfigurationManager.AppSettings["host"].ToString();
		string port = ConfigurationManager.AppSettings["port"].ToString();
		string SSL = ConfigurationManager.AppSettings["SSL"].ToString();
		string Credentials = ConfigurationManager.AppSettings["Credentials"].ToString();
		string nick = ConfigurationManager.AppSettings["Nick"].ToString();

		foreach (var item in deliver)
		{
			// Mail Obejct
			MailMessage mail = new MailMessage();
			mail.From = new MailAddress(email, nick);

		   
			mail.To.Add(item.Email);
			mail.Subject = item.Subject;

			// Body.
			string text = Body;
			AlternateView plainView = AlternateView.CreateAlternateViewFromString(text, Encoding.UTF8, MediaTypeNames.Text.Plain);


			// HTML Body ...
			string html = item.Body + text + " <img src='cid:imagen' />";
			AlternateView htmlView = AlternateView.CreateAlternateViewFromString(html, Encoding.UTF8, MediaTypeNames.Text.Html);

			// Image to put inside.
			LinkedResource img = new LinkedResource(Pic, MediaTypeNames.Image.Jpeg);
			img.ContentId = "imagen";

			// Into HTML ...
			htmlView.LinkedResources.Add(img);

			// Put Toguether ...
			mail.AlternateViews.Add(plainView);
			mail.AlternateViews.Add(htmlView);
			mail.IsBodyHtml = true;

			// Send via SMTP server ...
			SmtpClient client = new SmtpClient();
			client.Port = int.Parse(port);
			client.Host = host;
			client.EnableSsl = Boolean.Parse(SSL);
			client.Timeout = 10000;
			client.DeliveryMethod = SmtpDeliveryMethod.Network;
			client.UseDefaultCredentials = Boolean.Parse(Credentials);
			client.Credentials = new System.Net.NetworkCredential(email, emailpass);
			client.Send(mail);
			text = string.Empty;
			html = string.Empty;
			img.Dispose();
		}
	}
	catch (SmtpException ex)
	{

			return;
	}


}