Есть ли способ в коде C# отправить электронное письмо без необходимости знать конфигурацию SMTP-сервера и т. д. На сервере или настроить что-либо из этого?
Код, который я разрабатываю, будет развернут на живом сервере, но я ничего не знаю о конфигурации, поэтому я не могу предсказать, каким будет SMTP-сервер.





Лучший ответ: если вы ничего не знаете до начала работы, можете ли вы перенести все настройки в web.config? Это позволит конфигурировать до последней минуты. Ниже приведен код для сброса в файл web.config. Я бы спросил, почему у вас нет доступа к этой информации, хотя
<system.net>
<mailSettings>
<smtp from = "[email protected]">
<network host = "SMTP SERVER ADDRESS" port = "25"
userName = "USERNAME" password = "PASSWORD">
</smtp>
</mailSettings>
</system.net>
Если ваша конфигурация SMTP верна, просто сделайте следующее:
MailMessage mail = new MailMessage();
mail.To = "To";
mail.From = "From";
mail.Subject = "Subject";
mail.Body = "Body";
SmtpMail.SmtpServer = "localhost";
SmtpMail.Send(mail);
Добавьте это в свой web.config (Ссылка MSDN здесь):
<system.net>
<mailSettings>
<smtp deliveryMethod = "Network" from = "[email protected]">
<network host = "localhost" port = "25" />
</smtp>
</mailSettings>
</system.net>
При использовании SmtpClient без указания параметров конфигурации будут использоваться значения из web.config:
MailMessage msg = new MailMessage(...);
// build message contents
SmtpClient client = new SmtpClient();
client.Send(msg);
Я недавно ответил на подобный вопрос. Вы можете просмотреть это здесь. Используя вырезка из бумаги, вы можете протестировать свое приложение, не зная и не используя фактический производственный сервер smtp.
Затем во время тестирования вы можете просто установить хост на свой локальный компьютер, на котором выполняется papercut в конфигурации app / web. Поэтому его можно будет изменить после перехода в производство.
Papercut покажет вам отправленные электронные письма, а также их содержимое.
В качестве альтернативы: если вы не хотите полагаться на конфигурацию сервера и делать это программно, вы всегда можете сделать это:
MailMessage mail = new MailMessage() {
To = "someone@somewhere",
From = "someone@somewhere",
Subject = "My Subject",
Body = "My message"
};
SmtpClient client = new SmtpClient("SMTP Server Address");
// Naturally you change the "SMTP Server Address" to the
// actual SMTP server address
client.Send(mail);
Но я предлагаю вам вставить его в файл web.config (который также можно настроить с помощью инструмента веб-конфигурации ASP.NET).
Это не сработает. Я получаю исключение .NET: «Ошибка отправки почты». Внутреннее исключение говорит: "{" Удаленное имя не может быть разрешено: 'Адрес SMTP-сервера' "}"
@johnathanconway: Ну ... вы должны указать адрес SMTP-сервера в строке "Адрес SMTP-сервера".
Попробуйте это в Google
Да, вы можете использовать такие инструменты, как SMTP4Dev, для «отправки» писем, вообще не имея SMTP-сервера. Я часто использую это для тестирования, чтобы убедиться, что я действительно не отправляю электронные письма реальным пользователям по ошибке.
To is "get" свойства, вы не можете установить его таким образом.